Ir al contenido

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.

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.

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.

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.

Hay dos formas de agregar y editar contenido — ninguna requiere tocar código:

  1. 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."
  2. 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.

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

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.

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.

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.

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_at entra en estado scheduled pero 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."

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 storepró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.

  • 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.