Typed local content before a CMS
Starting a journal with typed data files and a small repository interface, so a database or CMS can arrive later without rewriting the pages.
On this page
A CMS answers questions a new journal doesn't have yet: who edits, how drafts are reviewed, how images are stored. Typed data files answer the questions it does have: what an entry is, and how pages read it.
The model first
Each entry has a stable id, a slug, a type, a status, categories, tags, dates and a translation per language. A translation is all or nothing: title, summary and body together, so a page never mixes an Indonesian title with an English body.
A seam, not a framework
Pages call content.list() and content.get(). Those two methods return published entries only, so drafts can't leak into a list, a feed or a sitemap by accident. Swapping the local implementation for a remote one changes one file.