Gerenciamento de Conteúdo
Um CMS headless com coleções, entradas, locales e releases. Gerencie conteúdo pelo painel Content ou pelo SDK.
O Proyecta possui um CMS headless completo. Ele é orientado a schema: você define coleções (tipos de conteúdo estruturado) e, em seguida, cria entradas que seguem os campos de cada coleção. As entradas podem ser localizadas e agrupadas em releases.
O painel Content
Seção intitulada “O painel Content”O conteúdo pode ser gerenciado pelo SDK ou pedindo à IA. A API de conteúdo conta com seis tipos de recursos:
| Aba / Recurso | Para que serve |
|---|---|
| Collections | Defina e gerencie schemas de conteúdo (ex.: “Blog Post”, “FAQ”, “Product Spec”) |
| Fields | Slots tipados dentro de uma coleção (gerenciados como sub-recurso de Collections) |
| Entries | Navegue, crie, edite, publique e exclua entradas de uma coleção |
| Locales | Adicione e gerencie locales de idioma/região para conteúdo traduzido |
| Releases | Agrupe entradas para publicar (ou despublicar) juntas; publique manualmente via releases.publish() |
| Assets | Faça upload e gerencie arquivos de mídia (imagens, vídeos, PDFs) referenciáveis a partir das entradas |
Clique em uma coleção na aba Collections para ir direto para suas entradas. A aba Entries permite criar, editar, publicar e excluir itens de conteúdo individualmente.
Você também pode gerenciar tudo de forma programática pelo SDK (proyecta.content).
Conceitos
Seção intitulada “Conceitos”| Conceito | O que é |
|---|---|
| Collection | Um schema — a estrutura de um tipo de conteúdo (ex.: “Blog Post”, “FAQ”, “Product Spec”) |
| Field | Um slot tipado em uma coleção (ex.: title: string, body: rich_text, coverImage: asset) |
| Entry | Uma instância única de uma coleção (um post de blog, um item de FAQ) |
| Asset | Um arquivo de mídia enviado por upload e referenciável a partir das entradas |
| Locale | Um idioma/região para o qual o conteúdo é traduzido |
| Release | Um grupo de entradas programadas para entrar no ar (ou serem despublicadas) ao mesmo tempo |
Quickstart
Seção intitulada “Quickstart”import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collectionconst blog = await proyecta.content.collections.create({ api_id: 'blogPost', name: 'Blog Post', // fields are added via collections.fields.create()});
// 2. Create an entryconst post = await proyecta.content.entries.create({ collection_id: blog.id, data: { title: 'Hello, world', body: 'My very first post.', },});
// 3. Publish itawait proyecta.content.entries.publish({ entryId: post.id });Coleções
Seção intitulada “Coleções”// Browse collectionsfor await (const collection of proyecta.content.collections.list()) { console.log(collection.name);}
// Add or remove fields on a collectionawait proyecta.content.collections.fields.create(blog.id, { /* field definition */});await proyecta.content.collections.fields.delete(blog.id, fieldId);Entradas
Seção intitulada “Entradas”As entradas são as linhas de conteúdo propriamente ditas. Cada entrada pertence a uma coleção e carrega dados que correspondem aos campos dessa coleção.
// 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 entryawait proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entryawait proyecta.content.entries.publish({ entryId: post.id });
// Delete an entryawait proyecta.content.entries.delete(post.id);O upload de assets é um recurso de primeira classe — use-o para anexar imagens, vídeos ou PDFs às suas entradas:
// Browse assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.deletePara uploads de arquivos via chat (arraste para o builder), consulte Arquivos e Mídia.
Localização
Seção intitulada “Localização”O conteúdo pode ser traduzido para múltiplos locales. Cada locale é um registro gerenciado via proyecta.content.locales:
await proyecta.content.locales.create({ /* code, name, etc. */});
for await (const locale of proyecta.content.locales.list()) { console.log(locale);}Ao buscar entradas, você pode solicitar a tradução de um locale específico. Consulte Internacionalização para ter uma visão completa do i18n.
Releases
Seção intitulada “Releases”Um release é um conjunto de entradas que entra no ar (ou é despublicado) ao mesmo tempo. Isso permite preparar uma publicação coordenada — um lançamento de marketing, uma nova página de produto, uma atualização de FAQ — e fazer tudo mudar atomicamente.
Nota: A publicação automática por agendamento ainda não está implementada. Releases com uma data
scheduled_atentram no statusscheduled, mas precisam ser publicados manualmente viareleases.publish(). A publicação automática no horário especificado está chegando em breve.
// 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 readyawait proyecta.content.releases.publish({ releaseId: release.id });
// Browse releasesfor await (const r of proyecta.content.releases.list()) { console.log(r);}Para alterar o agendamento de um release, exclua-o e recrie-o — não há endpoint de atualização.
Padrões comuns (deixe a IA montar pra você)
Seção intitulada “Padrões comuns (deixe a IA montar pra você)”"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."
Quando usar Content vs Database
Seção intitulada “Quando usar Content vs Database”| Caso de uso | Use isto |
|---|---|
| Conteúdo editorial (posts, FAQs, textos de marketing) — precisa de estados publicado/rascunho, agendamento e localização | Content API |
| Dados da aplicação (usuários, pedidos, itens de linha) — precisa de velocidade de consulta, transações e tempo real | Database |
| Assets estáticos no código | Diretório public/ no seu projeto |
| Arquivos enviados por usuários | Files & Media |
Em breve
Seção intitulada “Em breve”- Editor de entradas rich-text — edição WYSIWYG completa para campos
rich_textno painel Content - Preview ao vivo das alterações de conteúdo no seu app
- Funções de conteúdo — permissões separadas para editores e desenvolvedores