reflection
2025 in review

2025 was my year of doing ALL the things - speaking at 5+ conferences, starting a podcast, shipping side projects, and somehow not completely burning out. I learned that momentum creates more momentum, perfectionism is overrated, and seeing people in real life again after years of isolation is actually really, really good.

Jan 9, 2026
proposal
Representing groups in ATProto

I wanted to add book clubs to my GoodReads-like app (Collective), but ATProto doesn't have a standard way to handle shared group resources yet. So I'm building opensocial.community—a separate service that manages groups independently from any single app. This means the same book club could potentially work across multiple apps (imagine your book club having both a reading list in Collective AND a discussion forum in another app), and groups can migrate between providers if needed. It's probably over-engineered for my use case, but might help other ATProto developers building community features.

Dec 21, 2025
Blog
Representing groups in ATProto

I wanted to add book clubs to my GoodReads-like app (Collective), but ATProto doesn't have a standard way to handle shared group resources yet. So I'm building opensocial.community—a separate service that manages groups independently from any single app. This means the same book club could potentially work across multiple apps (imagine your book club having both a reading list in Collective AND a discussion forum in another app), and groups can migrate between providers if needed. It's probably over-engineered for my use case, but might help other ATProto developers building community features.

Dec 20, 2025
Blog
Build the thing you wish to see in the world
Dec 4, 2025
tutorial
A Software Engineer's Guide to Agentic Software Development

I've cracked the code on breaking the eternal cycle - features win, tech debt piles up, codebase becomes 'legacy', and an eventual rewrite. Using coding agents at GitHub, I now merge multiple tech debt PRs weekly while still delivering features. Tickets open for months get closed. 'Too hard to change' code actually improves. This is the story of the workflow.

Nov 25, 2025
Blog
A Software Engineer's Guide to Agentic Software Development

I've cracked the code on breaking the eternal cycle - features win, tech debt piles up, codebase becomes 'legacy', and an eventual rewrite. Using coding agents at GitHub, I now merge multiple tech debt PRs weekly while still delivering features. Tickets open for months get closed. 'Too hard to change' code actually improves. This is the story of the workflow.

Nov 24, 2025
Blog
Untitled
Aug 7, 2025
Blog
I finally added Bluesky comments and likes to my blog (and you can too!)

Learn how to add Bluesky comments and likes to your blog in under an hour using ATProto integration, with copy-paste code for Astro sites.

Aug 6, 2025
tutorial
I finally added Bluesky comments and likes to my blog (and you can too!)
Aug 5, 2025
Blog
My Honest Take on the BenQ RD280U Programming Monitor After Three Months of Daily Use
Jun 30, 2025
Blog
My Adventure on the Web Dev Challenge - Caffeine, Code, and Cameras!
Apr 17, 2025
Blog
Epic Web Conf - You can just do things
Mar 28, 2025
Blog
How I use AI to enhance my writing
Feb 20, 2025
Blog
Not the most technical one in the room: On imposter syndrome
Feb 13, 2025
Blog
Untitled
Feb 6, 2025