node.vacancy.full-Canvas-Content-Template-Overhaul nach Figma „Projektdetails"
node.vacancy.full, mit hart vorverdrahtetem 5er-Field-Mapping für die Meta-Rows. Meta-Card-Topologie definiert in ADR-0013.
Kontext
Das aktuelle Canvas-Content-Template canvas.content_template.node.vacancy.full.yml besteht aus genau drei Render-Bausteinen: einem Breadcrumb-Block, einer einzelnen section mit Heading (Job-Titel) im Header-Slot und Text (field_body) im Main-Slot, sowie einer cta-Section mit Apply-Button.
Optisch wie strukturell ist das deutlich entfernt vom SOLCOM-Figma-Frame „Projektdetails" (figma.com/design/CHHDfbpX8Ys2LBiGs5HVK0?node-id=1019-78888), das Job- und Projekt-Detail-Pages als reichere Komposition zeigt: Hero-Bereich mit Meta-Card links (5 Eckdaten als Icon+Label+Value-Liste in einem Bubble-Frame), Job-Titel + Apply-Button rechts, darunter Lead-Text und Body, dann Cross-Sell-Section, dann Sticky-Apply-Bar am Footer. Das ganze auf Dark-Blue-Background mit Lime-Light-Effekten als Brand-Identity.
Daten-Gaps zum Figma: Der Frame zeigt „Dauer: 6 Monate +" und „Starttermin: 01.05.2026" — beides ist im Vacancy-Bundle nicht modelliert. Die Meta-Card-Inhalte müssen auf andere Vacancy-Felder umgemappt werden. Salary ist 4-Feld-Aggregat (min + max + currency + type) und passt nicht in einen einzigen Field-Ref-Slot.
Die Meta-Card-Komponenten-Topologie ist in ADR-0013 separat festgelegt. Diese ADR fixiert die Page-Section-Topologie und das 5er-Field-Mapping.
Entscheidung
3-Section-Topologie + Breadcrumb für node.vacancy.full, mit hart vorverdrahtetem 5er-Field-Mapping für die Meta-Rows. Konkret:
- Block 1 — Breadcrumb (
block.system_breadcrumb_block, unverändert aus dem Bestand übernommen). - Block 2 — Hero-Section (
sdc.byte_theme.section,columns: 33-66,mobile_columns: 1,background: primary,padding_block_start/end: 64).- Spalte 1 (33%, Main-Slot, Position 0): 1×
card-meta-list(neue SDC aus ADR-0013) mit 5×meta-rowals verschachtelte Slot-Children. - Spalte 2 (66%, Main-Slot, Position 1): 1×
heading(Field-Ref aufentity:node:vacancy.title.value,level: 1,text_size: heading-responsive-4xl,text_color: inverted-Variante wegen Dark-Blue-Background) + 1×ctamit Apply-Button (Field-Ref auffield_apply_url.uri, Label „Jetzt bewerben", Iconarrow-right).
- Spalte 1 (33%, Main-Slot, Position 0): 1×
- Block 3 — Body-Section (
sdc.byte_theme.section,columns: 100,background: primary,padding_block_start: 0,padding_block_end: 64).- Main-Slot: 1×
textmit Field-Ref auffield_body.processed,text_size: normal,text_color: inverted.
- Main-Slot: 1×
- Block 4 — Apply-CTA-Section (
sdc.byte_theme.cta, unverändert aus dem Bestand übernommen).
5er-Field-Mapping für Meta-Rows (Reihenfolge im Slot-Tree von oben nach unten):
| Position | Icon (Phosphor) | Label | Field-Ref auf entity:node:vacancy |
|---|---|---|---|
| 1 | briefcase | „Stellentyp" | field_employment_type.entity.name |
| 2 | map-pin | „Einsatzort" | field_office.entity.name |
| 3 | clock | „Arbeitszeit" | field_schedule.entity.name |
| 4 | graduation-cap | „Erfahrungslevel" | field_seniority.entity.name |
| 5 | identification-card | „Stellen-Nr." | field_personio_id.value |
- Icon-Strategie: Phosphor-Icon-Pack via existing
icon-SDC. Alle 5 gewählten Icons existieren im Phosphor-Pack. Custom-SVG-Export aus Figma ist Fallback bei späterer Visual-Drift, nicht für MVP. - Hero-Background-Farbe: Aktuell
background: primaryals Platzhalter. Im SOLCOM-Brand-System (ADR-0003) istprimarydie Lime-Brand-Farbe — das passt nicht zum Dark-Blue-Background des Figma. Build-Time-Klärung: welchesection-allowed-values fürbackground_colorsind verfügbar, gibt es einedark/inverted/navy-Variante? - Reihenfolge in Spalte 2 (Title oben, Apply-Button darunter) matcht das Figma. Für Mobile (
mobile_columns: 1) entscheidet die natürliche DOM-Reihenfolge — Spalte 1 (Meta-Card) oben, Spalte 2 (Title + Apply) unten. Visual-Verify-Entscheidung in Phase 7 des Build-Workflows.
Rejected alternatives
Consequences
- Aktuelles
canvas.content_template.node.vacancy.full.ymlwird umstrukturiert, nicht ergänzt. Bestehende UUIDs undcomponent_version-Hashes werden teils übernommen (Breadcrumb-Block, Apply-CTA-Section), teils neu generiert (Hero-Section, Body-Section). Migration istentity::save()-getrieben — bestehende Vacancy-Nodes re-rendern automatisch nachdrush cim. Kein Daten-Migrate nötig. - Neue Dependencies im Template-Frontmatter.
dependencies.configmuss erweitert werden um die neuen Canvas-Komponenten und die neu referenzierten Felder / Taxonomie-Vocabularies. Nachdrush cimdarfdrush config:statuskeine Drift zeigen. - Empty-Field-Verhalten ist aktuell nicht definiert. Wenn eine Vacancy kein
field_seniorityhat, rendert diemeta-rowmit leeremvalue-String — visuell ein abgehängter Label ohne Wert. MVP akzeptiert das; Folge-Iteration könntemeta-row.twigmit Twig-if-Wrapping versehen. - Mobile-Stacking auf
mobile_columns: 1lässt die Meta-Card oben und den Title unten landen (Spalte 1 zuerst). Wahrscheinlich UX-suboptimal — Mobile-User wollen zuerst den Job-Titel sehen. Visual-Verify entscheidet, ob die Spalten-Reihenfolge umgedreht wird. - Hero-Background-Token muss vor dem Build geklärt werden.
background: primaryist als Platzhalter eingeplant. Im SOLCOM-Brand-System istprimarydie Lime-Brand-Farbe — das passt nicht zum Dark-Blue-Background des Figma. Build-Time-Klärung erforderlich. - Heading-Color muss
text_color: invertedsein, damit der weiße Job-Titel auf Dark-Blue-Background lesbar ist. Fallsheading-SDC keininverted-Color-Token kennt, ist eine Theme-Side-Erweiterung nötig. - Recruiter-interne Notizen im
field_bodybleiben sichtbar. Live-Body enthält Strings wie „Bewerbungslink: …", „Schaltung: StepStone Pro Ultimate", „Freigabe an: Sandra Brandt". Daten-Bug aus der Personio-Migration. Template-Overhaul löst das nicht — separater Issue im Vacancy-Modul-Kontext. Bewusste Restbedingung. - Back-Button, Cross-Sell, Sticky-Bar, Background-Lights, Lime-Bar Bullets, Category-Badge, Salary-Aggregat: alle Out-of-Scope und je als Folge-Issue zu führen.
- Cherry-Pick-Reibung gegen Upstream-Personio-Migrate. Wenn die Personio-Migration später neue Felder hinzufügt (
field_duration,field_start_date), kann das 5er-Mapping per ADR-Update gewechselt werden. - Pflicht-Verfahren nach Template-Änderung:
drush config:status→drush config:import --yes→drush cache:rebuild→ Visual-Verify via agent-browser. Diff-time Reviewer-Pflicht:solcom-brand-reviewerunddrupal-config-architecture-reviewer. - Wiederverwendbarkeit der Topologie für andere Bundle-Detail-Pages. Die 3-Section-Topologie ist generisch genug, um für eine spätere Freelancer-Projekt-Detail-Page wiederverwendet zu werden — das war auch der Auswahlgrund für die zwei-SDC-Card-Topologie aus ADR-0013.