I’ve had a version of this site for a few years and it has mostly been an empty theme with someone else’s demo content in it. That’s a fair description of a lot of personal sites, and it’s a slightly embarrassing thing for a web developer to leave lying around, so I’ve rebuilt it properly.
What’s here now #
Two things worth clicking. The projects page has the work I’d actually point at in an interview — production applications, mostly Next.js, a Web3 game, and a LaTeX template that has more stars than any of them. The resume is the same information in the format people ask for.
What I want to write about #
Most of my experience is in shipping web applications under a deadline for a real audience — a few hundred concurrent exam takers, ten thousand visitors during an orientation week, a screen on a wall that has to still be running next month with no one watching it. That work generates a specific kind of lesson, and I lose those lessons if I don’t write them down.
More recently I’ve been designing benchmarking tasks for agentic AI models, which means spending my days trying to articulate what a correct solution to a software problem actually looks like. That turns out to be much harder than solving the problem, and it’s changed how I write code.
The one thing I keep coming back to #
The project on this site I’m proudest of has no database.
It’s a live tracker for Qurban processing at a local mosque. The volunteers who update it use a Google Sheet, and the site reads from that sheet. I could have built an admin panel. It would have looked far more like real engineering on a portfolio page.
It also would have been worse. Building it my way would have meant training a group of volunteers on unfamiliar software during the single busiest week of their year, so that I could feel better about my architecture diagram. The best decision in that project was recognising that the boring option was correct.
I suspect most of what I have to say fits somewhere under that heading.