Teraz z AI - twórz strony przez serwer MCP

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:

  1. Catch-all route dostaje ścieżkę i zamienia ją na slug.
  2. SDK prosi API dostawcze o opublikowaną stronę pod tym slugiem wraz z blokami layoutu. Bez tokenu - opublikowana treść jest publiczna.
  3. Każda zwrócona instancja bloku niesie type. SDK szuka tego typu w rejestrze, który przekazałeś jako drugi argument.
  4. Twój komponent renderuje się z treścią tej instancji dla aktywnego locale. Pola relacyjne przychodzą już rozwiązane do pełnych rekordów.
  5. 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

Jak działa cmssy — architektura headless