MEC Small Assets — Webseiten-Reiter
Config-only Template (mec-template-small-assets): kein Center-Website-Layout im Monorepo. Inhalte liefern Dashboard und APIs; das v0-Frontend (smg-mec-small-assets-websites) liest öffentliche Daten pro Center.
Vorschau & URLs
| URL-Typ | Funktioniert? | Hinweis |
|---|---|---|
v0 Preview / Staging (websitePublicUrlStaging, z. B. *.sawatzkimuehlenbruch-preview.de) | Ja | Haupt-Vorschau — Layout lebt im v0-Repo |
Cockpit-Vorschau (preview.cockpit-os.de/{slug}) | Nein | Kein Layout im Cockpit-Monorepo — Dashboard blendet die Zeile aus |
| Live / eigene Domain | Ja | Nach DNS-Go-Live bzw. websitePublicUrlProduction |
Pflege der Staging-URL: Website-Management → Frontend-Kanäle (v0) → Reiter Website → Feld Preview / Staging.
Was
17 Dashboard-Reiter unter Center → Webseite, sichtbar wenn websiteTemplate = mec-template-small-assets. Speicherorte:
- Website-Config:
templateContent.mec-template-small-assets.*(öffentlich viapublic-visitor-surface→templatePublicContent.content) - Seiten: Page-Content-API pro
pageType(Hero, SEO,customContent)
Entwicklungs-Default-Center: einkaufszentrum-abensberg (centerId 60d6cffb-3276-4e71-a789-bfaf68bb5815).
Warum
Multi-Center-Layout für kleine MEC-Assets — dedizierte Reiter pro Sektion/Unterseite (wie Forum Gummersbach), angepasst an Small-Assets-Startseite (Willkommenstext, Bild-Text-Blöcke, Centerplan, Modul-Teaser).
Wer ist betroffen
Redaktion, MEC-Betrieb, v0/Agenten (MCP, AgencyOS).
Wo
Dashboard: Center → Webseite (17 Reiter ab „Startseite: Willkommenstext & Hero“).
API (v0):
GET /api/centers/{centerId}/public-visitor-surface→data.templatePublicContent.content.*GET /api/centers/{centerId}/page-content→pageContents[]
Reiter & JSON-Pfade
Startseite
| Reiter | Speicher |
|---|---|
| Startseite: Willkommenstext & Hero | hero.* — Texte, CTAs, backgroundImageUrl, centerplanImageUrl, slides[] |
| Startseite: Bild-Text-Blöcke | homepageSections[] — geordnetes Array (headline, text, imageUrl, imageAlt, ctaLabel, ctaHref, variant) |
| Startseite: CTA-Box | ctaBox.* — Titel, Text (HTML), Button (Link und/oder E-Mail), optionales Bild |
CTA-Box-Felder (ctaBox):
| Feld | Typ | Hinweis |
|---|---|---|
title | string | Überschrift |
text | string (HTML) | Rich Text aus dem Dashboard |
buttonLabel | string | Button-Beschriftung |
buttonHref | string? | Interner Pfad (/kontakt) oder URL (https://…) |
buttonEmail | string? | E-Mail-Adresse — v0 rendert mailto: |
imageUrl | string? | Optionales Bild rechts/links |
imageAlt | string? | Alt-Text; Fallback: title |
Leere CTA-Box: Sektion ausblenden (zusätzlich pageVisibility.homepage_cta_box === false).
Hero-Slider: ≥1 Slide mit imageUrl → v0 rendert Slider; sonst Einzelbild (backgroundImageUrl).
Centerplan-Lightbox: CTA ctaHref: "#centerplan" in einem Bild-Text-Block — v0-Konvention, kein Extra-Feld.
Leeres homepageSections[]: Bild-Text-Sektion ausgeblendet (zusätzlich steuerbar via pageVisibility.homepage_sections).
Global
| Reiter | Pfad |
|---|---|
| Footer | footer.tagline |
| Social Media | social.* |
| SEO (global) | seo.homeMetaTitle, seo.homeMetaDescription, seo.homeOgImageUrl |
| Seiten ein/aus | pageVisibility.* |
Unterseiten (shops, aktuelles, …): Standard an — nur false speichern.
Startseiten-Sektionen (homepage_*): Standard an — nur false speichern.
| Key | Sektion |
|---|---|
homepage_sections | Bild-Text-Blöcke |
homepage_cta_box | CTA-Box |
homepage_news | Aktuelles-Vorschau |
homepage_offers | Angebote-Vorschau |
homepage_shops_ticker | Logo-Carousel |
homepage_services | Services-Vorschau |
Unterseiten (page-content)
| Reiter | pageType | Zusatz |
|---|---|---|
| Shops | shops | Hero + SEO |
| Aktuelles | aktuelles | Hero + SEO |
| Angebote | angebote | Hero + SEO |
| Services | service | customContent.faqs[] |
| Jobs | jobs | customContent.introText |
| Öffnungszeiten | oeffnungszeiten | customContent.specialNote, … |
| Kontakt & Anfahrt | kontakt | customContent.formSuccessMessage |
| Anfahrt (Kontakt-Seite) | anfahrt | Block auf /kontakt: customContent.anfahrtDescription (Auto/ÖPNV), customContent.parkingSpaces |
| Impressum | impressum | Rich Text in pageDescription |
| Datenschutz | datenschutz | Rich Text in pageDescription |
Adresse, Telefon, E-Mail im Footer kommen aus Center-Stammdaten.
Anfahrt auf der Kontakt-Seite
| Feld | Pfad | Bedeutung |
|---|---|---|
| Anfahrtstext | page-content anfahrt → customContent.anfahrtDescription | Allgemeine Hinweise (Autobahn, Bus, Bahn) |
| Parkplätze | customContent.parkingSpaces | Anzahl Stellplätze (Zahl) |
Nicht mit dem globalen Reiter Anfahrt & Parken (parkingConfig) vermischen: MSA-v0 liest den Kontakt-Block aus page-content anfahrt. Parken-Kurztexte aus parkingConfig bleiben optional für andere Templates bzw. Fallback.
MCP
- Schema:
cockpit_website_config_schema?websiteTemplate=mec-template-small-assets— lieferttemplateContentSchema+ 17 Tab-Hints (msa-*) - Schreiben:
cockpit_update_center_website_configmittemplateContent.mec-template-small-assets.*(deep-merge) - Unterseiten:
cockpit_page_content
Tab-Felddefinitionen: apps/dashboard/src/lib/integration/mec-small-assets-mcp-tab-fields.ts
So testen
- Center auf
mec-template-small-assetsstellen (z. B. Abensberg). - Reiter Startseite: Bild-Text-Blöcke — 1–2 Blöcke anlegen, speichern.
- Reiter Seiten ein/aus — z. B.
homepage_servicesaus, speichern. - Reiter Anfahrt (Kontakt-Seite) — Anfahrtstext + optional Parkplätze speichern;
GET …/page-content?pageType=anfahrt→customContent.anfahrtDescription/parkingSpaces. GET …/public-visitor-surface—content.homepageSections,content.pageVisibility.homepage_servicesprüfen.- v0: Startseite rendert Blöcke; deaktivierte Sektionen fehlen; Kontakt zeigt Anfahrtstext.
Siehe auch: Forum Gummersbach Webseiten-Tab, Public Center Website API.
Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /en/center-website/mec-small-assets-webseiten-tab