Architecture Decision Record · 0009

byte_theme:card: prop-driven Standard-Card mit Bubble-Frame-Outline (no-CTA-Variante) wieder eingeführt

TL;DRbyte_theme:card wird als prop-driven Wrapper um byte_theme:bubble-card-frame mit variant: profile-2-2-no-cta neu eingeführt — exakt das Schema, das node.blog.card bereits füttert. Card-Familie wächst von zwei auf drei SDCs.

Kontext

Das byte_theme hatte bis vor kurzem eine Card-Familie aus mehreren SDCs: card, card-bubble-text, card-bubble-icon, card-bubble-profile. Eine vorangegangene Refactor-Welle hatte die Familie auf zwei Komponenten reduziert: card-bubble-profile (mit CTA-Notch) und card-bubble-profile-no-button (ohne CTA, gerade Bottom-Edge). Beide sind slot-basiert — Inhalt wird in Drupal Canvas via {% block content %} zusammengestellt.

Das Canvas-Content-Template canvas.content_template.node.blog.card referenziert aber weiterhin sdc.byte_theme.card mit strukturierten Props (heading_text, level, url, media: {src, alt, width, height}, text, orientation, style, background) — die Drupal-Default-Render-Form für Blog-Posts in der „Card"-View-Mode. Da byte_theme:card als SDC entfernt wurde, scheitert das Rendern jeder Blog-Card-Liste mit Twig\Error\LoaderError: Template "byte_theme:card" is not defined. Die Insights-Section auf der Home-Page zeigte stattdessen drei Stack-Trace-Boxen.

Der User hat im Live-Debug zwei Constraints fixiert: (1) byte_theme:card ist die „normale Card ohne Aussparung unten", (2) sie soll den SOLCOM-Brand-Frame tragen („Fancyborder" — gemeint ist die gradient-Stroke-Outline aus bubble-card-frame profile-2-2-no-cta).

Entscheidung

byte_theme:card als prop-driven Wrapper um byte_theme:bubble-card-frame mit variant: profile-2-2-no-cta wieder einführen. Konkret:

Rejected alternatives

Expand each rejected option to see the rationale.

node.blog.card Content-Template auf byte_theme:card-bubble-profile-no-button umbiegen rejected

Bricht das Schema, weil card-bubble-profile-no-button slot-basiert ist und keinen heading_text/media-Prop kennt. Die Migration auf Slot-basierte Props wäre eine eigene Refactor-Welle, die den Scope der Bug-Fix-Aufgabe sprengt.

Plain-CSS-Border statt Bubble-Frame rejected

Liefert keine SOLCOM-Identity. User-Feedback hat das sofort als „nicht die richtige Card" erkannt. Der gradient-Stroke ist Brand-charakteristisch und gehört auf alle drei SDCs der Card-Familie.

card-bubble-profile-no-button zur prop-driven Komponente umbauen (Slot raus, Props rein) rejected

Bricht alle bestehenden Aufrufer. Die beiden Use-Cases (Slot vs. Prop-driven) existieren parallel sinnvoll — die Site-Builder-Erfahrung im Drupal-Canvas-Picker ist klarer mit drei dedizierten Komponenten.

byte_theme:card als Variant-Prop auf byte_theme:card-bubble-profile-no-button (mode: slot|prop-driven) rejected

Bringt Conditional-Schema-Komplexität (heading_text nur sinnvoll wenn mode: prop-driven), siehe ADR-0004 für die analoge Verwerfung. Drei dedizierte SDCs schlagen eine SDC mit Mode-Switch.

Card-Familie auf zwei reduzieren lassen und das Content-Template abschalten/migrieren rejected

Würde die Insights-Section abreißen oder kostet eine Field-Mapping-Refactor-Welle. Beides nicht im Scope. Re-Introduktion einer dritten Card-SDC ist die kleinste Schiene zum Fix.

Consequences