Pular para o conteúdo

Gerenciamento de Conteúdo

O CMS do Proyecta é a camada de dados principal do seu app — não apenas posts de blog e textos de marketing, mas os registros reais sobre os quais seu app é construído. As coleções são provisionadas e populadas com conteúdo de exemplo real antes de a interface existir, para que seu app seja entregue conectado a dados editáveis desde o primeiro build.

A maioria dos apps Proyecta armazena seus dados no CMS integrado. Quando você descreve seu app, o Proyecta projeta um modelo de dados, cria as coleções necessárias e as preenche com conteúdo de exemplo realista — tudo antes de uma única página ser construída. Suas páginas então leem esse conteúdo real e editável pelo proprietário por meio de hooks tipados que a IA configura para você. Para entender como tudo isso se encaixa, veja Como os dados do seu app funcionam.

Você não precisa pensar em nada disso para começar — acontece automaticamente. Esta página explica o que está por baixo para que você possa moldá-lo.

O conteúdo é organizado em coleções e singletons:

Tipo O que é Exemplos
Collection Um tipo de conteúdo com muitas entradas — um schema, muitas linhas. posts, services, testimonials, catalogItems
Singleton Um tipo de conteúdo com exatamente uma entrada — conteúdo global, único. businessInfo, seoSettings

Uma coleção é uma estrutura; cada entrada é um item dessa estrutura (um post de blog, um serviço, uma FAQ). Um singleton armazena um único registro editável — a identidade do seu negócio ou o texto do hero/seção de uma página.

O Proyecta traz designs de coleções prontos — campos sensatos, dicas de administração e conteúdo inicial — para os tipos de registros que negócios reais mantêm: posts e artigos de blog, serviços, catálogo de produtos, cardápio, depoimentos e avaliações, membros da equipe, galeria de fotos, FAQs, eventos, localizações, recursos para download, vagas de emprego, cursos, passeios e listagens de acomodações, entre outros.

Você nunca escolhe em um menu. Quando você descreve seu app, o Proyecta escolhe os que o seu briefing requer — seu tipo de negócio, as funcionalidades que você pediu, o seu idioma — e os cria, pré-preenchidos com conteúdo de exemplo realista. Se o seu app precisar de algo que nenhum deles cobre, o Proyecta projeta uma coleção personalizada com seus próprios campos.

Por isso, o painel de administração do seu app mostra as coleções do seu app — não uma lista fixa. Ele se constrói a partir do modelo de conteúdo em tempo real do seu app, então tudo o que o Proyecta criou para você, integrado ou personalizado, é exatamente o que você vê e edita. Dois apps Proyecta raramente têm o mesmo conjunto, e isso é proposital.

Toda coleção é composta por campos tipados. Os tipos de campo são aplicados de ponta a ponta — o painel de administração renderiza o editor correto, e suas páginas recebem valores corretamente tipados.

Tipo de campo Para que serve
string Valores curtos de uma linha — títulos, nomes, endereços.
text Um parágrafo de texto simples.
markdown Texto rico de formato longo — corpo de artigos, textos “sobre”.
slug Identificador de URL, derivado automaticamente de outro campo (ex.: o título).
number Contagens, avaliações, durações.
money Um preço ou valor monetário — exibido e editado como dinheiro.
boolean Flags de ativado/desativado.
date Datas do calendário.
datetime Timestamps — datas de publicação, horários de início de eventos.
weeklyHours Horários de funcionamento para cada dia da semana.
asset Uma imagem, vídeo ou PDF (armazenado como URL pública).
reference Um link para uma entrada em outra coleção.
enum Um valor de uma lista fixa de opções.
array Uma lista de strings — tags, números de telefone, zonas.
blocks Blocos de conteúdo empilháveis — uma página construída a partir de seções tipadas.
json Dados estruturados que não se encaixam em nenhum dos tipos acima.

Uma entrada é um item em uma coleção. Toda entrada tem um status:

  • Draft — um trabalho em andamento; nunca exibido no seu site em produção.
  • Published — ativo e visível para os visitantes.
  • Archived — desativado, mantido fora do caminho.

Suas páginas públicas só veem entradas published — rascunhos e itens arquivados são ocultados automaticamente, para que você possa preparar conteúdo com segurança antes de publicá-lo.

Há duas formas de adicionar e editar conteúdo — nenhuma delas requer tocar no código:

  1. Peça à IA no chat. Basta descrever a mudança e ela edita o conteúdo certo para você:
    • "Add a testimonial from María González: 'Best service in town', 5 stars."
    • "Change the tagline in Business Info to 'Café de especialidad en la Roma'."
    • "Mark the last five contact-form submissions as read."
  2. O painel de administração do seu app. Todo app publicado tem um painel de administração integrado e protegido por login, onde você (e a equipe à qual você concede acesso) gerencia conteúdo e envios de formulários diretamente — um editor estilo planilha por coleção, além da caixa de entrada de envios. Ele se configura a partir do modelo de conteúdo em tempo real do seu app, então novas coleções aparecem lá automaticamente. Veja Admin Panel.

