Ga naar inhoud

Contentbeheer

Een headless CMS met collecties, entries, locales en releases. Beheer content via het Content-paneel of de SDK.

Proyecta heeft een volledig headless CMS. Het werkt schema-first: je definieert collecties (gestructureerde contenttypen) en maakt vervolgens entries aan die voldoen aan de velden van elke collectie. Entries kunnen worden gelokaliseerd en gegroepeerd in releases.

Content kan worden beheerd via de SDK of door het aan de AI te vragen. De Content API heeft zes resourcetypen:

Tab / ResourceWaarvoor het dient
CollectionsDefinieer en beheer contentschema’s (bijv. “Blog Post”, “FAQ”, “Product Spec”)
FieldsGetypte velden binnen een collectie (beheerd als subresource van Collections)
EntriesBekijk, maak aan, bewerk, publiceer en verwijder entries binnen een collectie
LocalesVoeg taal-/regio-locales toe en beheer ze voor vertaalde content
ReleasesGroepeer entries om tegelijk live te gaan (of te worden gedepubliceerd); publiceer handmatig via releases.publish()
AssetsUpload en beheer mediabestanden (afbeeldingen, video’s, PDF’s) waarnaar vanuit entries kan worden verwezen

Klik op een collectie in het tabblad Collections om direct naar de bijbehorende entries te gaan. Via het tabblad Entries kun je afzonderlijke contentitems aanmaken, bewerken, publiceren en verwijderen.

Je kunt ook alles programmatisch beheren via de SDK (proyecta.content).

ConceptWat het is
CollectionEen schema — de structuur van één type content (bijv. “Blog Post”, “FAQ”, “Product Spec”)
FieldEen getypte slot in een collectie (bijv. title: string, body: rich_text, coverImage: asset)
EntryÉén instantie van een collectie (één blogbericht, één FAQ-item)
AssetEen geüpload mediabestand waarnaar vanuit entries kan worden verwezen
LocaleEen taal/regio waarnaar de content is vertaald
ReleaseEen groep entries die tegelijk live gaan (of worden gedepubliceerd)
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 zijn de eigenlijke contentregels. Elke entry behoort tot een collectie en bevat data die overeenkomt met de velden van die collectie.

// 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 zijn een volwaardige functie — gebruik ze om afbeeldingen, video’s of PDF’s aan je entries te koppelen:

// 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

Voor via chat gestuurde bestandsuploads (slepen naar de builder), zie Bestanden & Media.

Content kan worden vertaald in meerdere locales. Elke locale is een record dat wordt beheerd via proyecta.content.locales:

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

Wanneer je entries ophaalt, kun je de vertaling van een specifieke locale opvragen. Zie Internationalisering voor het bredere i18n-overzicht.

Een release is een bundel entries die tegelijk live gaan (of worden gedepubliceerd). Hiermee kun je een gecoördineerde contentpublicatie klaarzetten — een marketinglancering, een nieuwe productpagina, een FAQ-update — zodat alles atomisch van start gaat.

Opmerking: Automatisch getimed publiceren is nog niet geïmplementeerd. Releases met een scheduled_at-datum krijgen de status scheduled, maar moeten handmatig worden gepubliceerd via releases.publish(). Automatisch publiceren op het opgegeven tijdstip komt binnenkort.

// 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);
}

Om de planning van een release te wijzigen, verwijder je de release en maak je een nieuwe aan — er is geen update-endpoint.

Veelvoorkomende patronen (laat de AI het klaarzetten)

Section titled “Veelvoorkomende patronen (laat de AI het klaarzetten)”
  • "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."

Wanneer gebruik je Content versus Database

Section titled “Wanneer gebruik je Content versus Database”
GebruikssituatieGebruik dit
Redactionele content (berichten, FAQ’s, marketingteksten) — heeft publiceer-/draftstatus, planning en lokalisatie nodigContent API
App-data (gebruikers, bestellingen, regelitems) — heeft querysnelheid, transacties en realtime nodigDatabase
Statische assets in codeMap public/ in je project
Door gebruikers geüploade bestandenBestanden & Media
  • Rich-text entry editor — volledig WYSIWYG-bewerken voor rich_text-velden in het Content-paneel
  • Live preview van contentwijzigingen in je app
  • Contentrollen — scheid editorrechten van ontwikkelaarsrechten