🥖 BATCH · Substrate

No build. Just ship the source.


BATCH is a no-build, server-rendered hypermedia substrate on Bun. It's the bottom layer that GRAIN and the product stand on. Bun runs the TypeScript directly, so the browser gets near-zero framework JavaScript. The whole point is to show that modern HTML, CSS, and a small runtime don't need a bundler.

Live · runs this site
What it is

No build step

Nothing between source and server: no bundler, no transpiler. Ship the source, the runtime reads it.

Native-first

Server-rendered hypermedia, with near-zero client JavaScript. The audit numbers are the proof, not a promise.

Zero runtime deps

Third-party runtime dependencies stay at zero (today, only Bun). Platform builtins and dev tools don't count.

Addressable and operable

Every surface has a semantic address: the base a person and an AI can both drive. That part is GRAIN, above.

Static export = projection

Export crawls the running server and freezes it to static files, never a second renderer, so the export can't drift from the app.

Audit engine built in

A framework-generic perf + SEO/AEO harness benches any app, not just this one. The numbers are the proof.

The reference

The canonical docs are homed here and render through MILL, at /batch/docs:

ARCHITECTUREthe substrate's reasoning, and the single source of truth for the stack.
CONVENTIONSthe build standard: layering, components, tokens, the action vocabulary, the testing bar.
batch on GitHubthe source repo.
Where it sits in the stack
PANTRY · the app that composes the four PROOF CRUMB MILL GRAIN BATCH
Part of tjakoen.github.io, built with itself. GRAIN, the design system, is here.

Part of the BREAD stack, alongside GRAIN, MILL, 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 →