v0: Signage + Companion — Config-Vertrag
Was
Ein gemergtes Lesemodell für Signage (Kiosk/Stele) und Companion: alle Dashboard-Optionen aus einer API, ohne DB-Migration und ohne Datenverlust. Layout/UI baut v0; Cockpit bleibt Source of Truth.
Warum
Bisher lagen Optionen in mehreren Körben (defaultSignageTemplate, kiosk*-Spalten, signageTemplateOptions, companionConfig). v0 braucht einen klaren Einstieg und einen Prompt, der alle Dashboard-Reiter abbildet.
Wer ist betroffen
- Entwickler/v0: Lesen über
signage-surface; Custom Instructions ausv0CustomInstructions - Redaktion: Unverändert — gleiche Reiter im Dashboard (Digital Signage, Companion)
- Agenten/MCP: Schreiben weiter über bestehende Tools; Lesen optional über
signage-surface
Wo
| Was | Pfad |
|---|---|
| Unified API | GET /api/centers/{centerId}/signage-surface |
| Merge-Logik | apps/dashboard/src/lib/integration/unified-signage-surface.ts |
| v0-Prompt-Generator | apps/dashboard/src/lib/integration/v0-signage-config-prompt.ts |
| Dashboard-Reiter | Center → Digital Signage (siehe signage-config-tabs.ts) |
| apiHints | public-visitor-surface → data.apiHints.signageSurfaceGet |
Speicher-Körbe (unverändert — expand-contract)
| Korb | DB-Feld | Gilt für |
|---|---|---|
| v0-Template | defaultSignageTemplate | Welches v0-Layout (kiosk, ai-premium, wayfinding, display, … — alle Registry-Einträge) |
| Classic Kiosk | kiosk* Spalten (~20 Felder) | Nur defaultSignageTemplate=kiosk |
| Template-Optionen | signageTemplateOptions[templateId] | AI Premium / AI Wayfinding |
| Global | signageTemplateOptions._global | Wartungsmodus (alle Templates) |
| Companion global | companionConfig | Features, Layout, Branding (alle Companion-Varianten) |
Wichtig: kioskTemplate (Skin: standard/wayfinder/…) ≠ defaultSignageTemplate (Route).
Merge-Regeln (Lesemodell)
- Wartung:
_globalschlägt Legacy-Felder inai-premium/ai-wayfinding.kiosk - Kiosk-Optionen: Classic →
classicKiosk; AI-Familie →templateOptions.kioskmit Dashboard-Defaults; leere Felder werden auskiosk*-Spalten ergänzt (Migration) - AI Premium Reiter: Stele-Optionen aufgeteilt in Darstellung, Farben, Medien, Module, Wayfinding, DOOH, Einbettungen, Bezeichnungen (
signage-config-tabs.ts) - Companion:
companionConfigfür Features/Layout;templateOptions.companionfür Template-Toggles; Akzentfarbe: Template >companionConfig.branding - Companion-KI-Chat:
companion.companionChatEnabledbzw.data.bots.companion.companionChatEnabled(= Companion aktiv und FeatureaiAssistant) — unabhängig vom Website-Chatbot - Bot-UI/Logik: Master v0-Chat
/mallpilot-chat-core-kJyZM1UHiHR+ mallpilot-chat-core (min. 0.8.1,MallPilotSiteShell) — Reference-Copy; Soll-Runtime wie Website: Host/api/chatim Signage-v0-Projekt +apiHints.chatInteractionsPost(source: companion|kiosk). Legacy bis Migration:visitor-chatbotclient=companion|kiosk
So testen
- Center mit
ai-premiumwählen, Kiosk-Optionen setzen (z. B. Traffic an) GET /api/centers/{centerId}/signage-surface—surface.templateOptions.kiosk.enableTraffic === truedefaultSignageTemplateaufkioskstellen, Bento/Farben speichern- Erneut
signage-surface—surface.classicKioskgefüllt,templateOptions.kiosk === null - Response-Feld
v0CustomInstructionsin v0 Project Settings einfügen
v0 Custom Instructions
Dashboard: Center → Frontend-Kanäle → Reiter Signage oder Companion → Block „v0 Signage + Companion“ → Kopieren. Bei v0/Vercel-Hosting zusätzlich unter Reiter Technik.
Nach Deploy alternativ: GET …/signage-surface → Feld v0CustomInstructions.
MCP/Agenten: cockpit_signage_surface(centerId).
Verwandte Doku
- AI Premium v0-Parität
- Cockpit steuert Frontends
- Intern:
apps/dashboard/docs/SIGNAGE-COMPANION-TEMPLATE-FLOW.md
Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /en/digital-signage/v0-signage-companion-config-contract