This site runs on a deliberately simple stack: hand-written HTML, one stylesheet, and a small Python script that turns Markdown into pages. No framework, no build step, no JavaScript at runtime beyond a menu toggle.
For an academic website, that trade is a good one. The site has to stay online for years with minimal maintenance, load fast for readers everywhere, and survive whatever happens to the underlying tools. Static HTML checks all three boxes.
How the blog works
Every post lives as a Markdown file in content/blog/, with a small frontmatter block
for the title, date and summary:
---
title: Building a research website that ages well
date: 2026-08-30
tags: web, science
---
Running one command rebuilds the blog listing and each article page:
python build_content.py
The generated pages embed the same editorial layout as the rest of the site — serif display type, teal and terracotta accents, generous whitespace — so articles feel like part of the same publication rather than an afterthought.
Why bother
Academic work is full of fast-changing tooling, but a personal site is closer to a book than to an app. Books don't need to be recompiled every time the ecosystem moves; they need to keep being readable. A static site built on Markdown gets you the same kind of durability, plus the ability to write in plain text anywhere and keep every version in Git.
The result is something I can maintain in an afternoon and that will still render correctly ten years from now.
