Architecture Decision Record

card-meta-list + meta-row: zwei neue SDCs für Field-gebundene Job-Meta-Listen

Zwei neue SDCs: card-meta-list als Bubble-Frame-Container (Slot-basiert) + meta-row als Mikro-SDC (prop-driven mit icon, label, value). Card-Familie wächst von drei auf vier SDCs, Render-Quellen-Trennung bleibt erhalten.

Kontext

Die Vacancy-Detail-Page (node.vacancy.full) wird nach dem SOLCOM-Figma-Frame „Projektdetails" (figma.com/design/CHHDfbpX8Ys2LBiGs5HVK0?node-id=1019-78888) überarbeitet (Volltext-Begründung in ADR-0014). Markantestes neues Element ist eine Meta-Card links neben dem Job-Titel: ein Bubble-Card-Frame mit einer Liste aus 5 Zeilen, jede aus Icon + Bold-Label + Wert (z. B. „Stellentyp: Festanstellung", „Einsatzort: Reutlingen"). Werte kommen aus Vacancy-Feldern.

Die bestehende Card-Familie aus ADR-0009 hat drei SDCs nach Render-Quelle getrennt. Die Meta-Card passt in keine der drei: sie ist strukturierte Field-gebundene Liste innerhalb eines Content-Templates, nicht freie Slot-Komposition und nicht ein einzelnes Field-zu-Card-Mapping.

Architekturell bindender Constraint aus der Canvas-Engine: Canvas Content-Templates können in einem SDC-Prop kein dynamisches items[] aus mehreren Field-Refs synthetisieren. Eine Field-Ref-Expression bindet 1:1 ein Feld — eine Meta-Liste mit 5 Zeilen, die je auf ein anderes Feld zeigen, kann also nicht sauber als ein einziges items: array<{icon, label, value}>-Prop modelliert werden.

Vor dem ADR wurde der customer-lens-reviewer-Agent aufgerufen (Pflicht laut CLAUDE.md). Vier Optionen wurden bewertet.

Entscheidung

Zwei neue SDCs einführen: card-meta-list als Bubble-Frame-Container (Slot-basiert) + meta-row als Mikro-SDC (prop-driven mit icon, label, value). Konkret:

Rejected alternatives

rejected A* — Nur meta-row als neue SDC, Container ist die bestehende card-bubble-profile-no-button mit CSS-Modifier (.bubble-card--meta)

Vom Lens-Reviewer als „schmalerer Pfad" diskutiert: ein neuer SDC-Eintrag im Canvas-Component-Browser statt zwei. Verworfen, weil das Setzen des CSS-Modifiers entweder einen neuen Prop am card-bubble-profile-no-button bedeutet (Schema-Bruch der bestehenden SDC) oder einen Theme-Preprocess-Hook (Site-Builder kann Modifier nicht ohne Dev-Hilfe aktivieren). Außerhalb des Vacancy-Templates wäre die Meta-Card nicht self-service nutzbar. A jetzt sauber zu bauen ist günstiger als A* später zu A umzubauen.

rejected B — Monolithische SDC card-meta-list mit items[]-Prop

Eine SDC mit Prop items: array<{icon, label, value}>. Verworfen wegen des Canvas-Engine-Constraints: Field-Ref-Expression bindet 1:1 ein Feld, kein dynamisches items[] aus N Field-Refs. Workarounds (Theme-Preprocess, Twig-Direktzugriff auf node) brechen das SDC/Canvas-Field-Binding-Modell.

rejected C — Bestehende section-SDC + 5× text-SDC

Keine neue SDC, aber text rendert keinen Phosphor-Icon, und section hat keine Notch-Geometrie. Visuell verfehlt das Figma vollständig. Verworfen — das ist die „nicht ernsthaft verfolgte" Option.

rejected D — card-SDC um Variant meta-list erweitern

card ist laut ADR-0009 prop-driven für View-Mode-Listen. Eine zusätzliche meta-list-Variant würde card.twig mit einer dritten Render-Logik-Verzweigung belasten und card zur God-Component machen.

rejected Eine einzige Mega-SDC vacancy-meta-card mit hartverdrahteten 5 Vacancy-Feld-Slots

Vollständig Vacancy-spezifisch — die Meta-Card-Komposition wäre nicht für Freelancer-Projekte oder andere Bundles wiederverwendbar. Bricht das Card-Familie-Pattern aus ADR-0009 (Cards sind Container, nicht Bundle-spezifische End-Komponenten).

Consequences