Colophon
![A large collection of tools laid out on a surface.](/images/many-tools-640.jpg?hash=gHs43ZJT4p61ZJ95bDyVcCmcaOY)
My web site is one of my favorite yaks. There are many like it, but it is mine.
I build it as a static site published on a small machine hosted by Tornado and ultimately served by Bunny CDN. Content & compiler source in Git and assets tracked with git-annex.
Color scheme is Flexoki by Steph Ango, under the MIT license. Typefaces are Inter for the text and Space Grotesk for headings, both variable fonts to improve typographic flexibility and decrease page weight. I use Fira Math for MathML (some pages render math with KaTeX, which uses its fonts) and Hack for code / monospace text.
The compilation process is a pile of custom TypeScript running on Deno. The major libraries I use include:
- Pandoc content processing.
- deno_dom for reprocessing HTML.
- lmdb for caching.
- Hyperstatic for generating HTML (overall page layout and both server- and client-side page components; layout templates are in TSX using Hyperstatic’s JSX support).
- hbsinterp, my non-compiling Handlebars interpreter, for templating page content.
- SASS to make CSS more usable.
- esbuild to bundle client-side JavaScript, with a custom plugin to resolve remote dependencies and wire JSX into Hyperstatic.
- Pagefind to implement site search.
- WeasyPrint for rendering HTML to PDFs.
Build stages are automated with a Tcl script using a custom task runner library I wrote; that lives in my common TCL package.
One of the particularly cool features of this setup is my publication pages: each publication has a page written in Markdown; YAML metadata in the page serves as single-source-of-truth for my publications across the whole site. My CV is updated from this data, as is my publication list and other places where publications show up (project pages, blog posts, etc.). Citation statistics are automatically updated nightly.
I use WeasyPrint to render my CV into a consistent and downloadable PDF. The HTML CV itself prints well (the print CSS is how I generate the PDF), but the pre-rendered PDF provides niceties like good headers and footers.
Icons are from the excellent Noun Project.
I don’t make the Git repository and history of my web site public, but am happy to share upon request with people interested in seeing the code.