Scribe

Le CMS basé sur git pour les sites MDX multilingues

Votre contenu en anglais se trouve dans des fichiers MDX de votre dépôt. Les traductions IA sont stockées dans un fichier SQLite à leurs côtés. Zod valide le tout, et un environnement d'exécution typé lit chaque élément à la compilation. Aucun serveur CMS, aucun appel réseau lors des requêtes.

pnpm add scribe-cms zod better-sqlite3

Fonctionnement

  1. 1

    Définition d'un schéma

    Les types de contenu correspondent à des schémas Zod. Indiquez quels champs traduire, lesquels doivent rester en anglais et comment les documents sont liés entre eux.

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

    Rédaction du contenu

    Chaque document correspond à un fichier MDX versionné dans votre dépôt. Son nom définit le slug en anglais. L'en-tête (frontmatter) est validé selon votre schéma.

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

    Traduction des changements

    Le contenu traduisible est haché pour n'envoyer que les pages manquantes ou obsolètes à Gemini, via l'API Batch qui divise par deux le coût des jetons. Le prompt est optimisé pour la transcréation afin d'obtenir un texte qui semble rédigé directement dans la langue cible. Le résultat est analysé comme du MDX avant stockage. Une mauvaise réponse fait échouer l'exécution locale, pas votre site.

    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

    Lecture typée

    L'environnement d'exécution déduit les types de documents depuis votre configuration. Les listes, recherches, relations, balises hreflang et entrées de sitemap sont entièrement typées à leur retour.

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

Ce qui est inclus

Traduction incrémentielle

Les traductions sont associées à un hachage de leur source en anglais. La modification d'un paragraphe entraîne uniquement la retraduction de ce document. Une simulation préalable affiche le coût estimé.

L'impression d'un texte natif

Le prompt est conçu pour la transcréation. Il reproduit le style d'un rédacteur natif et adapte les expressions idiomatiques sans jamais traduire mot à mot.

Validation avant stockage

Chaque traduction est analysée en tant que MDX et vérifiée par rapport à votre schéma Zod avant d'être sauvegardée. Les erreurs du modèle font échouer la commande, pas la mise en production.

Un typage de bout en bout

Des schémas Zod, des types de documents déduits, et aucune génération de code. Les relations sont résolues et entièrement typées.

Jetons intégrés (tokens)

Les liens, ressources et chaînes non traduisibles s'intègrent directement dans le texte. La modification d'un jeton met à jour toutes les langues instantanément sans nécessiter de nouvelle traduction.

SEO natif

Balises hreflang, sitemaps avec x-default, URL canoniques, balises noindex, règles de redirection JSON et chaînes de repli linguistique.

Tout est dans git

Des fichiers MDX accompagnés d'une base SQLite versionnée. Des instantanés (snapshots) conservent la source de chaque traduction. L'historique scribe retrace toutes les évolutions.

Sans serveur

Tout est lu depuis le disque lors de la compilation. Compatible avec Next.js, Astro ou toute autre pile Node. Un studio local permet de naviguer, rechercher et visualiser la couverture des traductions d'un coup d'œil.

Conçu pour l'IA

Les agents lisent et modifient le MDX avec les mêmes outils que pour le code, et chaque modification produit un diff que vous vérifiez. Aucune API intermédiaire ne s'interpose entre le modèle et vos textes.

Développement ouvert

scribe-cms est sous licence MIT et développé sur GitHub. Ce site l'utilise pour fonctionner. Chaque page que vous y voyez est un contenu scribe, adossée à une base SQLite versionnée prenant en charge dix langues. Parcourez le code source, ouvrez une issue ou proposez une pull request.

Le CMS basé sur git pour les sites MDX multilingues