O CMS baseado em git para sites MDX multilíngues
O conteúdo em inglês fica em arquivos MDX no seu repositório. As traduções por IA ficam em um arquivo SQLite ao lado deles. O Zod valida ambos e um runtime tipado lê tudo durante a build. Sem servidor de CMS, sem chamadas de rede no momento da requisição.
pnpm add scribe-cms zod better-sqlite3Como funciona
- 1
Defina um schema
Os tipos de conteúdo são schemas do Zod. Indique quais campos devem ser traduzidos, quais continuam apenas em inglês e como os documentos se relacionam.
// scribe.config.ts defineContentType({ id: "blog", path: "/blog/{slug}", slugStrategy: "localized", schema: z.object({ title: field.translatable(z.string().min(1)), description: field.translatable(z.string().min(50)), author: field.relation("author"), heroImage: field.structural(z.string().optional()), }), }); - 2
Escreva o conteúdo
Um arquivo MDX por documento, com commit direto no seu repositório. O nome do arquivo é o slug em inglês e o frontmatter é validado pelo schema.
--- title: "Hello, world" description: "A first post that says hello to the world." author: jane publishedAt: "2026-01-15" --- The body is MDX. **Markdown** and <Components /> both work. - 3
Traduza o que mudou
O conteúdo traduzível recebe um hash. Isso garante que apenas páginas novas ou desatualizadas sejam enviadas ao Gemini através da Batch API pela metade do preço por token. O prompt é otimizado para transcriação, garantindo que o texto soe natural no idioma de destino. O resultado é processado como MDX antes de ser salvo. Uma resposta inválida interrompe a execução, não o seu site em produção.
export GEMINI_API_KEY=... npx scribe translate --locale fr de --dry-run # show the worklist npx scribe translate --locale fr de # translate, validate, store git add .scribe/store.sqlite # translations live in git - 4
Leia com tipagem
O runtime infere os tipos de documento a partir da sua configuração. Listas, buscas, relações, alternativas de hreflang e entradas de sitemap retornam com tipagem completa.
const scribe = createScribe(config); const posts = scribe.blog.list("fr"); // BlogDoc[] const { document } = scribe.blog.resolve(slug, "fr"); // EN fallback built in const author = scribe.blog.related(document!, "author"); // AuthorDoc const hreflang = scribe.blog.alternates(document!);
O que ele oferece
Tradução incremental
As traduções são vinculadas a um hash do conteúdo original em inglês. Se você editar um único parágrafo, apenas aquele documento será retraduzido. Uma simulação (dry run) mostra o custo antecipadamente.
Texto natural e fluido
O prompt foi desenhado para transcriação. Ele simula a voz de um copywriter nativo, recriando expressões e figuras de linguagem em vez de fazer uma tradução literal.
Validação antes do armazenamento
Cada tradução é processada como MDX e verificada novamente contra o seu schema Zod antes de ser salva. Erros do modelo fazem o comando falhar, mas não afetam o ambiente de produção.
Tipagem de ponta a ponta
Schemas do Zod, tipos de documento inferidos e sem geração de código. As relações retornam desreferenciadas e totalmente tipadas.
Tokens integrados ao texto
Links, arquivos e textos não traduzíveis inseridos diretamente no conteúdo. Edite um token e todos os idiomas são atualizados instantaneamente, sem precisar de uma nova tradução.
SEO nativo
Alternativas com hreflang, sitemaps com x-default, URLs canônicas, noindex, regras de redirecionamento em JSON e cadeias de fallback de idioma.
Tudo versionado no git
Arquivos MDX e um banco SQLite salvo no repositório. Snapshots registram a origem de cada tradução, enquanto o comando scribe history exibe toda a linha do tempo.
Sem servidor
Tudo é lido direto do disco no momento da build. Funciona com Next.js, Astro ou qualquer stack Node. Um estúdio local facilita a navegação, busca e visualização rápida da cobertura de idiomas.
Criado para a era da IA
Agentes de IA leem e editam o MDX usando as mesmas ferramentas que usam para código, e cada alteração gera um diff para você revisar. Não há nenhuma API intermediária entre o modelo e os textos.
Desenvolvido em código aberto
O scribe-cms possui licença MIT e é desenvolvido no GitHub. Este site roda nele. Cada página aqui é um conteúdo gerenciado pelo scribe, usando um banco SQLite no repositório para dar suporte a dez idiomas. Leia o código-fonte, abra uma issue ou envie um pull request.