How this site is put together
A short colophon — what the site runs on, why it costs nothing to host, and how to add a post, a picture, a video, or an equation.
This page is a colophon and a test card. If everything below renders correctly, the site is working.
The shape of it
Every page here is plain HTML, generated ahead of time and served from GitHub Pages. There is no server, no database, and no framework running in your browser. The only script on the page is about four hundred bytes that swaps in a YouTube player when you click one.
Writing a post means adding a Markdown file to src/content/blog/ and pushing it. A GitHub Action rebuilds the site in under a minute. Nothing else.
Mathematics
Equations are written between dollar signs and rendered at build time — the browser receives typeset HTML, never a formula and a rendering engine. Inline like , or displayed:
An advection–diffusion–reaction equation, which is very nearly the whole of my working life. For anything with more structure, the usual environments hold:
Code
Syntax highlighting also happens at build time.
import numpy as np
def mean_curvature(vertices, faces):
"""Discrete mean curvature via the cotangent Laplacian."""
laplacian = cotangent_laplacian(vertices, faces)
areas = mixed_voronoi_areas(vertices, faces)
return np.linalg.norm(laplacian @ vertices, axis=1) / (2.0 * areas)
Pictures
Images are referenced by a short identifier rather than a URL, and resized on delivery — one upload of the original serves every screen size.

A handful of pictures that support a post, rather than carry it, can sit in a gallery that stays folded until you open it. Each thumbnail opens the full photograph.
Video and audio
Video is never hosted here. A directive takes a YouTube id or a share link and renders a poster frame; the player itself loads only if you press play. The page fetches one thumbnail from YouTube’s image host, and nothing else — no player, no tracking cookies — unless you ask for it.
Play video: A clip.Audio works the same way, and can also play a file directly for short clips where a video frame would be the wrong shape.
Adding to it
| To add | Do this |
|---|---|
| A blog post | New .md file in src/content/blog/ |
| A few photos in a post | A :::gallery block of ::img lines, folded until opened |
| A paper | Paste the BibTeX block into src/data/papers.bib |
| A project | New .md file in src/content/work/ |
That is the whole system.


