This is the first post pushed through the file-as-source content workflow.
The post lives as three markdown files: en.md, de.md, ru.md. The English file is the source of record. The German and Russian files are translations authored in the dev loop. Every push computes a content hash; identical files are no-ops.
What this verifies
- The scaffold script writes a frontmatter with a stable UUID.
bun run content:checkflags missing locales and stale translations.bun run content:pushupserts the post and creates one revision per locale.- Re-running push without edits is a no-op (skip-on-hash).
- The preview route at
/admin/content/posts/preview/<slug>/<locale>renders from the file, with a banner showing whether the file matches the database.
Why files first
Files are git-versioned. Translations get reviewed in pull requests instead of in a CMS. Cony writes the same file the engineer reads. The database is just a fast lookup index — nothing original lives there that didn't come through a file.