Things I build, and things I just think about.
July 15, 2026 · 14 min read
Bun rewrote itself in 11 days. Everyone argued about the wrong thing.
The Bun-to-Rust story got told as Zig versus Rust, then as a fight about memory safety, then as a founder feud. I think all three framings miss it. The interesting part isn't the language they left. It's what the rewrite quietly proved about what code is now worth, and what it conveniently skipped.
July 14, 2026 · 6 min read
The free AWS tier still wants your credit card. The new sandbox doesn't.
AWS Builder Center now hands out pre-provisioned, throwaway AWS accounts you can deploy real resources into, no personal account, no card, no surprise bill. It's the first genuinely card-free way to touch real AWS, and it comes with exactly the constraints you'd expect for something free.
July 10, 2026 · 5 min read
The YouTube algorithm stopped recommending and started herding
My homepage used to feel like it knew me. Now it's a Shorts shelf, three reaction channels I never asked for, and a Subscriptions tab that quietly drops half the people I actually follow. This one's just a rant, and I know I'm not the only one having it.
July 7, 2026 · 9 min read
What building SubTrackr taught me about three processes pretending to be one app
I built a subscription tracker to get past tutorial-level SwiftUI, and the actual lesson was that an iOS app isn't one program. It's the main app, a widget extension, and a Live Activity, each running separately and mostly unaware of each other.
July 4, 2026 · 6 min read
What building a Slack clone taught me about Elixir
I rebuilt Slack's core loop in Phoenix to see if the 'Elixir is great for real-time' claim actually holds up outside a conference talk. Notes on channels, presence, and the two-topic trick that made the sidebar work.
June 24, 2026 · 7 min read
The hardest part of a GPS camera wasn't the GPS
A field-documentation app that geotags and timestamps photos sounds like a location problem. It mostly wasn't. The actual work was burning legible, correctly laid-out metadata onto a photo of unknown size, unknown orientation, and unknown content, using nothing but a Canvas and manual typography.
June 18, 2026 · 6 min read
The making of a library I built to stop parsing DRF errors by hand
Every Kotlin client I've written against a Django REST Framework backend ends up with its own slightly-wrong error parsing code, copied from the last project. DRF Error Handler is me finally writing that code once, publishing it properly, and being reminded that publishing is the actual hard part.
June 6, 2026 · 7 min read
A fake phone for a protocol three carriers can't agree on
USSD still runs half the mobile money and airtime menus in Africa, and every carrier speaks a slightly different dialect of it. I spent late May and early June building an Android simulator so I could stop testing that dialect against a real gateway every single time.
January 8, 2026 · 7 min read
S3, CloudFront, and a WebSocket that kept dying at exactly 60 seconds
Static frontend on S3, CloudFront in front of it, a WebSocket backend for the real-time parts. It's a standard AWS pattern right up until you actually wire it together, and then it turns out a CDN and a persistent bidirectional connection don't agree on much.
November 12, 2025 · 5 min read
SAP Service Layer will tell you something broke. It won't say what.
I've spent a good stretch of my career integrating against SAP Business One's Service Layer, and the thing nobody warns you about isn't the data model. It's that when something goes wrong, SAP's answer is usually a number, not an explanation.