Das CMS-Modul versorgt die consumer-app (Customer-Website) mit Inhalten. Es ist block-basiert, mehrsprachig, und bringt eine AI-Generierung für ganze Page-Strukturen mit.
Routing
https://cms-api.ayoune.app/webpages
https://cms-api.ayoune.app/snippets
https://cms-api.ayoune.app/ailibraries
Hauptentitäten
WebPages
Eine vollständige Seite — Slug, Locale, Block-Liste.
| Feld | Hinweis |
|---|---|
slug |
URL-Pfad ohne Locale |
locale |
de, en, ... |
title |
SEO-Titel |
description |
Meta-Description |
blocks[] |
Inhaltsblöcke (siehe unten) |
published |
bool |
publishedAt |
Date |
customDomain |
Optional: eigene Domain |
Rights: cms.webpages.{view|create|edit|delete|publish}.
Blocks
Polymorphes Schema — jeder Block hat einen type:
| Type | Inhalt |
|---|---|
hero |
Headline, Subline, Hero-Image |
text |
Markdown |
image |
URL + Alt-Text |
gallery |
Image-Array |
cta |
Button mit URL |
form |
Form-Builder-Referenz |
embed |
iFrame, YouTube, Vimeo |
accordion |
FAQ-artig |
pricing |
Preis-Tabelle |
testimonials |
Bewertungs-Karussell |
Cross-Cutting-Felder pro Block: _id, order, visible, responsiveSettings.
Snippets
Wiederverwendbare Block-Sets. Wenn du dieselben drei Blöcke auf 20 Pages brauchst, leg ein Snippet an und referenzier es.
AILibraries
Vorbereitete AI-Prompts für die Block-Generierung. Triggern via:
POST /webpages/:id/actions/generate-blocks \
-d '{"libraryId":"<id>","topic":"Online-Shop für Outdoor-Bekleidung"}'
Custom-Actions
POST /webpages/:id/actions/publish
POST /webpages/:id/actions/unpublish
POST /webpages/:id/actions/duplicate
POST /webpages/:id/actions/translate --body '{"targetLocale":"en"}'
POST /webpages/:id/actions/generate-blocks
Render & Publish-Pipeline
Ändert sich eine Page, läuft im Hintergrund die Render-Pipeline (Modul cms, Worker worker-content-modifications):
- Markdown → HTML (markdown-it + sanitize-html)
- Glossar-Linking (verlinkt definierte Begriffe automatisch)
- Mermaid → SVG
- TOC-Generation
- Cache in Redis
- Pub/Sub-Notification an
consumer-app
Render ist idempotent (Hash-Check), Re-Publish ohne Änderung kostet nichts.
Beispiel: Page anlegen
ay create webpages "Über uns" \
--set slug=about \
--set locale=de \
--set blocks='[
{"type":"hero","headline":"Wir sind aYOUne","heroImage":"https://cm.ayoune.app/demo/hero.jpg"},
{"type":"text","body":"Lorem ipsum **fett** und _kursiv_."},
{"type":"cta","label":"Jetzt anfragen","url":"/contact"}
]'