Blog
Manual cache invalidation is a promise every writer has to keep, and the promise nobody notices until it breaks. So I stopped asking the code to remember and made the database do the remembering — Postgres WAL to Redis DEL, zero polling, measured.
Build a website with only HTML and CSS. Form validation, modals, dropdowns — zero JavaScript. With the receipts.
I finally put my job queue under real load to see if it could actually handle the pressure. Turns out I was wrong about why it broke, twice, before I found the real problem: something I'd added myself.
I tried to get an AI to hardcode a throwaway API key. Two hours later I was accusing it of racism and testing whether it would abandon its principles to save a life. Here's what actually happened.
Coming from PHP, JavaScript, and Ruby, Go is the first language that made me want to understand what my code was doing. Here's why.
How I set up my Arch Linux rice the easy way with Omarchy, then broke it on purpose — Hyprland, Matugen, and a whole lot of tweaking.
Nobody codes on a phone. I do anyway, and I went down a real rabbit hole finding an AI coding agent light enough to actually live there. Here's what I found.