Gestion de contenu
Un CMS headless avec des collections, des entrées, des locales et des releases. Gérez le contenu depuis le panneau Content ou via le SDK.
Proyecta dispose d’un CMS headless complet. Il est orienté schéma : tu définis des collections (types de contenu structurés), puis tu crées des entrées conformes aux champs de chaque collection. Les entrées peuvent être localisées et regroupées en releases.
Le panneau Content
Section intitulée « Le panneau Content »Le contenu peut être géré via le SDK ou en demandant à l’IA. L’API Content comporte six types de ressources :
| Onglet / Ressource | À quoi ça sert |
|---|---|
| Collections | Définir et gérer les schémas de contenu (ex. : « Blog Post », « FAQ », « Product Spec ») |
| Fields | Champs typés au sein d’une collection (gérés comme sous-ressource des Collections) |
| Entries | Parcourir, créer, modifier, publier et supprimer des entrées dans une collection |
| Locales | Ajouter et gérer des locales de langue/région pour le contenu traduit |
| Releases | Regrouper des entrées à mettre en ligne (ou dépublier) ensemble ; publier manuellement via releases.publish() |
| Assets | Mettre en ligne et gérer des fichiers médias (images, vidéos, PDF) référençables depuis les entrées |
Clique sur une collection dans l’onglet Collections pour accéder directement à ses entrées. L’onglet Entries te permet de créer, modifier, publier et supprimer des éléments de contenu individuels.
Tu peux également tout gérer de manière programmatique via le SDK (proyecta.content).
Concepts
Section intitulée « Concepts »| Concept | Ce que c’est |
|---|---|
| Collection | Un schéma — la structure d’un type de contenu (ex. : « Blog Post », « FAQ », « Product Spec ») |
| Field | Un champ typé dans une collection (ex. : title: string, body: rich_text, coverImage: asset) |
| Entry | Une instance unique d’une collection (un article de blog, un élément FAQ) |
| Asset | Un fichier média mis en ligne et référençable depuis les entrées |
| Locale | Une langue/région dans laquelle le contenu est traduit |
| Release | Un groupe d’entrées planifiées pour être mises en ligne (ou dépubliées) simultanément |
Démarrage rapide
Section intitulée « Démarrage rapide »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 });Collections
Section intitulée « Collections »// 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);Les entrées sont les lignes de contenu réelles. Chaque entrée appartient à une collection et contient des données correspondant aux champs de cette collection.
// 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);Les mises en ligne d’assets sont des fonctionnalités de premier plan — utilise-les pour associer des images, des vidéos ou des PDF à tes entrées :
// Browse assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.deletePour les mises en ligne de fichiers via le chat (glisser-déposer dans le builder), consulte Fichiers et médias.
Localisation
Section intitulée « Localisation »Le contenu peut être traduit dans plusieurs locales. Chaque locale est un enregistrement géré via proyecta.content.locales :
await proyecta.content.locales.create({ /* code, name, etc. */});
for await (const locale of proyecta.content.locales.list()) { console.log(locale);}Lorsque tu récupères des entrées, tu peux demander la traduction d’une locale spécifique. Consulte Internationalisation pour une vue d’ensemble de l’i18n.
Releases
Section intitulée « Releases »Une release est un ensemble d’entrées qui sont mises en ligne (ou dépubliées) simultanément. Cela te permet de préparer une publication de contenu coordonnée — un lancement marketing, une nouvelle page produit, une mise à jour de FAQ — et de tout basculer de manière atomique.
Remarque : La publication automatique programmée n’est pas encore implémentée. Les releases avec une date
scheduled_atpassent au statutscheduledmais doivent être publiées manuellement viareleases.publish(). La publication automatique à l’heure indiquée sera disponible prochainement.
// 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);}Pour modifier le calendrier d’une release, supprime-la et recrée-la — il n’existe pas d’endpoint de mise à jour.
Cas d’usage courants (laisse l’IA tout connecter)
Section intitulée « Cas d’usage courants (laisse l’IA tout connecter) »"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."
Quand utiliser Content plutôt que Database
Section intitulée « Quand utiliser Content plutôt que Database »| Cas d’usage | Utilise ceci |
|---|---|
| Contenu éditorial (articles, FAQ, textes marketing) — nécessite des états publié/brouillon, la planification, la localisation | Content API |
| Données applicatives (utilisateurs, commandes, lignes de commande) — nécessite rapidité de requête, transactions, temps réel | Database |
| Assets statiques dans le code | Répertoire public/ de ton projet |
| Fichiers mis en ligne par les utilisateurs | Files & Media |
Prochainement
Section intitulée « Prochainement »- Éditeur d’entrées en texte enrichi — édition WYSIWYG complète pour les champs
rich_textdans le panneau Content - Prévisualisation en direct des modifications de contenu dans ton application
- Rôles de contenu — permissions distinctes pour les éditeurs et les développeurs