Modelo de conteúdo e mídia
Como um site separa textos do layout, o que o editor, a API e os agentes validam e como a mídia funciona.
Todo site é um projeto Astro que mantém o que o proprietário altera em arquivos de conteúdo tipados e o layout no código. Uma página lê o conteúdo e organiza seu layout. Ela nunca contém o nome da empresa, um preço ou o horário de funcionamento.
O modelo de conteúdo é a lista desses tipos de conteúdo e seus campos. Ele
é definido uma única vez em src/content.config.ts do projeto (um esquema Zod
por tipo). A cada build, ele é exportado como JSON Schemas, e o editor, a API
REST, o MCP e a CLI validam todas as alterações com base nele. Um valor que não
se encaixa é rejeitado, com o nome do campo, e nada é salvo.
O modelo vem do build mais recente. Faça um novo build do site antes de consultar o modelo de conteúdo.
Coleções e itens únicos
Uma coleção contém várias entradas, uma por arquivo. O nome do arquivo é o slug da entrada: letras minúsculas, números e hífens. Um item único é um documento JSON em um caminho fixo.
O starter do Atelier201 inclui estes itens:
| Nome | Tipo | Conteúdo |
|---|---|---|
business | item único | Nome, slogan, descrição, telefone, e-mail, endereço, horário de funcionamento, redes sociais, dados legais, links para reservas e mapas e idioma do site |
theme | item único | Quatro cores da marca, raio dos cantos, combinação de fontes e modo claro, escuro ou automático |
navigation | item único | Links do cabeçalho, links do rodapé e botão de chamada para ação |
integrations | item único | ID do Google Analytics, domínio do Plausible e código adicionado ao cabeçalho ou ao fim do corpo |
services | coleção, JSON | Serviços com nome, descrição, preço, ordem e imagem |
blog | coleção, Markdown | Publicações com título, descrição, data, autor, imagem de capa, tags, os serviços sobre os quais tratam (uma relação com services, pelo slug) e um indicador de rascunho |
O starter é um esqueleto: inclui essas duas coleções como exemplos e não pressupõe nada sobre a empresa. O site pode excluir as coleções de que não precisa e adicionar as suas próprias (uma equipe, um menu, eventos).
Uma coleção de conteúdo usa Markdown: campos no front matter e um corpo. Uma coleção de dados usa JSON, sem corpo.
Uma nova entrada criada pela API ou pelo MCP começa como rascunho se a coleção tiver um campo de rascunho, para que alguém decida se ela deve ser exibida.
Altere o conteúdo sem comprometer o layout
Prefira as chamadas de conteúdo às alterações diretas nos arquivos para textos, entradas e informações da empresa:
| Tarefa | REST | MCP | CLI |
|---|---|---|---|
| Consultar o modelo | Ler o modelo de conteúdo | get_content_model | atelier201 content model |
| Salvar uma entrada | Criar ou atualizar uma entrada | save_entry | atelier201 content save |
| Alterar um texto | Alterar um campo | set_field | atelier201 content set |
Use as chamadas de arquivo somente para alterar código: um layout, um
componente ou o próprio modelo de conteúdo. Para adicionar um campo, inclua-o
em src/content.config.ts com .default() ou .optional() para manter válidas
as entradas existentes.
Edição em linha: data-atelier201-field
O proprietário clica em um texto curto na página e o edita ali mesmo. Isso é possível porque o texto contém o endereço do campo de onde vem:
<h1 data-atelier201-field="business:/name">Morning Crumb Bakery</h1>
<time data-atelier201-field="business:/hours/2/close">15:00</time>O endereço segue o formato <singleton>:<JSON pointer>: business, theme ou
navigation, dois-pontos e, em seguida, um ponteiro RFC 6901
para o arquivo daquele item único. O mesmo endereço funciona com set_field e
atelier201 content set.
Siga estas regras ao editar um componente:
- Coloque o atributo em um elemento cujo texto completo corresponda exatamente
ao campo, sem nenhum outro conteúdo dentro dele. O Atelier201 substitui o
texto do elemento. Em “Ligue para nós: 555 0100”, envolva apenas o número em
um
span. - Mova o atributo junto com o elemento ao mudar seu estilo e adicione-o onde quer que um campo de item único apareça em um novo lugar.
- Não o use em textos montados com vários campos, textos transformados (uma
data formatada), corpos em Markdown ou entradas de coleção. Na página, uma
entrada deve manter
data-atelier201-entry="<collection>/<slug>"em seu contêiner.
O site continua estático
Um site feito para o Atelier201 é um site estático em Astro: sem adaptador de
servidor, renderização no servidor, framework no cliente nem solicitações a
outras origens durante a execução (incluindo fontes, tags de analytics e mapas
incorporados). Ele usa um único idioma, definido em business.locale. Suas
dependências são astro e @astrojs/mdx (desativada até que mdx() seja
adicionada à configuração), pois o build é executado sem acesso à rede. O
AGENTS.md do starter lista essas regras para um agente que edita o código.
Mídia
Envie uma imagem, um PDF ou um vídeo curto para o site e, em seguida, faça
referência a ele como /media/<filename> no conteúdo, por exemplo, no campo
coverImage de uma publicação do blog.
- Cada arquivo pode ter até 20 MB. Pelo MCP, os arquivos enviados são codificados em base64 e limitados a 5 MB.
- Adicione um texto
altàs imagens para quem não consegue vê-las. - A mídia é contabilizada no armazenamento do plano: 100 MB em um rascunho e 5 GB em um Site.
- Um arquivo enviado é incluído a partir do próximo build. Excluir um arquivo o remove dos builds seguintes, mas os builds já publicados mantêm sua cópia até serem substituídos por uma publicação mais recente.