Gestión de contenido
El CMS de Proyecta es la capa de datos principal de tu app — no solo publicaciones de blog y textos de marketing, sino los registros reales sobre los que se construye tu app. Las colecciones se aprovisionan y se llenan con contenido de muestra real antes de que exista la interfaz, para que tu app salga conectada a datos editables desde el primer build.
La mayoría de las apps de Proyecta almacenan sus datos en el CMS integrado. Cuando describes tu app, Proyecta diseña un modelo de datos, crea las colecciones que necesita y las llena con contenido de muestra realista — todo antes de que se construya una sola página. Tus páginas luego leen ese contenido real y editable por el propietario mediante hooks tipados que la IA conecta por ti. Para entender el panorama general de cómo encaja todo esto, consulta Cómo funcionan los datos de tu app.
No tienes que pensar en nada de esto para empezar — sucede automáticamente. Esta página explica lo que hay debajo para que puedas moldearlo.
Colecciones y singletons
Sección titulada «Colecciones y singletons»El contenido se organiza en colecciones y singletons:
| Tipo | Qué es | Ejemplos |
|---|---|---|
| Collection | Un tipo de contenido con muchas entradas — un esquema, muchas filas. | posts, services, testimonials, catalogItems |
| Singleton | Un tipo de contenido con exactamente una entrada — contenido global, único. | businessInfo, seoSettings |
Una colección es una forma; cada entrada es un ítem de esa forma (una publicación de blog, un servicio, una pregunta frecuente). Un singleton contiene un único registro editable — la identidad de tu negocio, o el copy del hero/sección de una página.
Qué tipos de contenido
Sección titulada «Qué tipos de contenido»Proyecta incluye diseños de colecciones ya preparados — campos sensatos, sugerencias para el panel de administración y contenido inicial — para los tipos de registros que los negocios reales manejan: publicaciones y artículos de blog, servicios, un catálogo de productos, un menú de comida, testimoniales y reseñas, miembros del equipo, una galería de fotos, preguntas frecuentes, eventos, ubicaciones, recursos descargables, vacantes, cursos, tours y listados de alojamiento, entre otros.
Nunca eliges de un menú. Cuando describes tu app, Proyecta elige las que tu descripción requiere — tu tipo de negocio, las funcionalidades que pediste, tu idioma — y las crea, pre-llenadas con contenido de muestra realista. Si tu app necesita algo que ninguna de ellas cubre, Proyecta diseña una colección personalizada con sus propios campos.
Por eso, el panel de administración de tu app muestra las colecciones de tu app — no una lista fija. Se construye a sí mismo a partir del modelo de contenido en vivo de tu app, así que lo que sea que Proyecta haya creado para ti, integrado o personalizado, es exactamente lo que ves y editas. Dos apps de Proyecta rara vez tienen el mismo conjunto, y eso es intencional.
Cada colección está compuesta de campos tipados. Los tipos de campo se aplican de extremo a extremo — el panel de administración renderiza el editor correcto, y tus páginas reciben valores con el tipo correcto.
| Tipo de campo | Úsalo para |
|---|---|
string |
Valores cortos de una línea — títulos, nombres, direcciones. |
text |
Un párrafo de texto plano. |
markdown |
Texto enriquecido de formato largo — cuerpos de artículos, copy de “acerca de”. |
slug |
Identificador de URL, derivado automáticamente de otro campo (p. ej., el título). |
number |
Conteos, calificaciones, duraciones. |
money |
Un precio o monto en moneda — mostrado y editado como dinero. |
boolean |
Indicadores de activado/desactivado. |
date |
Fechas de calendario. |
datetime |
Marcas de tiempo — fechas de publicación, horas de inicio de eventos. |
weeklyHours |
Horarios de apertura para cada día de la semana. |
asset |
Una imagen, video o PDF (almacenado como URL pública). |
reference |
Un enlace a una entrada en otra colección. |
enum |
Un valor de una lista fija de opciones. |
array |
Una lista de strings — etiquetas, números de teléfono, zonas. |
blocks |
Bloques de contenido apilables — una página construida a partir de secciones tipadas. |
json |
Datos estructurados que no encajan en ninguno de los tipos anteriores. |
Entradas, borradores y publicación
Sección titulada «Entradas, borradores y publicación»Una entrada es un ítem dentro de una colección. Cada entrada tiene un estado:
- Draft — un trabajo en progreso; nunca se muestra en tu sitio en vivo.
- Published — en vivo y visible para los visitantes.
- Archived — retirado, guardado fuera del camino.
Tus páginas públicas solo ven entradas publicadas — los borradores y los ítems archivados se ocultan automáticamente, para que puedas preparar contenido con seguridad antes de que salga en vivo.
Gestionar contenido (sin código)
Sección titulada «Gestionar contenido (sin código)»Hay dos formas de agregar y editar contenido — ninguna requiere tocar código:
- Pídele a la IA en el chat. Solo describe el cambio y ella edita el contenido correcto por ti:
"Agrega un testimonial de María González: 'El mejor servicio de la ciudad', 5 estrellas.""Cambia el tagline en Business Info a 'Café de especialidad en la Roma'.""Marca las últimas cinco respuestas del formulario de contacto como leídas."
- El panel de administración de tu app. Cada app publicada tiene un panel de administración integrado y protegido por inicio de sesión donde tú (y el personal al que le des acceso) gestionan contenido y envíos de formularios directamente — un editor estilo hoja de cálculo por colección, más la bandeja de envíos. Se configura a sí mismo a partir del modelo de contenido en vivo de tu app, así que las nuevas colecciones aparecen ahí automáticamente. Consulta Admin Panel.
Gestiona el contenido de tu CMS a través del panel de administración de tu app o la IA — un editor de contenido dentro del builder está en el roadmap (consulta Próximamente). Un explorador de registros en tiempo real para apps con actualizaciones en vivo estará disponible pronto.
Cómo tu app lee el contenido
Sección titulada «Cómo tu app lee el contenido»Tus páginas leen el contenido a través de un conjunto de hooks tipados en @/hooks/useContent — y la IA escribe esa conexión por ti. Describes la página; Proyecta genera los componentes que llaman a estos hooks contra tus colecciones reales. Rara vez los tocas tú mismo, pero esto es lo que hacen:
| Hook | Qué hace |
|---|---|
useCollection('posts') |
Lista las entradas publicadas de una colección (con filtro/orden/límite opcionales). |
useEntry('posts', slug) |
Obtiene una entrada publicada por slug (páginas de detalle). |
useSingleton('businessInfo') |
Lee un singleton (información del negocio, contenido de página). |
useFormSubmit('contactForm') |
Envía un formulario y reporta errores de validación. |
// Un índice de blog — exactamente el tipo de código que la IA genera para tiimport { 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} />);}Cuando Proyecta genera interfaces tipadas para tus colecciones, los hooks se vuelven completamente tipados (useCollection<Post>('posts')), así que tu editor autocompleta cada campo. Las lecturas se hidratan en el primer render desde un snapshot precalculado — las páginas se renderizan al instante y son amigables con SEO, y luego se actualizan en vivo en segundo plano.
Formularios
Sección titulada «Formularios»Los formularios son una capacidad de primera clase, no algo que la IA construye a mano. Inserta un bloque de formulario y este renderiza los campos, valida la entrada, envía y muestra un estado de éxito:
<FormBlock form="contactForm" />Los formularios también vienen listos — un formulario de contacto, una solicitud de cotización, un formulario de reserva, un formulario de pedido, un formulario de registro — y Proyecta conecta el correcto en tus páginas. Los envíos llegan a la bandeja de entrada del panel de administración de tu app, y el propietario recibe un correo cuando llega uno nuevo. Consulta Forms para el panorama completo.
Localización
Sección titulada «Localización»El contenido puede traducirse a múltiples locales. Los campos marcados como localizados almacenan un valor por idioma, y los hooks de lectura los resuelven mediante una cadena de fallback (idioma solicitado → fallbacks configurados → predeterminado) cuando pasas el locale activo del visitante:
const { data: posts } = useCollection('posts', { locale: 'es' });Las apps de un solo idioma ignoran los locales por completo — no hay nada que configurar. Para la historia completa de traducción, consulta Internacionalización.
Releases
Sección titulada «Releases»Un release agrupa varias entradas para que se publiquen (o se despubliquen) juntas — prepara un lanzamiento coordinado de contenido (un lanzamiento, una nueva página de producto, una actualización de preguntas frecuentes) y actívalo todo de una vez.
Nota: La publicación programada automática aún no está implementada. Un release con una fecha
scheduled_atentra en estadoscheduledpero debe publicarse manualmente. La publicación automática a la hora programada estará disponible pronto.
Patrones comunes (deja que la IA lo conecte)
Sección titulada «Patrones comunes (deja que la IA lo conecte)»Rara vez escribes esto a mano — describe lo que quieres y Proyecta lo construye contra colecciones reales:
"Construye un blog. Cada publicación tiene un título, imagen de portada, cuerpo de texto enriquecido, categoría y etiquetas. Rutas públicas en /blog y /blog/[slug], las más recientes primero.""Agrega una sección de preguntas frecuentes que el propietario pueda editar, agrupadas por categoría.""Agrega una lista de servicios reservables con un formulario de solicitud de cotización.""Haz el sitio bilingüe — inglés y español — con un selector de idioma.""Llena los testimoniales con cinco reseñas realistas para una cafetería."
Dónde viven los datos de tu app
Sección titulada «Dónde viven los datos de tu app»El CMS es el hogar predeterminado para el contenido y los registros duraderos. Algunos tipos de datos viven en sistemas especializados:
| Tipo de datos | Dónde vive |
|---|---|
| Contenido y registros (publicaciones, servicios, listados, FAQs, catálogo, reservas) | Proyecta CMS (esta página) — el predeterminado |
| Estado en tiempo real / de comportamiento (chat en vivo, feeds, presencia, estado de juego) | Realtime store — próximamente |
| Cuentas de usuario e inicio de sesión | Auth |
| Productos, pedidos, suscripciones, pagos | Commerce |
| Archivos subidos y media | Files & Media |
| Assets estáticos integrados en el build | el directorio public/ en tu proyecto |
El CMS es el predeterminado. Un realtime store para comportamiento genuinamente en tiempo real estará disponible pronto; incluso entonces, el contenido duradero y el catálogo de commerce seguirán viviendo en el CMS.
Próximamente
Sección titulada «Próximamente»- Editor de contenido dentro del builder — navega y edita tus colecciones de CMS directamente desde el dashboard del builder (hoy: gestiona el contenido a través del panel de administración o la IA).
- Editor WYSIWYG de texto enriquecido — edición visual para campos
markdown(hoy se editan como markdown). - Publicación automática programada — releases que se publican automáticamente a su hora programada.
- Vista previa en vivo de cambios de contenido en tu app.
- Roles de contenido — permisos de editor separados de los permisos de desarrollador.