For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /de/docs/web/content.md (or send Accept: text/markdown).
Content-Management
Typisierte CMS-Einträge mit freiem Lebenszyklus und öffentlicher Lesegrenze.
Schritt-für-Schritt für Einsteiger
Voraussetzungen: Lesen Sie die beiden folgenden Einsteigerhandbücher, schließen Sie die lokale Web-Einrichtung ab und öffnen Sie dieses Monorepo im Stammverzeichnis in Ihrem Editor. Webeinstellungen gehören in apps/web/.env.local; Next.js liest das Stammverzeichnis .env nicht. /dashboard im Standard-Fake-Modus ist eine Demo ohne Datenbank; /auth benötigt eine migrierte Datenbank.
Kurze Begriffe: Ein Arbeitsbereich umfasst die einzelnen Benutzer, Daten und Einstellungen eines Teams. Der Server ist das vertrauenswürdige Backend; Halten Sie Anbieterschlüssel aus Browser- und Telefoncodes fern. Eine Migration ist eine versionierte Datenbankänderung, die Tabellen erstellt oder aktualisiert. Ein KI-Modell ist der Motor, der antwortet; Der Modellkatalog ist die Liste der verfügbaren Modell-IDs und Preise des Servers. Ein Anbieter ist ein externer Dienst wie ein KI-, E-Mail- oder Abrechnungsdienst. Eine Berechtigung ist eine Bewilligung, die einem Arbeitsbereich die Nutzung einer Funktion ermöglicht. Ein Webhook ist eine Nachricht, die ein Dienst an den URL eines anderen Dienstes sendet.
1. Melden Sie sich als Workspace-Inhaber oder Administrator an, öffnen Sie /content und verwenden Sie das Formular, um einen Beitrag, eine Seite, ein Dokument oder einen Bericht mit einem eindeutigen Slug zu erstellen. Speichern Sie es als Entwurf und veröffentlichen Sie es dann.
2. Bestätigen Sie die Statusänderungen in „Veröffentlicht“. Ein doppelter Slug oder Member ohne Verwaltungszugriff sollte fehlschlagen.
3. Für einen Gated-Test verwenden Sie required_entitlement=ai.reference-task; Ohne eine verifizierte Bewilligung darf die Seite nur ihren Teaser anzeigen.
Beginnen Sie für benutzerdefinierten Code mit dem bereitgestellten prompts/README.md und kopieren Sie die nächstgelegene Eingabeaufforderung: prompts/new-app-screen.md für einen App-Bildschirm oder prompts/new-landing-page.md für eine öffentliche Seite. Geben Sie Ihrem Programmieragenten für Server-, Datenbank- oder Anbieterarbeiten die Aufgabe dieses Handbuchs und bitten Sie ihn, AGENTS.md, .ai/PROJECT_CONTEXT.md und passende .ai/-Spiegel zu lesen; Überprüfen Sie die hier genannten genauen Quelldateien. Listen Sie Dateien auf und prüfen Sie sie vor der Bearbeitung. Bewahren Sie den Arbeitsbereichseigentum und die Nur-Server-Geheimnisse. und zeige dir den Unterschied. Teilen Sie ihm das gewünschte Verhalten, Eingabe- und Ausgabefelder, zulässige Rollen, erwartete Erfolge und Fehler sowie das Testkonto, den Anbieter oder das Gerät mit. Beispielwerte verwenden; Fügen Sie niemals ein echtes Geheimnis ein.
Workspace-Einträge erstellen
Die Verwaltung /content unterstützt Einträge vom Typ post, page, doc und report. content_entry-Zeilen besitzen den Status draft, published oder archived, Workspace-spezifische Slugs und eine Autorenschaft. Verwaltungsaktionen erfordern die passende Owner- oder Admin-Rolle.
Dieses CMS ist vom typisierten öffentlichen Docs-/Blog-Katalog des Kits unter src/resources getrennt. Ein Produkt kann CMS-Einträge über seine eigene Seitenkomposition darstellen.
Inhalt serverseitig sperren
required_entitlement ist nullable: Nicht gesetzte Einträge sind unbeschränkt zugänglich. Bei gesperrten Einträgen stellt die serverseitige Datei content-queries.ts lesbare Inhalte oder einen gesperrten Teaser mit leerem Text bereit. content-access.ts steuert diese Projektion; vertrauen Sie niemals einem vom Client gelieferten Berechtigungsanspruch.
Eine Veröffentlichung löst content.published aus; geplante Zusammenfassungen können aktuelle Einträge des veröffentlichenden Teams aufnehmen. Verfasste Inhalte gehören außerdem zum Kontodatenexport.
Veröffentlichung und Zugriff überprüfen
Testen Sie die Sichtbarkeit von Entwürfen, Übergänge zwischen Veröffentlicht- und Archiviert-Status, doppelte Slugs, einen falschen Workspace, kostenlose Einträge und inaktive kostenpflichtige Berechtigungen. Verwenden Sie den Paywall-Block für die Darstellung; der Server bleibt für den Zugriff verantwortlich.
Einrichtung und Konfiguration
Die Workspace-Fläche /content verwaltet CMS-Einträge — post, page und doc sind die vorgeschlagenen Typen, aber die Spalte akzeptiert jeden URL-sicheren Produkttyp (Kleinbuchstaben, Ziffern, Bindestriche, Unterstriche, bis zu 64 Zeichen). Die Tabelle content_entry begrenzt jede Zeile per workspaceId, stempelt createdBy und hält Slugs pro Workspace und Typ eindeutig.
Einträge durchlaufen einen freien draft ↔ published ↔ archived-Lebenszyklus — evaluateContentStatusChange in src/content.ts lehnt ungültige oder unveränderte Übergänge ab, und publishedAt wird beim ersten Veröffentlichen gestempelt und übersteht späteres Zurücknehmen, sodass Leser das ursprüngliche Datum behalten.
/content workspace CMS surface
src/content.ts input + lifecycle rules
src/content-actions.ts member+ mutations
content_entry workspaceId, type, slug, statusImplementierungsablauf
Mitglieder und höher verfassen Einträge — jede Mutation löst Session, aktiven Workspace und mindestens die Member-Rolle über requireWorkspaceWriter (workspace-access.ts) auf, sodass Gäste nur lesen. normalizeContentEntryInput validiert Typ, einen Titel von 1–255 Zeichen und einen URL-sicheren Slug vor jedem Schreiben.
listPublishedContentEntries ist die bewusste öffentliche Lesegrenze: Sie nimmt eine explizite workspaceId, braucht keine Session und liefert nur veröffentlichte Zeilen — der Pfad, über den Storefront-Seiten, Blogs und Docs Workspace-Inhalte rendern. Das Veröffentlichen sendet einen content.published-Outbound-Webhook, und verfasste Einträge wandern in den GDPR-Datenexport.
Überprüfung und Fehlerbehebung
Teste einen draft → publish → archive-Roundtrip, eine Slug-Kollision innerhalb desselben Typs und einen Cross-Workspace-Read. Bestätige, dass die öffentliche Grenze niemals Entwürfe oder Zeilen eines anderen Workspace liefert und dass content.published pro Veröffentlichung genau einmal feuert.