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.
Het Content-paneel
Section titled “Het Content-paneel”Content kan worden beheerd via de SDK of door het aan de AI te vragen. De Content API heeft zes resourcetypen:
| Tab / Resource | Waarvoor het dient |
|---|---|
| Collections | Definieer en beheer contentschema’s (bijv. “Blog Post”, “FAQ”, “Product Spec”) |
| Fields | Getypte velden binnen een collectie (beheerd als subresource van Collections) |
| Entries | Bekijk, maak aan, bewerk, publiceer en verwijder entries binnen een collectie |
| Locales | Voeg taal-/regio-locales toe en beheer ze voor vertaalde content |
| Releases | Groepeer entries om tegelijk live te gaan (of te worden gedepubliceerd); publiceer handmatig via releases.publish() |
| Assets | Upload 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).
Concepten
Section titled “Concepten”| Concept | Wat het is |
|---|---|
| Collection | Een schema — de structuur van één type content (bijv. “Blog Post”, “FAQ”, “Product Spec”) |
| Field | Een getypte slot in een collectie (bijv. title: string, body: rich_text, coverImage: asset) |
| Entry | Één instantie van een collectie (één blogbericht, één FAQ-item) |
| Asset | Een geüpload mediabestand waarnaar vanuit entries kan worden verwezen |
| Locale | Een taal/regio waarnaar de content is vertaald |
| Release | Een groep entries die tegelijk live gaan (of worden gedepubliceerd) |
Quickstart
Section titled “Quickstart”import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collectionconst blog = await proyecta.content.collections.create({ api_id: 'blogPost', name: 'Blog Post', // fields are added via collections.fields.create()});
// 2. Create an entryconst post = await proyecta.content.entries.create({ collection_id: blog.id, data: { title: 'Hello, world', body: 'My very first post.', },});
// 3. Publish itawait proyecta.content.entries.publish({ entryId: post.id });Collecties
Section titled “Collecties”// Browse collectionsfor await (const collection of proyecta.content.collections.list()) { console.log(collection.name);}
// Add or remove fields on a collectionawait proyecta.content.collections.fields.create(blog.id, { /* field definition */});await proyecta.content.collections.fields.delete(blog.id, fieldId);Entries
Section titled “Entries”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 entryawait proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entryawait proyecta.content.entries.publish({ entryId: post.id });
// Delete an entryawait proyecta.content.entries.delete(post.id);Assets
Section titled “Assets”Asset-uploads zijn een volwaardige functie — gebruik ze om afbeeldingen, video’s of PDF’s aan je entries te koppelen:
// Browse assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.deleteVoor via chat gestuurde bestandsuploads (slepen naar de builder), zie Bestanden & Media.
Lokalisatie
Section titled “Lokalisatie”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.
Releases
Section titled “Releases”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 statusscheduled, maar moeten handmatig worden gepubliceerd viareleases.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 readyawait proyecta.content.releases.publish({ releaseId: release.id });
// Browse releasesfor 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”| Gebruikssituatie | Gebruik dit |
|---|---|
| Redactionele content (berichten, FAQ’s, marketingteksten) — heeft publiceer-/draftstatus, planning en lokalisatie nodig | Content API |
| App-data (gebruikers, bestellingen, regelitems) — heeft querysnelheid, transacties en realtime nodig | Database |
| Statische assets in code | Map public/ in je project |
| Door gebruikers geüploade bestanden | Bestanden & Media |
Binnenkort beschikbaar
Section titled “Binnenkort beschikbaar”- 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