Wie cmssy funktioniert
Was in cmssy liegt, was in deinem Repo, und was zwischen Request und gerenderter Seite passiert.
cmssy speichert deine Inhalte und rendert sie nie. Deine App rendert deine Inhalte und speichert sie nie. Alles Weitere folgt aus dieser einen Trennung.
Was wo liegt
- In deinem Repo - Block-Schemas und Komponenten. Ein Block ist eine React-Komponente plus Feld-Schema, deklariert mit
defineBlock. Das ist Code: reviewt, versioniert, deployed. - In cmssy - Seiten, Block-Instanzen und ihre Werte, Medien, Modelle und Records, Formulare. Das sind Daten: visuell oder von einem KI-Client bearbeitet, veröffentlicht ohne Deploy.
Die Grenze dazwischen verschiebt sich nicht. Ein Feld hinzufügen heißt Code ausliefern. Eine Überschrift ändern nicht.
Was eine Seite ist
Eine Seite ist ein Knoten in einem Baum. Sie hat einen aus ihren Eltern abgeleiteten Slug, eine geordnete Liste von Block-Instanzen als Body und ein Layout - Header- und Footer-Blöcke, die sie entweder selbst besitzt oder vom Elternknoten erbt.
Jede Block-Instanz speichert ihre Werte nach Sprache verschlüsselt, content.de.title und content.en.title sind also dasselbe Feld derselben Instanz in zwei Locales. Es gibt keine separate übersetzte Seite.
Vom Request zur gerenderten Seite
Ein cmssy-Frontend braucht eine Route. Das ist alles:
// app/[[...path]]/page.tsx
import { createCmssyPage } from "@cmssy/next/server";
import { cmssy } from "@/cmssy/config";
import { blocks } from "@/cmssy/blocks";
export const revalidate = 3600;
export default createCmssyPage(cmssy, blocks);Was passiert, wenn ein Request eintrifft:
- Die Catch-all-Route bekommt den Pfad und macht daraus einen Slug.
- Das SDK fragt die Delivery-API nach der veröffentlichten Seite zu diesem Slug samt Layout-Blöcken. Ohne Token - veröffentlichte Inhalte sind öffentlich.
- Jede zurückgegebene Block-Instanz trägt einen
type. Das SDK schlägt diesen Typ in der Registry nach, die du als zweites Argument übergeben hast. - Deine Komponente rendert mit dem Inhalt dieser Instanz für das aktive Locale. Relationsfelder kommen bereits zu vollständigen Records aufgelöst an.
- Ein Blocktyp, der in deiner Registry fehlt, rendert auf deiner Site nichts - und im Editor eine Diagnosekarte, die den Typ benennt. Ein Block, der im Loader oder beim Rendern wirft, wird genauso eingefangen. Inhalte können deine App nicht zum Absturz bringen.
Die Registry ist ein einfaches Array, das du pflegst:
// cmssy/blocks.ts
import { heroBlock } from "@/blocks/hero/block";
import { pricingBlock } from "@/blocks/pricing/block";
export const blocks = [heroBlock, pricingBlock];Die Pakete
Das Framework ist ein Adapter, nie das Fundament:
@cmssy/core- Transport, Queries, Config, Editor-Protokoll. Kein Framework. Läuft in Node, am Edge, im Browser, in einem Cronjob.@cmssy/react- Rendering: Block-Registry, Komponenten, Edit-Bridge, Hooks.@cmssy/next- ausschließlich Next.js-Bindings: Middleware, Route Handler,Metadata, Sitemap und Robots, Page-Factories.
Adapter für andere Frameworks stehen neben next, nicht darauf - eine Astro- oder Remix-App installiert also nie React, nur um eine Seite zu laden.
@cmssy/next trennt nach Runtime, und die Entries mischen sich nicht: @cmssy/next/middleware läuft am Edge, /server in RSC und Route Handlern, /client im Browser.
Bearbeiten
Zwei Zugänge, ein Satz Inhalte.
Der visuelle Editor lädt deine echte Website in einem Frame und spricht über postMessage mit ihr. Du bearbeitest die tatsächlichen Komponenten, keine Vorschau-Näherung - deshalb liegt die Edit-Bridge in core und nicht im React-Paket.
Der MCP-Server gibt einem KI-Client denselben Schreibzugriff: Seiten anlegen, Blockinhalte bearbeiten, Medien hochladen, veröffentlichen. Er bearbeitet Inhalte, nie deinen Code.
Entwürfe und Veröffentlichen
Änderungen landen in einem Entwurf. Die öffentliche Delivery-API liefert nur veröffentlichte Inhalte - eine unfertige Seite ist für deine Website also konstruktionsbedingt unsichtbar, nicht wegen eines Filters, an den du denken musst.
Um Entwürfe während der Entwicklung zu sehen, hänge ?cmssyDev=1 an eine beliebige URL. Das braucht CMSSY_API_TOKEN und rendert dein eigenes Entwurfs-Overlay; ohne Flag bekommst du veröffentlichte Inhalte.
Veröffentlichen ist kein Deploy. Deine App cached Seiten nach ihrem eigenen revalidate-Wert, und cmssy kann beim Veröffentlichen einen Revalidierungs-Webhook aufrufen, um sie früher zu invalidieren.
Nächste Schritte
- Installation - das SDK in eine bestehende Next.js-App einbauen.
- Schnellstart - erster Block und erste Seite, durchgängig.
- Block-Entwicklung -
defineBlockund das Feld-Schema im Detail. - API & KI - die Delivery-API und der MCP-Server.