About
I'm a senior software engineer with nine years of professional experience. Most of it has gone on dynamic, realtime web applications — the kind of product where what one person does has to appear on someone else's screen straight away, and be correct when it gets there.
What I work on
Day to day that means TypeScript across the stack: Node and Next.js on the server, React on the client, Postgres underneath, and enough cloud infrastructure to keep the thing standing up.
More recently, a lot of agentic AI tooling. It's the part of the work where the engineering is least settled, and the interesting problems aren't in calling a model — they're in constraining one. Deciding what it is allowed to touch, knowing when its answer is wrong before a user does, and keeping the whole thing cheap enough and legible enough to run in production.
How I work
Beyond writing code I mentor engineers, interview candidates, lead teams and take a hand in product direction, and I've worked on the security and compliance side of shipping software. The common thread is that I'd rather spend the time up front deciding what to build and why than spend it later unpicking something that shipped without an answer to either question.
Away from work
I make video games. It's where I get to be careless in a way production code doesn't allow — and it's the reason there are interactive demos on this site rather than screenshots.