Aller au contenu

Gestion de contenu

Le CMS de Proyecta est la couche de données principale de ton application — pas seulement des articles de blog et du contenu marketing, mais les véritables enregistrements sur lesquels ton app repose. Les collections sont provisionnées et alimentées avec de vrais exemples de contenu avant que l’interface n’existe, de sorte que ton app est livrée connectée à des données modifiables dès le premier build.

La plupart des apps Proyecta stockent leurs données dans le CMS intégré. Lorsque tu décris ton application, Proyecta conçoit un modèle de données, crée les collections nécessaires et les remplit avec du contenu réaliste — tout cela avant qu’une seule page ne soit construite. Tes pages lisent ensuite ce contenu réel et modifiable par le propriétaire via des hooks typés que l’IA câble pour toi. Pour une vue d’ensemble de la façon dont tout cela s’articule, consulte Comment fonctionnent les données de ton application.

Tu n’as pas besoin de t’en préoccuper pour commencer — tout se passe automatiquement. Cette page explique ce qui se passe en coulisses pour que tu puisses le façonner à ta guise.

Le contenu est organisé en collections et singletons :

Type Ce que c’est Exemples
Collection Un type de contenu avec de nombreuses entrées — un schéma, plusieurs lignes. posts, services, testimonials, catalogItems
Singleton Un type de contenu avec exactement une entrée — contenu global, ponctuel. businessInfo, seoSettings

Une collection est une structure ; chaque entrée est un élément de cette structure (un article de blog, un service, une FAQ). Un singleton contient un seul enregistrement modifiable — l’identité de ton entreprise, ou le contenu hero/section d’une page.

Proyecta propose des designs de collections prêts à l’emploi — des champs pertinents, des indications pour l’administration et du contenu de démarrage — pour les types d’enregistrements que les vraies entreprises gèrent : articles de blog, services, catalogue de produits, menu de restauration, témoignages et avis, membres d’équipe, galerie photos, FAQ, événements, adresses, ressources téléchargeables, offres d’emploi, formations, circuits et hébergements, entre autres.

Tu ne choisis rien dans un menu. Lorsque tu décris ton application, Proyecta sélectionne celles que ton brief requiert — le type de ton entreprise, les fonctionnalités demandées, ta langue — et les crée, pré-remplies avec du contenu réaliste. Si ton application a besoin de quelque chose qu’aucune d’elles ne couvre, Proyecta conçoit une collection personnalisée avec ses propres champs.

De ce fait, ton panneau d’administration affiche les collections de ton application — pas une liste figée. Il se construit à partir du modèle de contenu en direct de ton app, donc quelle que soit la collection créée par Proyecta, intégrée ou personnalisée, c’est exactement ce que tu vois et modifies. Deux apps Proyecta ont rarement le même ensemble de collections, et c’est voulu.

Chaque collection est composée de champs typés. Les types de champs sont appliqués de bout en bout — le panneau d’administration affiche l’éditeur approprié, et tes pages reçoivent des valeurs correctement typées.

Type de champ À utiliser pour
string Valeurs courtes sur une ligne — titres, noms, adresses.
text Un paragraphe de texte brut.
markdown Texte enrichi long — corps d’articles, texte « à propos ».
slug Identifiant URL, dérivé automatiquement d’un autre champ (ex. le titre).
number Compteurs, notes, durées.
money Un prix ou un montant en devise — affiché et édité comme une valeur monétaire.
boolean Interrupteurs on/off.
date Dates de calendrier.
datetime Horodatages — dates de publication, heures de début d’événement.
weeklyHours Horaires d’ouverture pour chaque jour de la semaine.
asset Une image, une vidéo ou un PDF (stocké sous forme d’URL publique).
reference Un lien vers une entrée dans une autre collection.
enum Une valeur parmi une liste fixe de choix.
array Une liste de chaînes — tags, numéros de téléphone, zones.
blocks Blocs de contenu empilables — une page construite à partir de sections typées.
json Données structurées qui ne rentrent dans aucun des types ci-dessus.

Une entrée est un élément dans une collection. Chaque entrée a un statut :

  • Brouillon — un travail en cours ; jamais affiché sur ton site en ligne.
  • Publié — en ligne et visible par les visiteurs.
  • Archivé — retiré, mis de côté.

Tes pages publiques ne voient que les entrées publiées — les brouillons et les éléments archivés sont masqués automatiquement, ce qui te permet de préparer du contenu en toute sécurité avant qu’il ne soit mis en ligne.

Il existe deux façons d’ajouter et de modifier du contenu — aucune ne nécessite de toucher au code :

  1. Demande à l’IA dans le chat. Décris simplement la modification et elle édite le bon contenu pour toi :
    • "Ajoute un témoignage de María González : 'Meilleur service de la ville', 5 étoiles."
    • "Change le slogan dans Business Info en 'Café de especialidad en la Roma'."
    • "Marque les cinq dernières soumissions du formulaire de contact comme lues."
  2. Le panneau d’administration de ton application. Chaque app publiée dispose d’un panneau d’administration intégré et protégé par connexion, où toi (et le personnel à qui tu accordes l’accès) gérez le contenu et les soumissions de formulaires directement — un éditeur de type tableur par collection, plus la boîte de réception des soumissions. Il se configure à partir du modèle de contenu en direct de ton application, donc les nouvelles collections y apparaissent automatiquement. Voir Panneau d’administration.

