2026
Blog
Latest post
An agentic loop in Go for a small local model
I run my own assistant on a 9B at home and the tool calling loop in it is a few hundred lines of Go, most of which is there to stop it offering to look something up instead of looking it up.
2026-09-20
Why not make your own dashboard in 2026
I was checking the same six tabs all day out of habit so I built one page with all of it on it, and it only took a couple of evenings.
2026-09-10
It's Go all the way down
Every process in front of my websites is a Go binary now, from the tunnel to the web server to the sites themselves, and the whole stack runs on a desktop I already owned for a few dollars a month in power.
2026-08-30
A status line for Claude Code
A drop-in status line for Claude Code that shows your 5-hour usage quota, context window, working directory with git branch, and the time, all out of one bash file, plus a quick walk through how it works.
2026-06-13
The Rust ecosystem is unreasonably good
A second pass on the Rust port of my blog, where I dropped the chromium PDF subprocess for embedded Typst. Some notes on axum, comrak, minijinja and Typst.
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
The shared cache argument for Google Fonts died in 2020 and the privacy argument was never great. Self-hosting with @fontsource is a one line change.
2026-05-03
Cool URIs don't change, unless an AI rewrites your blog
I let an AI port my blog from Django to Flask and it quietly moved every post URL, which I didn't catch for about a week.
2026-04-29
Using Vite with Django in 2026
I ran webpack on every Django project I had for years but in 2026 I use Vite instead, with no wrapper package involved, and this is the whole setup I use.
2026-04-26
Optimizing SQLite for Django in production
Django's default SQLite settings are fine for development but will hit "database is locked" errors under any concurrency. This is the config I run in production.
2026-04-18
Managing a Python project with uv in 2026
How I set up and manage Python projects in 2026 with uv and ruff, which is two tools and one config file instead of the pile I used to keep around.
2026-04-05