Jak działa cmssy
Co żyje w cmssy, co żyje w Twoim repo i co dzieje się między żądaniem a wyrenderowaną stroną.
cmssy przechowuje Twoją treść i nigdy jej nie renderuje. Twoja aplikacja renderuje treść i nigdy jej nie przechowuje. Wszystko poniżej wynika z tego jednego podziału.
Co żyje gdzie
- W Twoim repo - schematy bloków i komponenty. Blok to komponent React plus schemat pól, zadeklarowany przez
defineBlock. To kod: przechodzi review, ma wersje, jest deployowany. - W cmssy - strony, instancje bloków i ich wartości, media, modele i rekordy, formularze. To dane: edytowane wizualnie albo przez klienta AI, publikowane bez deployu.
Granica między nimi się nie przesuwa. Dodanie pola oznacza wypuszczenie kodu. Zmiana nagłówka nie.
Czym jest strona
Strona to węzeł w drzewie. Ma slug wywiedziony z rodziców, uporządkowaną listę instancji bloków tworzących jej treść oraz layout - bloki headera i footera, które albo posiada, albo dziedziczy po rodzicu.
Każda instancja bloku przechowuje wartości z kluczem języka, więc content.pl.title i content.de.title to to samo pole tego samego bloku w dwóch locale. Nie ma osobnej przetłumaczonej strony.
Od żądania do wyrenderowanej strony
Frontend cmssy potrzebuje jednego route'u. To jest całość:
// 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);Co dzieje się, gdy przychodzi żądanie:
- Catch-all route dostaje ścieżkę i zamienia ją na slug.
- SDK prosi API dostawcze o opublikowaną stronę pod tym slugiem wraz z blokami layoutu. Bez tokenu - opublikowana treść jest publiczna.
- Każda zwrócona instancja bloku niesie
type. SDK szuka tego typu w rejestrze, który przekazałeś jako drugi argument. - Twój komponent renderuje się z treścią tej instancji dla aktywnego locale. Pola relacyjne przychodzą już rozwiązane do pełnych rekordów.
- Typ bloku, którego nie ma w rejestrze, nie renderuje niczego na Twojej stronie - a po otwarciu edytora pokazuje kartę diagnostyczną z nazwą typu. Blok, który rzuci wyjątkiem w loaderze albo przy renderze, jest izolowany tak samo. Treść nie może wywalić Twojej aplikacji.
Rejestr to zwykła tablica, którą utrzymujesz:
// cmssy/blocks.ts
import { heroBlock } from "@/blocks/hero/block";
import { pricingBlock } from "@/blocks/pricing/block";
export const blocks = [heroBlock, pricingBlock];Pakiety
Framework jest adapterem, nigdy fundamentem:
@cmssy/core- transport, zapytania, konfiguracja, protokół edytora. Zero frameworka. Działa w Node, na edge, w przeglądarce, w cronie.@cmssy/react- renderowanie: rejestr bloków, komponenty, most edycyjny, hooki.@cmssy/next- wyłącznie bindingi Next.js: middleware, route handlery,Metadata, sitemap i robots, fabryki stron.
Adaptery do innych frameworków stoją obok next, nie na nim, więc aplikacja w Astro czy Remiksie nigdy nie instaluje Reacta tylko po to, żeby pobrać stronę.
@cmssy/next dzieli się według runtime'u i wejścia się nie mieszają: @cmssy/next/middleware działa na edge, /server w RSC i route handlerach, /client w przeglądarce.
Edycja
Dwie drogi wejścia, jeden zestaw treści.
Edytor wizualny ładuje Twój prawdziwy serwis w ramce i rozmawia z nim przez postMessage. Edytujesz faktyczne komponenty, nie przybliżenie podglądu - dlatego most edycyjny mieszka w core, a nie w pakiecie Reactowym.
Serwer MCP daje klientowi AI ten sam dostęp do zapisu: tworzenie stron, edycja treści bloków, wgrywanie mediów, publikacja. Edytuje treść, nigdy Twój kod.
Wersje robocze i publikacja
Zmiany lądują w draftcie. Publiczne API dostawcze zwraca wyłącznie opublikowaną treść, więc niedokończona strona jest niewidoczna dla Twojego serwisu z konstrukcji - nie przez filtr, o którym trzeba pamiętać.
Żeby zobaczyć drafty podczas developmentu, dopisz ?cmssyDev=1 do dowolnego URL-a. Wymaga CMSSY_API_TOKEN i renderuje Twój własny overlay roboczy; bez flagi dostajesz treść opublikowaną.
Publikacja to nie deploy. Twoja aplikacja cache'uje strony według własnej wartości revalidate, a cmssy może przy publikacji wywołać webhook rewalidacji, żeby unieważnić je wcześniej.
Następne kroki
- Instalacja - dodaj SDK do istniejącej aplikacji Next.js.
- Szybki start - pierwszy blok i pierwsza strona od początku do końca.
- Tworzenie bloków -
defineBlocki schemat pól w szczegółach. - API i AI - API dostawcze i serwer MCP.