Colophon

This site is a few hundred lines of HTML and CSS with no framework behind it. Posts are Markdown files in src/posts/, structured content lives in JSON under src/data/, and a small Python script stitches the two together into static pages. The only JavaScript anywhere on the site is about twenty inline lines that remember whether you prefer the dark or the light theme.

I keep it this way for a boring reason: a personal site should still build in five years. Every dependency is one more thing that can rot between the times I remember this repository exists.

What a post can contain

Ordinary prose, of course, plus the usual Markdown furniture. Lists:

  • Nested structure works as you would expect
  • So do links and emphasis
  • Inline code gets a subtle background

Blockquotes, for when someone said it better:

The purpose of computing is insight, not numbers.

Fenced code blocks are syntax-highlighted at build time by Pygments, with separate themes for light and dark:

def kl(p, q):
    return sum(pi * math.log(pi / qi) for pi, qi in zip(p, q))

Tables, kept narrow enough to read:

Stage Cost Notes
Build ~0.2s Pure Python, no network
Deploy one push GitHub Pages serves the committed HTML

Math, when a post asks for it

Setting math: true in the front matter pulls in KaTeX for that page only, so pages that do not need it stay free of third-party requests. Inline math like $\mathcal{O}(n \log n)$ works, and so does display math:

$$ \mathcal{L}(\theta) = -\mathbb{E}{x \sim \mathcal{D}} \left[ \log p\theta(x) \right] $$

Deleting this post

Remove src/posts/2026-08-02-colophon.md and rebuild. Anything with draft: true in its front matter is skipped, which is the gentler option while a draft is still cooking.

← All writing