Back

Blog

I Deleted the Cache Invalidation From Every Write Path

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.

· 4 min read goredispostgrescdc
HTML Is Enough

Build a website with only HTML and CSS. Form validation, modals, dropdowns — zero JavaScript. With the receipts.

· 3 min read htmlcssopinion
I Load-Tested Kyu and the 'Optimization' I Added Was the Problem

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.

· 4 min read gopostgresredisload-testing
How Far Can You Push an AI Before It Breaks Character?

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.

· 8 min read aiclaudeopinionexperiment
Just Use Go

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.

· 3 min read goopinion
Rice, Rice Baby

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.

· 3 min read arch-linuxhyprlanddotfilesrice
Setting Up an AI Coding Agent on Termux (Nobody Codes on a Phone, I Know)

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.

· 6 min read termuxaiworkflow