
Eine DSL, drei Outputs. Die Pipeline ist linear, der Render-Dispatcher gabelt am Ende. Wenn das System richtig gebaut ist, fließen Brand-Tokens durch jeden Output-Modus, ohne dass der Renderer für jede Modalität Sonderfälle bekommt. Genau diesen Punkt legt Feinschliff offen.
Vier Komponenten. Parser liest .slide.dsl-Dateien und erzeugt DSL-Nodes. Expander macht Slot-Interpolation und löst zusammengesetzte Blöcke auf: Excalidraw-Diagramm-Aufrufe und SVG-Infografik-Blöcke werden hier in vorab gerenderte PNGs umgewandelt. Brand Bridge lädt tokens.json aus dem aktiven Brand-Pack und folgt der Vererbungskette, damit Child-Overrides sauber auf Parent-Brand mergen. Render Dispatcher gabelt am Ende nach Output-Modus: python-pptx für 1920×1080 .pptx, pure-Python (~150ms, Playwright als Fallback) für PNG-Diagramme, brand-aufgelöstes SVG für Infografiken.
Die wirkliche Probe ist nicht die Gabel selbst. Sie ist die Frage: trägt derselbe Code-Pfad vier Marken mit widersprüchlichen Chrome-Regeln? Vier Referenz-Packs spannen den Test-Raum auf. Sie bringen Regeln mit, die nicht gleichzeitig wahr sein können:
- Pack A: scharfe Ecken überall, keine Schatten, 700/300-Gewichte mit explizit fehlender 500.
- Pack B: vollständig abgerundete Pillen (
radius=9999) für CTAs, schwere OOXML-Schatten, dunkler Canvas. - Pack C: ebenfalls scharfe Ecken, aber niemals fettes Display-Gewicht (500 als Maximum), negatives Buchstaben-Tracking.
- Pack D: maßgeschneidertes Chrome: Tabellenkachel als Hero, OOXML-Gradient, helle Reset-Footer-Zone auf dunklem Canvas.
Wenn der Renderer das alles über dieselben Primitive (add_button, add_chip, add_column(as_card=True)) ohne Sonderfälle abbildet, trägt die Architektur. Sonst war Brand-Pluggable Marketing. Konkret: radius.btn = 0 macht in Pack A scharfe Rechtecke, radius.btn = 9999 macht in Pack B vollrunde Pillen. Gleicher Aufruf, vier Marken, vier Decks.
Die öffentliche Brand-Galerie ist die Probe: 12 Brand-Packs gegen 30+ Layouts, klickbar im Browser. Anspruch steht nicht im README. Anspruch steht in den Pixeln. Falsifizierbar, ohne Setup.
Eine Atlas-Schicht erdet die Planung vor dem Rendern. 39 kuratierte Folien aus 6 Domänen liegen als Korpus im Repo, jeweils mit Thumbnail und Metadaten zu Genre, Headline-Muster und nächstliegendem Feinschliff-Layout. Phase 1 ist das Korpus. Phase 2 ist Retrieval direkt in /deck und kommt später. Erst wenn das System konkrete Muster ziehen kann, statt nur aus Modellprior zu raten, ist die Planungs-Lücke geschlossen.
Eigene Marke einbinden? Eine DESIGN.md im Google-offenen Spec-Format plus ein Bake-Aufruf:
mkdir -p feinschliff/brands/myco
$EDITOR feinschliff/brands/myco/DESIGN.md
uv run python scripts/bake_palette.py from-design-md --brand myco --base feinschliff
FEINSCHLIFF_BRAND=myco /deck "..."
Als Nächstes kommt Drop-in-Support für jede DESIGN.md aus awesome-design-md: Stripe, Vercel, Linear, Notion. Alles, was offen liegt. Brand-Pluggable hängt an einem Code-Pfad. Der Code-Pfad steht. Jetzt geht die Tür für mehr Marken auf.