2026
Year: 2026
Latest post
The Rust ecosystem is unreasonably good
A second pass on the Rust port of my blog. I deleted the chromium PDF subprocess and replaced it with embedded Typst. Notes on axum, comrak, minijinja, and a typesetting compiler that ships as a crate.
2026-05-09
Rewriting my blog in Rust
I rewrote this blog from Flask to Rust over an afternoon. The result is a single 3.5 MB binary that uses 14x less memory and serves 10x more requests per second.
2026-05-06
Self-host your fonts
Three reasons every site should self-host fonts in 2026, and why @fontsource makes it a one-liner.
2026-05-03
Cool URIs don't change, unless an AI rewrites your blog
A short post-mortem on letting an AI port my blog from Django to Flask, and the URL design mistake it cheerfully shipped along the way.
2026-04-29
Using Vite with Django in 2026
I ran webpack on every Django project I had for years. In 2026 it's Vite, no wrapper package needed. Here's the whole setup.
2026-04-26
Optimizing SQLite for Django in production
The default SQLite settings in Django are fine for development but will hit "database is locked" errors under any concurrency. Here's the config I use in production.
2026-04-18
Managing a Python project with uv in 2026
How I set up and manage Python projects in 2026 using uv and ruff. Two tools and one config file replace everything.
2026-04-05