Pular para o conteúdo

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 conteúdo pode ser gerenciado pelo SDK ou pedindo à IA. A API de conteúdo conta com seis tipos de recursos:

Aba / RecursoPara que serve
CollectionsDefina e gerencie schemas de conteúdo (ex.: “Blog Post”, “FAQ”, “Product Spec”)
FieldsSlots tipados dentro de uma coleção (gerenciados como sub-recurso de Collections)
EntriesNavegue, crie, edite, publique e exclua entradas de uma coleção
LocalesAdicione e gerencie locales de idioma/região para conteúdo traduzido
ReleasesAgrupe entradas para publicar (ou despublicar) juntas; publique manualmente via releases.publish()
AssetsFaç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).

ConceitoO que é
CollectionUm schema — a estrutura de um tipo de conteúdo (ex.: “Blog Post”, “FAQ”, “Product Spec”)
FieldUm slot tipado em uma coleção (ex.: title: string, body: rich_text, coverImage: asset)
EntryUma instância única de uma coleção (um post de blog, um item de FAQ)
AssetUm arquivo de mídia enviado por upload e referenciável a partir das entradas
LocaleUm idioma/região para o qual o conteúdo é traduzido
ReleaseUm grupo de entradas programadas para entrar no ar (ou serem despublicadas) ao mesmo tempo
import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collection
const blog = await proyecta.content.collections.create({
api_id: 'blogPost',
name: 'Blog Post',
// fields are added via collections.fields.create()
});
// 2. Create an entry
const post = await proyecta.content.entries.create({
collection_id: blog.id,
data: {
title: 'Hello, world',
body: 'My very first post.',
},
});
// 3. Publish it
await proyecta.content.entries.publish({ entryId: post.id });
// Browse collections
for await (const collection of proyecta.content.collections.list()) {
console.log(collection.name);
}
// Add or remove fields on a collection
await proyecta.content.collections.fields.create(blog.id, {
/* field definition */
});
await proyecta.content.collections.fields.delete(blog.id, fieldId);

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 entry
await proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entry
await proyecta.content.entries.publish({ entryId: post.id });
// Delete an entry
await 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 assets
for await (const asset of proyecta.content.assets.list()) {
console.log(asset);
}
// Upload, update, or delete via assets.create / assets.update / assets.delete

Para uploads de arquivos via chat (arraste para o builder), consulte Arquivos e Mídia.

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.

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_at entram no status scheduled, mas precisam ser publicados manualmente via releases.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 ready
await proyecta.content.releases.publish({ releaseId: release.id });
// Browse releases
for 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.

  • "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."
Caso de usoUse isto
Conteúdo editorial (posts, FAQs, textos de marketing) — precisa de estados publicado/rascunho, agendamento e localizaçãoContent API
Dados da aplicação (usuários, pedidos, itens de linha) — precisa de velocidade de consulta, transações e tempo realDatabase
Assets estáticos no códigoDiretório public/ no seu projeto
Arquivos enviados por usuáriosFiles & Media
  • Editor de entradas rich-text — edição WYSIWYG completa para campos rich_text no 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