Studio
Practice
I build the parts of software people actually touch — the dashboard that has to stay fast at the end of a long day, the table that has to make a thousand rows feel like a list, the form that has to forgive a tired user. Most of my work lives in that gap between what a backend can do and what a person can read. I treat that gap as the real product.
What I care about, in order: that the thing loads, that it stays responsive when it's full, that it's legible to someone who has never seen it before, and that the next engineer can change it without dread. Polish, for me, isn't a finishing pass. It's the discipline of refusing to ship the version where any of those four are still negotiable.
Tools
Most of my product code is TypeScript and React, usually inside Next.js, because the feedback loop from idea to deployed thing is the shortest I've found. I also build backend services and systems work in Go, Node.js, Python, and C++17, with REST, WebSocket, SSE, PostgreSQL, Docker, AWS, GitHub Actions, and CI/CD where the product needs real operational shape. State sits in whichever tool best fits the problem — Zustand for local product state, TanStack Query for server state, and the URL itself for anything a user should be able to share or bookmark.