Gerencie seu conteúdo CMS pelo painel de administração do seu app ou pela IA — um editor de conteúdo integrado ao builder está no roadmap (veja Em breve). Um navegador de registros em tempo real para apps com atualização ao vivo está em breve.

Suas páginas leem conteúdo por meio de um conjunto de hooks tipados em @/hooks/useContent — e a IA escreve essa configuração para você. Você descreve a página; o Proyecta gera os componentes que chamam esses hooks nas suas coleções reais. Você raramente os toca diretamente, mas veja o que fazem:

Hook O que faz
useCollection('posts') Lista as entradas publicadas de uma coleção (com filtro/ordenação/limite opcionais).
useEntry('posts', slug) Busca uma entrada publicada pelo slug (páginas de detalhe).
useSingleton('businessInfo') Lê um singleton (informações do negócio, conteúdo de página).
useFormSubmit('contactForm') Envia um formulário e reporta erros de validação.
// A blog index — exactly the kind of code the AI generates for you
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} />);
}

Quando o Proyecta gera interfaces tipadas para suas coleções, os hooks ficam totalmente tipados (useCollection<Post>('posts')), e seu editor autocompleta todos os campos. As leituras são hidratadas na primeira renderização a partir de um snapshot pré-gerado — as páginas renderizam instantaneamente e de forma amigável para SEO, depois atualizam em tempo real em segundo plano.

Formulários são uma funcionalidade de primeira classe, não algo que a IA constrói manualmente. Adicione um bloco de formulário e ele renderiza os campos, valida a entrada, envia e exibe um estado de sucesso:

<FormBlock form="contactForm" />

Formulários também vêm prontos — um formulário de contato, uma solicitação de orçamento, um formulário de reserva, um formulário de pedido, um formulário de cadastro — e o Proyecta conecta o certo nas suas páginas. Os envios chegam na caixa de entrada do painel de administração do seu app, e o proprietário recebe um e-mail quando um novo envio chega. Veja Forms para o panorama completo.

O conteúdo pode ser traduzido para múltiplos locales. Campos marcados como localizados armazenam um valor por idioma, e os hooks de leitura os resolvem por meio de uma cadeia de fallback (idioma solicitado → fallbacks configurados → padrão) quando você passa o locale ativo do visitante:

const { data: posts } = useCollection('posts', { locale: 'es' });

Apps com um único idioma ignoram locales completamente — não há nada para configurar. Para a história completa de tradução, veja Internationalization.

Um release agrupa várias entradas para que sejam publicadas (ou despublicadas) juntas — prepare uma entrega de conteúdo coordenada (um lançamento, uma nova página de produto, uma atualização de FAQ) e ative tudo de uma vez.

Nota: A publicação automática programada ainda não está implementada. Um release com uma data scheduled_at entra no status scheduled, mas deve ser publicado manualmente. A publicação automática no horário agendado está em breve.

Você raramente escreve isso manualmente — descreva o que quer e o Proyecta constrói com base em coleções reais:

  • "Build a blog. Each post has a title, cover image, rich-text body, category, and tags. Public routes at /blog and /blog/[slug], newest first."
  • "Add an FAQ section the owner can edit, grouped by category."
  • "Add a bookable services list with a request-a-quote form."
  • "Make the site bilingual — English and Spanish — with a language switcher."
  • "Seed the testimonials with five realistic reviews for a coffee shop."

O CMS é o repositório padrão para conteúdo e registros duráveis. Alguns tipos de dados ficam em sistemas específicos:

Tipo de dado Onde fica
Conteúdo e registros (posts, serviços, listagens, FAQs, catálogo, reservas) Proyecta CMS (esta página) — o padrão
Estado em tempo real / comportamento (chat ao vivo, feeds, presença, estado de jogo) Realtime storeem breve
Contas de usuário e login Auth
Produtos, pedidos, assinaturas, pagamentos Commerce
Arquivos enviados e mídia Files & Media
Assets estáticos incorporados ao build o diretório public/ no seu projeto

O CMS é o padrão. Um realtime store para comportamentos genuinamente em tempo real está em breve; mesmo assim, conteúdo durável e o catálogo de commerce continuarão no CMS.

  • Editor de conteúdo integrado ao builder — navegue e edite suas coleções CMS diretamente no dashboard do builder (hoje: gerencie conteúdo pelo painel de administração ou pela IA).
  • Editor WYSIWYG de texto rico — edição visual para campos markdown (hoje eles são editados como markdown).
  • Auto-publicação programada — releases que vão ao ar automaticamente no horário agendado.
  • Preview ao vivo de alterações de conteúdo no seu app.
  • Funções de conteúdo — permissões de editor separadas das permissões de desenvolvedor.