Scribe

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-sqlite3

Como funciona

  1. 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. 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. 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. 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.

O CMS baseado em git para sites MDX multilíngues