Ir al contenido

Gestión de contenido

Un CMS headless con colecciones, entradas, locales y releases. Administra el contenido desde el panel Content o el SDK.

Proyecta incluye un CMS headless completo. Es schema-first: defines colecciones (tipos de contenido estructurado) y luego creas entradas que cumplen con los campos de cada colección. Las entradas pueden localizarse y agruparse en releases.

El contenido puede administrarse mediante el SDK o pidiéndoselo a la IA. La Content API tiene seis tipos de recursos:

Pestaña / RecursoPara qué sirve
CollectionsDefine y administra schemas de contenido (p. ej., “Blog Post”, “FAQ”, “Product Spec”)
FieldsSlots con tipo dentro de una colección (se administran como sub-recurso de Collections)
EntriesNavega, crea, edita, publica y elimina entradas dentro de una colección
LocalesAgrega y administra locales de idioma/región para contenido traducido
ReleasesAgrupa entradas para publicarlas (o despublicarlas) juntas; publícalas manualmente con releases.publish()
AssetsSube y administra archivos multimedia (imágenes, videos, PDFs) referenciables desde las entradas

Haz clic en una colección en la pestaña Collections para ir directamente a sus entradas. La pestaña Entries te permite crear, editar, publicar y eliminar elementos de contenido individuales.

También puedes administrar todo de forma programática mediante el SDK (proyecta.content).

ConceptoQué es
CollectionUn schema: la forma de un tipo de contenido (p. ej., “Blog Post”, “FAQ”, “Product Spec”)
FieldUn slot con tipo en una colección (p. ej., title: string, body: rich_text, coverImage: asset)
EntryUna instancia individual de una colección (un artículo de blog, un ítem de FAQ)
AssetUn archivo multimedia subido, referenciable desde las entradas
LocaleUn idioma/región al que se traduce el contenido
ReleaseUn grupo de entradas programadas para publicarse (o despublicarse) al mismo tiempo
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);

Las entradas son las filas de contenido reales. Cada entrada pertenece a una colección y contiene datos que corresponden a los campos de esa colección.

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

La subida de assets es de primera clase — úsalos para adjuntar imágenes, videos o PDFs a tus entradas:

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

Para subidas de archivos desde el chat (arrastrando al builder), consulta Files & Media.

El contenido puede traducirse a múltiples locales. Cada locale es un registro administrado mediante proyecta.content.locales:

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

Al obtener entradas, puedes solicitar la traducción de un locale específico. Consulta Internacionalización para ver el panorama completo de i18n.

Un release es un conjunto de entradas que se publican (o se despublican) al mismo tiempo. Esto te permite preparar un lanzamiento de contenido coordinado — un lanzamiento de marketing, una nueva página de producto, una actualización de FAQ — y que todo cambie de forma atómica.

Nota: La publicación automática programada aún no está implementada. Los releases con una fecha scheduled_at entran al estado scheduled, pero deben publicarse manualmente mediante releases.publish(). La publicación automática a la hora indicada estará disponible próximamente.

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

Para cambiar la programación de un release, elimínalo y vuelve a crearlo — no existe un endpoint de actualización.

Patrones comunes (deja que la IA lo configure)

Sección titulada «Patrones comunes (deja que la IA lo configure)»
  • "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."
Caso de usoUsa esto
Contenido editorial (artículos, FAQs, copy de marketing) — requiere estados de publicado/borrador, programación, localizaciónContent API
Datos de la app (usuarios, órdenes, líneas de pedido) — requiere velocidad de consulta, transacciones, tiempo realDatabase
Assets estáticos en el códigoDirectorio public/ en tu proyecto
Archivos subidos por usuariosFiles & Media
  • Editor de entradas de texto enriquecido — edición WYSIWYG completa para campos rich_text en el panel Content
  • Vista previa en vivo de los cambios de contenido en tu app
  • Roles de contenido — permisos separados para editores y desarrolladores