← Will Castner

How this site is built

August 10, 2026 · 1 min read

This site is about as simple as a site can be while still being pleasant to write for.

There is one Python file. It reads markdown out of posts/, wraps it in a single HTML template, and writes plain files into docs/. GitHub Pages serves that directory. There is no package manager, no node_modules, no framework, and nothing to upgrade. The whole thing runs on the Python that ships with macOS.

Writing a post is three steps:

python3 build.py --new "Post title"
# edit the file it prints, delete the draft: line
python3 build.py
git add -A && git commit -m "new post" && git push

Pages goes live a minute or so later.

Why not a static site generator

Because the interesting part of a blog is the writing, and every generator I've used eventually asks for more attention than the writing does — a config format to learn, a theme to fight, a dependency tree that rots. The markdown support here is a deliberate subset: headings, lists, links, emphasis, code, blockquotes, images, rules. That covers essentially everything I'd actually write, and when it doesn't, a raw HTML block passes straight through untouched.

The tradeoff is real and I'm making it on purpose. If I ever need footnotes or syntax highlighting badly enough, they're each a small function in the one file I already own.

What's here

Mostly notes about operations work at a research company, and the small tools I keep writing to avoid doing things twice. Nothing on a schedule.