Scribe

El CMS basado en git para sitios MDX multilingües

El contenido en inglés vive en archivos MDX en tu repositorio. Las traducciones por IA se guardan en un archivo SQLite junto a ellos. Zod valida ambos y un runtime tipado lee todo en tiempo de compilación. Sin servidor CMS ni llamadas de red al recibir peticiones.

pnpm add scribe-cms zod better-sqlite3

Cómo funciona

  1. 1

    Define un esquema

    Los tipos de contenido son esquemas de Zod. Indica qué campos se traducen, cuáles se quedan solo en inglés y cómo se relacionan los documentos entre sí.

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

    Escribe el contenido

    Un archivo MDX por documento, guardado en tu repositorio. El nombre del archivo es el slug en inglés y el frontmatter se valida con el esquema.

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

    Traduce los cambios

    El contenido traducible se hashea para enviar solo las páginas nuevas o desactualizadas a Gemini mediante la API Batch, a mitad de precio por token. El prompt está optimizado para la transcreación y logra textos que suenan naturales en el idioma de destino. La salida se analiza como MDX antes de guardarse; si la respuesta es incorrecta, falla el proceso y no el sitio.

    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

    Léelo con tipado fuerte

    El runtime infiere los tipos de documentos a partir de tu configuración. Listas, búsquedas, relaciones, etiquetas hreflang alternativas y entradas del sitemap se devuelven completamente tipadas.

    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!);

Qué incluye

Traducción incremental

Las traducciones están vinculadas a un hash de su versión original en inglés. Edita un párrafo y solo se retraducirá ese documento; puedes hacer una prueba en seco para ver el coste por adelantado.

Redactado como un nativo

El prompt está diseñado para la transcreación con la voz de un copywriter nativo que adapta los modismos en lugar de traducir palabra por palabra.

Validado antes de guardar

Cada traducción se analiza como MDX y se vuelve a comprobar frente a tu esquema de Zod antes de almacenarse. Si el modelo se equivoca, el comando falla sin afectar a producción.

Tipado de extremo a extremo

Esquemas de Zod, tipos de documentos inferidos y sin generación de código. Las relaciones se devuelven resueltas y con tipado estricto.

Tokens integrados

Enlaces, recursos y cadenas no traducibles se insertan directamente en el texto. Edita un token y todos los idiomas se actualizan al instante sin necesidad de volver a traducir.

SEO de serie

Etiquetas hreflang alternativas, sitemaps con x-default, URLs canónicas, noindex, reglas de redirección en JSON y cadenas de fallback por idioma.

Todo en git

Archivos MDX más una base de datos SQLite guardada en el repositorio. Los snapshots registran de dónde salió cada traducción y el historial de scribe te muestra la evolución cronológica.

Sin servidor

Todo se lee desde el disco en tiempo de compilación; compatible con Next.js, Astro o cualquier stack de Node. Un panel local te permite navegar, buscar y revisar la cobertura de un vistazo.

Diseñado para la IA

Los agentes leen y editan MDX con las mismas herramientas que usan para el código y cada cambio es un diff que puedes revisar. Sin APIs intermedias entre el modelo y el texto.

Desarrollo en abierto

scribe-cms tiene licencia MIT y se desarrolla en GitHub. Este mismo sitio lo utiliza. Cada página aquí es contenido de scribe, respaldado por un archivo SQLite en el repositorio que soporta diez idiomas. Revisa el código fuente, abre un issue o envía un pull request.

El CMS basado en git para sitios MDX multilingües