---
title: Configura tu contenido
description: Da forma a tus sitios y colecciones en el admin o por MCP, con un esquema, rutas, reglas y una guía de estilo, sin desplegar.
section: guides
order: 1
---

# Configura tu contenido

La estructura de tu contenido vive en la base de datos de Hollware, junto al contenido mismo: tus sitios, sus colecciones, el esquema del frontmatter de cada colección, sus rutas, sus reglas y su guía de estilo. La cambias en el admin, o haces que un agente la cambie por MCP, y se aplica al instante a cada guardado y publicación posterior. No se despliega nada.

## Sitios y colecciones

Un despliegue sirve uno o más sitios. Un sitio tiene sus locales y sus colecciones; una colección es un tipo de entrada, como posts o páginas. `hollware init` crea tu primer sitio a partir de una plantilla, un blog salvo que pidas docs o una colección de páginas:

```sh
npx hollware init --site my-site --preset blog --locales en,es --local
```

Desde ahí, abre **Colecciones** en el admin o lee la estructura por MCP con `get_structure`.

El nombre de una colección son minúsculas, dígitos y guiones, como `blog`. Cinco nombres los ocupan rutas de la API de lectura y ninguna colección puede tenerlos: `admin`, `assets`, `ops`, `search` y `site`.

## En el admin

- **Colecciones** lista las colecciones del sitio y crea una a partir de una plantilla.
- La página de una colección edita sus campos, sus rutas por locale, qué campos agrupan las traducciones, las etiquetas y el orden, sus reglas y su guía de estilo.
- **Sitio** edita los locales, la URL pública, los orígenes que pueden leer desde el navegador, la guía de estilo del sitio y sus webhooks, crea un sitio nuevo y envía uno a la papelera.

Un cambio que afectaría entradas que el sitio ya tiene primero te dice cuáles y espera tu confirmación: una colección o un locale que quitas deja sus entradas fuera de alcance hasta que vuelva, y un esquema que rechaza algunas entradas las lista, para que las corrijas en su próximo guardado. Nunca se borra ninguna entrada.

## Por MCP

Un agente con un token que tiene `schema:admin`, el scope de un dueño, da forma al sitio con las mismas reglas:

| Herramienta | Qué hace |
| --- | --- |
| `get_structure` | la definición del sitio, su versión y el catálogo de reglas |
| `update_site` | reemplaza la definición, en la versión leída |
| `set_collection` | agrega, reemplaza o quita una colección |
| `create_site` | crea un sitio, contigo como dueño |
| `delete_site`, `restore_site` | envían un sitio a la papelera y lo recuperan |
| `make_webhook_secret` | crea el secreto que firma los envíos de un webhook |

Cada cambio se revisa completo antes de escribir nada, y cada problema vuelve en su ruta con su corrección. Uno que afecta entradas existentes responde `needs_confirmation` con lo que haría; el agente lo envía de nuevo con `confirm: true` cuando estés de acuerdo. Un cambio enviado con una versión desactualizada responde `conflict`, así dos personas nunca se sobrescriben.

## El esquema

El esquema de una colección es el JSON Schema de su frontmatter. Un borrador cuyo frontmatter no se ajusta se guarda con un error en su veredicto, y no se puede publicar hasta que se ajuste. En el admin cada campo tiene un tipo (texto, fecha, opción, lista de textos, número, sí o no), sus límites y si es obligatorio; todo lo demás que diga el JSON Schema se mantiene tal cual.

- **Las traducciones comparten** nombra el campo que une las entradas de un mismo post en cada locale.
- **Etiquetas** nombra el campo que guarda las etiquetas, por las que filtra `list_entries`.
- **Más nuevas primero según** nombra un campo de fecha: las listas muestran primero lo más reciente según él. Sin él, según la fecha de la primera publicación.

Algunos campos nadie debería escribirlos a mano. **Quién lo escribe**, en un campo de fecha o de número, deja que Hollware lo llene (`automaticFields` de la colección por MCP):

| Hollware llena | Con | Un valor escrito |
| --- | --- | --- |
| `firstPublished` | la fecha en que la entrada se publicó por primera vez | gana, así el contenido traído de otro lado conserva sus fechas |
| `lastModified` | la fecha de un cambio publicado después de eso | gana cuando es posterior |
| `readingTime` | minutos, a 200 palabras por minuto, contando también los bloques de código | se ignora |
| `wordCount` | las palabras del cuerpo | se ignora |

Un campo así nunca es obligatorio, el formulario de una entrada no lo muestra, y `describe_site` lo marca `readOnly` para que los agentes no lo toquen. Un sitio lo lee lleno, en el frontmatter, y `hollware export --published` lo escribe en los archivos; el Markdown que guarda Hollware sigue siendo lo que se escribió. Un blog nuevo tiene su `date` llenado así.

## Rutas

Las rutas dan la ruta de una entrada en cada locale, con `:slug`, como `/blog/:slug/` y `/es/blog/:slug/`. Los enlaces entre entradas se revisan contra ellas, y cada locale del sitio necesita una.

## Componentes

El cuerpo de una entrada es Markdown con componentes, escritos como `::name{prop="value"}`. Cada colección declara los componentes que permite, con el JSON Schema de sus props, una descripción y un ejemplo; cualquier otro componente es un error. Los agentes los leen con `describe_site`.

## Reglas

Las reglas vienen de un catálogo, cada una con sus parámetros, como un título de 60 caracteres como máximo salvo que haya un `seoTitle`; consulta [Contratos](/es/docs/contracts/).

## Guías de estilo

La guía de estilo de un sitio y de cada colección es Markdown para quien escribe. Hollware no la revisa; los agentes la leen con `describe_site`. Mantenla breve y concreta.

::callout{type="note"}
Un proyecto creado antes de 0.8 tiene un `hollware.config.ts`. Su Worker traslada la configuración a la base de datos en su primera solicitud después de actualizar, y nunca vuelve a leerla: desde ese momento, da forma al sitio en el admin.
::
