Zum Inhalt springen

Content Management

Ein Headless-CMS mit Collections, Entries, Locales und Releases. Inhalte über das Content-Panel oder das SDK verwalten.

Proyecta verfügt über ein vollständiges Headless-CMS. Es ist schema-first: Du definierst Collections (strukturierte Inhaltstypen) und erstellst anschließend Entries, die den Feldern der jeweiligen Collection entsprechen. Entries können lokalisiert und in Releases gruppiert werden.

Inhalte können über das SDK oder per Anweisung an die KI verwaltet werden. Die Content-API umfasst sechs Ressourcentypen:

Tab / RessourceWofür es gedacht ist
CollectionsContent-Schemata definieren und verwalten (z. B. „Blog Post”, „FAQ”, „Product Spec”)
FieldsTypisierte Felder innerhalb einer Collection (werden als Unterressource von Collections verwaltet)
EntriesEntries einer Collection durchsuchen, erstellen, bearbeiten, veröffentlichen und löschen
LocalesSprach- und Regions-Locales für übersetzte Inhalte hinzufügen und verwalten
ReleasesEntries gruppieren, um sie gemeinsam zu veröffentlichen (oder zu depublizieren); manuell über releases.publish() publizieren
AssetsMediendateien (Bilder, Videos, PDFs) hochladen und verwalten, die in Entries referenziert werden können

Klicke im Tab Collections auf eine Collection, um direkt zu deren Entries zu springen. Im Tab Entries kannst du einzelne Inhaltselemente erstellen, bearbeiten, veröffentlichen und löschen.

Alles lässt sich auch programmatisch über das SDK (proyecta.content) steuern.

KonzeptWas es ist
CollectionEin Schema – die Struktur eines Inhaltstyps (z. B. „Blog Post”, „FAQ”, „Product Spec”)
FieldEin typisiertes Feld in einer Collection (z. B. title: string, body: rich_text, coverImage: asset)
EntryEine einzelne Instanz einer Collection (ein Blog-Beitrag, ein FAQ-Eintrag)
AssetEine hochgeladene Mediendatei, die in Entries referenziert werden kann
LocaleEine Sprache/Region, in die der Inhalt übersetzt wird
ReleaseEine Gruppe von Entries, die gleichzeitig veröffentlicht (oder depubliziert) werden sollen
import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collection
const blog = await proyecta.content.collections.create({
api_id: 'blogPost',
name: 'Blog Post',
// fields are added via collections.fields.create()
});
// 2. Create an entry
const post = await proyecta.content.entries.create({
collection_id: blog.id,
data: {
title: 'Hello, world',
body: 'My very first post.',
},
});
// 3. Publish it
await proyecta.content.entries.publish({ entryId: post.id });
// Browse collections
for await (const collection of proyecta.content.collections.list()) {
console.log(collection.name);
}
// Add or remove fields on a collection
await proyecta.content.collections.fields.create(blog.id, {
/* field definition */
});
await proyecta.content.collections.fields.delete(blog.id, fieldId);

Entries sind die eigentlichen Inhaltszeilen. Jede Entry gehört zu einer Collection und enthält Daten, die den Feldern dieser Collection entsprechen.

// Browse entries (pass the collection's api_id, not its numeric id)
for await (const entry of proyecta.content.entries.list({ collection: 'blogPost' })) {
console.log(entry);
}
// Update an entry
await proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entry
await proyecta.content.entries.publish({ entryId: post.id });
// Delete an entry
await proyecta.content.entries.delete(post.id);

Asset-Uploads sind erstklassig unterstützt – nutze sie, um Bilder, Videos oder PDFs an deine Entries anzuhängen:

// Browse assets
for await (const asset of proyecta.content.assets.list()) {
console.log(asset);
}
// Upload, update, or delete via assets.create / assets.update / assets.delete

Für chat-gesteuerte Datei-Uploads (per Drag-and-drop in den Builder) siehe Dateien & Medien.

Inhalte können in mehrere Locales übersetzt werden. Jede Locale ist ein Datensatz, der über proyecta.content.locales verwaltet wird:

await proyecta.content.locales.create({
/* code, name, etc. */
});
for await (const locale of proyecta.content.locales.list()) {
console.log(locale);
}

Beim Abrufen von Entries kannst du die Übersetzung einer bestimmten Locale anfordern. Den umfassenden Überblick über Internationalisierung findest du unter Internationalisierung.

Ein Release ist ein Bündel von Entries, die gleichzeitig veröffentlicht (oder depubliziert) werden. So kannst du einen koordinierten Content-Drop vorbereiten – etwa einen Marketing-Launch, eine neue Produktseite oder eine FAQ-Aktualisierung – und alles atomar umschalten lassen.

Hinweis: Automatisches zeitgesteuertes Veröffentlichen ist noch nicht implementiert. Releases mit einem scheduled_at-Datum erhalten den Status scheduled, müssen aber manuell über releases.publish() publiziert werden. Das automatische Veröffentlichen zum angegebenen Zeitpunkt ist in Kürze verfügbar.

// Create a release (optionally with a target date)
const release = await proyecta.content.releases.create({
name: 'Monday launch',
scheduled_at: '2024-01-08T09:00:00Z',
});
// Manually publish a release when ready
await proyecta.content.releases.publish({ releaseId: release.id });
// Browse releases
for await (const r of proyecta.content.releases.list()) {
console.log(r);
}

Um den Zeitplan eines Releases zu ändern, lösche ihn und erstelle ihn neu – es gibt keinen Update-Endpoint.

Häufige Anwendungsfälle (die KI erledigt die Umsetzung)

Abschnitt betitelt „Häufige Anwendungsfälle (die KI erledigt die Umsetzung)“
  • "Build a blog using the Proyecta Content API. Collection 'Blog Post' with fields: title, slug, excerpt, body (rich text), coverImage (asset), author. Public route at /blog and /blog/[slug]."
  • "Create an FAQ collection in Proyecta Content. Build an admin page where I can add/edit FAQs and a public /faq page."
  • "Set up a multi-language landing page using Proyecta Content with English and Spanish locales."
  • "Create a release containing three blog posts and publish it manually when ready."
AnwendungsfallEmpfehlung
Redaktionelle Inhalte (Beiträge, FAQs, Marketing-Texte) – benötigt Veröffentlichungs-/Entwurfsstatus, Planung, LokalisierungContent-API
App-Daten (Nutzer, Bestellungen, Positionen) – benötigt Abfragegeschwindigkeit, Transaktionen, EchtzeitDatenbank
Statische Assets im CodeVerzeichnis public/ in deinem Projekt
Von Nutzern hochgeladene DateienDateien & Medien
  • Rich-Text-Entry-Editor – vollständige WYSIWYG-Bearbeitung für rich_text-Felder im Content-Panel
  • Live-Vorschau von Inhaltsänderungen in deiner App
  • Content-Rollen – separate Editor-Berechtigungen und Entwickler-Berechtigungen