Gère ton contenu CMS via le panneau d’administration de ton application ou l’IA — un éditeur de contenu intégré au builder est prévu (voir Prochainement). Un navigateur d’enregistrements en temps réel pour les applications live est bientôt disponible.

Tes pages lisent le contenu via un ensemble de hooks typés dans @/hooks/useContent — et l’IA écrit ce câblage pour toi. Tu décris la page ; Proyecta génère les composants qui appellent ces hooks sur tes vraies collections. Tu les touches rarement toi-même, mais voici ce qu’ils font :

Hook Ce qu’il fait
useCollection('posts') Liste les entrées publiées d’une collection (avec filtre/tri/limite optionnels).
useEntry('posts', slug) Récupère une entrée publiée par slug (pages de détail).
useSingleton('businessInfo') Lit un singleton (informations sur l’entreprise, contenu de page).
useFormSubmit('contactForm') Soumet un formulaire et signale les erreurs de validation.
// Un index de blog — exactement le type de code que l'IA génère pour toi
import { useCollection } from '@/hooks/useContent';
function BlogList() {
const { data: posts, isLoading } = useCollection('posts', { sort: 'published_at:desc' });
if (isLoading) return <Spinner />;
return posts?.map((post) => <PostCard key={post._id} post={post} />);
}

Lorsque Proyecta génère des interfaces typées pour tes collections, les hooks deviennent entièrement typés (useCollection<Post>('posts')), et ton éditeur autocomplète chaque champ. Les lectures sont hydratées au premier rendu à partir d’un snapshot précalculé — les pages s’affichent instantanément et de façon SEO-friendly, puis se rafraîchissent en temps réel en arrière-plan.

Les formulaires sont une fonctionnalité de premier plan, pas quelque chose que l’IA construit à la main. Intègre un bloc formulaire et il affiche les champs, valide les saisies, soumet et affiche un état de succès :

<FormBlock form="contactForm" />

Les formulaires sont également prêts à l’emploi — un formulaire de contact, une demande de devis, un formulaire de réservation, un formulaire de commande, un formulaire d’inscription — et Proyecta câble le bon dans tes pages. Les soumissions arrivent dans la boîte de réception du panneau d’administration de ton application, et le propriétaire reçoit un email à chaque nouvelle soumission. Voir Formulaires pour une vue complète.

Le contenu peut être traduit en plusieurs locales. Les champs marqués comme localisés stockent une valeur par langue, et les hooks de lecture les résolvent via une chaîne de repli (langue demandée → replis configurés → défaut) lorsque tu passes la locale active du visiteur :

const { data: posts } = useCollection('posts', { locale: 'es' });

Les applications en une seule langue ignorent totalement les locales — il n’y a rien à configurer. Pour une vue d’ensemble de la traduction, voir Internationalisation.

Une release regroupe plusieurs entrées pour qu’elles soient publiées (ou dépubliées) ensemble — prépare une mise en ligne coordonnée (un lancement, une nouvelle page produit, une mise à jour de FAQ) et bascule le tout en une seule fois.

Remarque : La publication automatique programmée n’est pas encore implémentée. Une release avec une date scheduled_at passe en statut scheduled mais doit être publiée manuellement. La publication automatique à l’heure programmée est prévue prochainement.

Tu écris rarement ça à la main — décris ce que tu veux et Proyecta le construit sur tes vraies collections :

  • "Crée un blog. Chaque article a un titre, une image de couverture, un corps en texte enrichi, une catégorie et des tags. Routes publiques sur /blog et /blog/[slug], du plus récent au plus ancien."
  • "Ajoute une section FAQ que le propriétaire peut modifier, groupée par catégorie."
  • "Ajoute une liste de services réservables avec un formulaire de demande de devis."
  • "Rends le site bilingue — anglais et espagnol — avec un sélecteur de langue."
  • "Alimente les témoignages avec cinq avis réalistes pour un café."

Le CMS est la maison par défaut du contenu durable et des enregistrements. Quelques types de données résident dans des systèmes dédiés :

Type de données Où elles vivent
Contenu & enregistrements (articles, services, annonces, FAQ, catalogue, réservations) Proyecta CMS (cette page) — le défaut
État temps réel / comportemental (chat en direct, feeds, présence, état de jeu) Store temps réelbientôt disponible
Comptes utilisateurs & connexion Auth
Produits, commandes, abonnements, paiements Commerce
Fichiers uploadés & médias Fichiers & Médias
Assets statiques intégrés au build le répertoire public/ de ton projet

Le CMS est le choix par défaut. Un store temps réel pour les comportements véritablement temps réel est bientôt disponible ; même alors, le contenu durable et le catalogue commerce resteront dans le CMS.

  • Éditeur de contenu intégré au builder — parcourir et modifier tes collections CMS directement depuis le tableau de bord du builder (aujourd’hui : gère le contenu via le panneau d’administration ou l’IA).
  • Éditeur WYSIWYG pour le texte enrichi — édition visuelle pour les champs markdown (aujourd’hui ils sont édités en markdown).
  • Publication automatique programmée — des releases qui se mettent en ligne automatiquement à l’heure prévue.
  • Aperçu en direct des modifications de contenu dans ton application.
  • Rôles de contenu — séparer les permissions des éditeurs de celles des développeurs.