Wire s-expression rendering into live app — blog link-card

- Add setup_sexp_bridge() and load_shared_components() to factory.py
  so all services get s-expression support automatically
- Create shared/sexp/components.py with ~link-card component definition
  (replaces 5 per-service Jinja link_card.html templates)
- Replace blog's link-card fragment handler to use sexp() instead of
  render_template() — first real s-expression rendered page content

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-27 14:38:51 +00:00
parent 5d9f1586af
commit 28c66c3650
3 changed files with 73 additions and 17 deletions

View File

@@ -28,6 +28,8 @@ from shared.browser.app.errors import errors
from .jinja_setup import setup_jinja
from .user_loader import load_current_user
from shared.sexp.jinja_bridge import setup_sexp_bridge
from shared.sexp.components import load_shared_components
# Async init of config (runs once at import)
@@ -104,6 +106,8 @@ def create_base_app(
register_db(app)
register_redis(app)
setup_jinja(app)
setup_sexp_bridge(app)
load_shared_components()
errors(app)
# Auto-register OAuth client blueprint for non-account apps