Writing
Notes from the build
Short pieces about the parts that actually broke: migrations, tokens, locales, and the small rules that keep a codebase readable at three in the morning.
Posts
Seven minutes of downtime
Moving a live game off EKS and Aurora Serverless onto three servers I own. The rehearsal took three weeks. The switch took seven minutes.
Refresh tokens that notice they have been stolen
argon2id, a rotating host-only cookie, and archived fingerprints. Replaying an old token reads as theft and ends every session that owner holds.
Six locales without an i18n library
Dictionaries as typed objects, one server boundary, and a middleware that never guesses the language. What it cost, and what it gave back.
The hundred-line rule
One fullpage engine, 141 files, none of them longer than a hundred lines. Why the ceiling matters more than the average.
Monitoring that lives somewhere else
A dead server should not be the thing deciding whether you hear about it. Prometheus, Loki and a watchdog on a machine of their own.
Binary WebSocket over JSON
Packed binary game state instead of text frames. Fewer bytes per tick, and a contract where there used to be a convention.
Nine pieces, page 1 of 2