MILL · Content engine

Markdown in, living layouts.


MILL is a reusable Markdown-to-pages CMS. Feed it markdown and images and it renders GRAIN pages. It's the content pipeline behind this site's docs and blog: write the prose, get real pages, no hand-built HTML. It sits above BATCH and GRAIN, an extension of neither.

Live · it renders the notes and docs on this site
The idea

A layer above

It depends on GRAIN for components and BATCH for the substrate, never the reverse. Batch, then grain, then MILL on top.

Framework-agnostic core

A Markdown-to-components engine driven by a render-adapter port. The BATCH and GRAIN adapter is the default, not baked in.

Frontmatter picks the layout

Frontmatter chooses a layout, content blocks map to component tags. MILL emits the tags, BATCH composes them.

Live, then frozen

It renders live on BATCH while you write, and the static export freezes the result. Same content, two modes.

The design

MILL is the proof that BATCH and GRAIN compose into a real, reusable tool. The canonical design, the seams, the mapping model, and the build pieces are written up in the MILL plan that ships beside the code.

mill/docsgetting started, adding a collection, and the mapping model, rendered through MILL itself.
mill on GitHubthe source, inside the grain monorepo.
Where it sits in the stack
PANTRY · the app that composes the four PROOF CRUMB MILL GRAIN BATCH
Part of tjakoen.github.io. Built on GRAIN and BATCH.

Part of the BREAD stack, alongside BATCH, GRAIN, PROOF, CRUMB, and PANTRY.

🤖 Built with Claude. I don't prompt and pray, I prompt and prove. Every commit here is co-authored with an AI, on purpose. How I actually work with AI, receipts and all →