O Kookee é um backend de conteúdo: você escreve posts de blog, entradas do registro de alterações, artigos de ajuda, páginas e anúncios num único painel, e o seu app busca tudo como JSON e exibe com os seus próprios componentes, no seu próprio domínio. Este passo a passo vai do projeto vazio a três superfícies de conteúdo no ar, usando o SDK de TypeScript. Se o seu framework busca JSON e renderiza no servidor — Next.js, Astro, Nuxt, SvelteKit, TanStack Start —, tudo aqui se aplica diretamente.
1. Crie um projeto e pegue as credenciais
Cadastre-se (o plano gratuito não pede cartão de crédito e inclui os módulos de blog, registro de alterações e central de ajuda), crie um projeto e anote duas credenciais:
ID do projeto — pode ficar exposto no código do navegador; lê conteúdo publicado, como a chave de API. Só funciona enquanto o portal hospedado do projeto está ativado; caso contrário, a API responde 403
PORTAL_NOT_ENABLED.Chave de API — funciona em qualquer projeto, nos seus servidores e no navegador. Ela só lê conteúdo publicado, e tudo o que vai para o navegador fica visível aos visitantes, então restrinja a chave aos seus domínios nas origens permitidas do projeto.
A regra prática: apiKey em todo lugar, restrita pelas origens permitidas onde chegar a um navegador; projectId no código do navegador só enquanto o portal hospedado estiver ligado.
Agora escreva no painel um rascunho de post de blog, uma entrada do registro de alterações e um artigo de ajuda, e publique os três — você quer dados reais do outro lado da sua primeira requisição.
2. Instale e inicialize o SDK
npm install @kookee/sdk
import { Kookee } from '@kookee/sdk';
export const kookee = new Kookee({ apiKey: process.env.KOOKEE_API_KEY });
O SDK é TypeScript-first, não tem dependências e aceita tree-shaking; todo método de leitura aceita um AbortSignal. Crie a instância uma vez num módulo compartilhado e importe-a nos loaders das suas rotas.
3. O blog: lista e detalhe
Duas rotas. A página de lista:
const { data: posts } = await kookee.blog.list({ page: 1, limit: 10 });
Cada item da lista traz título, slug, resumo, tags e datas — o suficiente para os cards. A página de detalhe busca a entrada completa pelo slug:
const post = await kookee.blog.getBySlug(slug);
A resposta de detalhe traz o HTML renderizado do corpo e os campos de SEO que você preencheu no editor, então o head do documento sai da mesma requisição: title, meta description, canonical a partir do slug, imagem OG. Se getBySlug não encontrar nada, devolva um 404 de verdade.
Páginas de tag são a mesma chamada de lista com tags: ['news']; uma caixa de busca é list({ search: query }); kookee.blog.getTags() devolve a nuvem de tags com as contagens.
4. O registro de alterações
A mesma estrutura, com categorias tipadas:
const { data: entries } = await kookee.changelog.list({ page: 1, limit: 20 });
const features = await kookee.changelog.list({ filter: { changelogType: 'feature' } });
As entradas têm um tipo (feature, fix, improvement, breaking, security, deprecated ou other) e uma versão opcional, então a sua interface exibe selos e filtros sem inventar uma convenção. Reações são uma única chamada, se você quiser um sinal leve sobre os lançamentos:
await kookee.changelog.react(entryId, { reactionType: 'fire', action: 'add' });
5. A central de ajuda: categorias, artigos, busca semântica
Três requisições cobrem as rotas:
const categories = await kookee.help.categories();
const articles = await kookee.help.list({ category: 'getting-started' });
const article = await kookee.help.getBySlug('reset-your-password');
O diferencial é a busca, que é semântica — ela compara significado, não palavras-chave, e devolve o trecho encontrado, para você mostrar por que cada resultado apareceu:
const results = await kookee.help.search({ query: 'cobrado duas vezes este mês', limit: 5 });
// results[i].title, results[i].matchedChunk
Quando a sua base de artigos estiver pronta, o mesmo conteúdo alimenta respostas de IA — kookee.help.chat devolve respostas baseadas nos artigos, com fontes, e chatStream emite deltas para uma interface com streaming. Esse é o recurso de IA com cota do plano gratuito (50 respostas por mês para começar) e não pede nenhuma integração extra: os artigos que você acabou de publicar são o corpus.
6. Atalhos para React, se essa é a sua stack
@kookee/react empacota tudo isso em hooks — useBlogPosts, useBlogPost, useChangelog, useHelpCategories, useHelpSearch (com debounce, pode ser ligado direto a um input) —, e cada um devolve { data, isLoading, error }, com paginação via loadMore. Renderize no servidor com o loader do seu framework e passe o resultado como initialData, para que a primeira pintura já venha completa. Para o corpo, <EntryContent entry={post} /> renderiza o HTML da entrada, com uma folha de estilos para blocos de código que você pode importar numa cascade layer do Tailwind.
Desde a versão 1.9.0, o pacote também traz componentes renderizados no servidor para as três superfícies; veja Componentes React para o seu blog, registro de alterações e central de ajuda.
7. O que você ganha sem escrever mais código
Um portal hospedado em
your-project.kookee.dev— quadro de feedback, roteiro, registro de alterações e central de ajuda ficam no ar assim que você liga Ativar o portal público na página Portal público do projeto. É útil enquanto as suas próprias rotas não ficam prontas (as páginas do portal são marcadas como noindex, então nunca competem com o seu domínio na busca).Traduções: todo tipo de conteúdo aceita um parâmetro
locale, com fallbacks por projeto, para quando você for multilíngue.Comentários e reações em todos os módulos, moderados pelo painel.
Um servidor MCP, para que agentes e assistentes de IA pesquisem, leiam e rascunhem o seu conteúdo com um token pessoal para cada membro da equipe, somente leitura, a menos que você escolha outra coisa.
A tarde, item por item
Sendo realista: configuração do projeto e primeiro conteúdo, meia hora; rotas do blog, uma hora; registro de alterações, meia hora; central de ajuda com busca, uma ou duas horas; metadados do head, uma hora. As 100 mil requisições de API por mês do plano gratuito cobrem com folga o tráfego renderizado no servidor de um site pequeno, e não há cobrança até você ultrapassar esse limite.
O padrão que deixa isso rápido é a razão de ser do produto: o Kookee cuida da escrita, do armazenamento, da busca e da entrega; você cuida de duas ou três rotas enxutas por superfície, feitas com os componentes que já tem. Crie o projeto, publique um post de teste e faça a primeira chamada list — o resto vem daí.