Scribe

Il CMS basato su git per siti multilingua in MDX

I contenuti in inglese risiedono in file MDX nel tuo repository. Le traduzioni IA sono in un database SQLite accanto a loro. Zod valida entrambi, mentre un runtime tipizzato legge tutto in fase di compilazione. Nessun server CMS, nessuna richiesta di rete a runtime.

pnpm add scribe-cms zod better-sqlite3

Come funziona

  1. 1

    Definisci uno schema

    I tipi di contenuto sono schemi Zod. Indica quali campi vanno tradotti, quali restano solo in inglese e come i documenti si relazionano tra loro.

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

    Scrivi i contenuti

    Un file MDX per ogni documento, committato nel repository. Il nome del file fa da slug in inglese; il frontmatter viene validato in base allo 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

    Traduci le modifiche

    I contenuti da tradurre hanno un hash: solo le pagine nuove o aggiornate vengono inviate a Gemini (tramite Batch API, dimezzando il costo dei token). Il prompt è calibrato per la transcreation, per farti ottenere testi che sembrano scritti da un madrelingua. L'output viene parsato come MDX prima di essere salvato; un errore del modello fa fallire lo script, non il sito.

    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

    Leggi tutto, già tipizzato

    Il runtime deduce i tipi di documento direttamente dalla tua configurazione. Elenchi, query, relazioni, hreflang e sitemap: tutto ti viene restituito già tipizzato.

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

Cosa include

Traduzioni incrementali

Ogni traduzione è legata all'hash della sua fonte inglese. Modifichi un paragrafo? Viene tradotto solo quel documento (un dry run ti anticipa il costo).

Sembra scritto da un madrelingua

Il prompt è strutturato per la transcreation: riproduce lo stile di un copywriter e adatta le espressioni, invece di tradurre parola per parola.

Validato prima del salvataggio

Ogni traduzione viene elaborata come MDX e verificata nuovamente con il tuo schema Zod prima di salvarla. Se il modello sbaglia, si blocca il comando e la produzione è salva.

Tipizzazione end-to-end

Schemi Zod e tipi dedotti dai documenti, senza alcuna generazione di codice. Le relazioni vengono risolte e tipizzate automaticamente.

Token in linea

Link, asset e stringhe non traducibili sono incorporati direttamente nel testo. Modifichi un token e tutte le lingue si aggiornano all'istante, senza dover ritradurre.

SEO nativa

Tag hreflang, sitemap con x-default, canonical, noindex, regole di redirect in JSON e catene di fallback per la localizzazione.

Tutto sotto git

File MDX e un singolo database SQLite da includere nel repository. Gli snapshot tengono traccia della fonte di ogni traduzione; scribe history ti mostra tutta l'evoluzione.

Nessun server

Tutto viene letto dal disco in fase di build; ideale per Next.js, Astro o qualsiasi stack Node. Un'interfaccia locale ti permette di esplorare, cercare e controllare lo stato dei contenuti.

Nato per l'IA

Gli agenti IA leggono e modificano l'MDX con gli stessi strumenti che usano per il codice, e ogni modifica diventa una diff da revisionare. Non ci sono API di mezzo tra il modello e i tuoi testi.

Sviluppato alla luce del sole

scribe-cms ha licenza MIT e lo sviluppo avviene su GitHub. Anche questo sito lo usa! Ogni singola pagina è creata con scribe, basata su un database SQLite salvato nel repo per gestire ben dieci lingue. Dai un'occhiata al codice sorgente, apri una issue o invia una pull request.

Il CMS basato su git per siti multilingua in MDX