Scribe

Das Git-basierte CMS für mehrsprachige MDX-Websites

Die englischen Inhalte liegen als MDX-Dateien in deinem Repository. KI-Übersetzungen werden in einer SQLite-Datenbank daneben gespeichert. Zod validiert beides, und eine typisierte Laufzeitumgebung liest beim Build-Prozess alles aus. Kein CMS-Server, keine Netzwerkabfragen zur Laufzeit.

pnpm add scribe-cms zod better-sqlite3

So funktioniert's

  1. 1

    Schema definieren

    Inhaltstypen sind Zod-Schemas. Du legst fest, welche Felder übersetzt werden, welche englisch bleiben und wie Dokumente aufeinander verweisen.

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

    Inhalte schreiben

    Pro Dokument eine MDX-Datei, die direkt in dein Repo committet wird. Der Dateiname ist der englische Slug, das Frontmatter wird gegen das Schema validiert.

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

    Änderungen übersetzen

    Übersetzbare Inhalte erhalten einen Hashwert. So werden nur fehlende oder veraltete Seiten an Gemini gesendet, und zwar über die Batch-API zum halben Token-Preis. Der Prompt ist auf Transkreation optimiert, damit die Texte klingen, als wären sie in der Zielsprache verfasst. Die Ausgabe wird als MDX geparst, bevor sie gespeichert wird. Bei einer schlechten Antwort schlägt der Durchlauf fehl, nicht aber deine Website.

    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

    Typisiert auslesen

    Die Laufzeitumgebung leitet die Dokumenttypen aus deiner Konfiguration ab. Listen, Lookups, Relationen, hreflang-Alternativen und Sitemap-Einträge kommen alle vollständig typisiert zurück.

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

Das steckt drin

Inkrementelle Übersetzung

Übersetzungen sind an einen Hash ihrer englischen Quelle geknüpft. Ändere einen Absatz und nur dieses Dokument wird neu übersetzt. Ein Probelauf zeigt dir vorher die Kosten.

Liest sich wie von Muttersprachlern getextet

Der Prompt ist auf Transkreation ausgelegt: Die Stimme eines Native Copywriters, der Redewendungen kreativ nachbildet, anstatt Wort für Wort zu übersetzen.

Vor dem Speichern validiert

Jede Übersetzung wird als MDX geparst und erneut gegen dein Zod-Schema geprüft, bevor sie gespeichert wird. Modellfehler lassen den Befehl fehlschlagen, nicht die Produktion.

Durchgängig typisiert

Zod-Schemas, abgeleitete Dokumenttypen, kein Codegen. Relationen kommen dereferenziert und vollständig typisiert zurück.

Inline-Tokens

Links, Assets und nicht zu übersetzende Strings sind direkt in den Fließtext eingebettet. Änderst du ein Token, wird es sofort in allen Sprachen aktualisiert, ohne Neuübersetzung.

Integriertes SEO

hreflang-Alternativen, Sitemaps mit x-default, Canonicals, noindex, JSON-Weiterleitungsregeln und Fallback-Ketten für verschiedene Sprachen.

Alles in Git

MDX-Dateien und ein committeter SQLite-Speicher. Snapshots halten fest, auf welcher Basis jede Übersetzung erstellt wurde, während scribe history den zeitlichen Verlauf anzeigt.

Kein Server

Alles wird zur Build-Zeit von der Festplatte gelesen. Das funktioniert mit Next.js, Astro oder jedem beliebigen Node-Stack. Ein lokales Studio ergänzt das Ganze um Browsing, Suche und einen schnellen Überblick über die Abdeckung.

Konsequent AI-first

Agenten lesen und bearbeiten MDX mit denselben Werkzeugen, die sie auch für Code nutzen. Jede Änderung ist ein Diff, das du überprüfen kannst. Keine API zwischen dem Modell und dem Text.

Built in the open

scribe-cms steht unter der MIT-Lizenz und wird auf GitHub entwickelt. Diese Website läuft selbst damit. Jede Seite hier besteht aus scribe-Content mit einer committeten SQLite-Datenbank, die zehn Sprachen unterstützt. Schau dir den Quellcode an, eröffne ein Issue oder sende einen Pull Request.

Das Git-basierte CMS für mehrsprachige MDX-Websites