What I work with.
A snapshot of the tools and technologies I use day-to-day. Not every item is equally fresh — some I live in, others I’ll happily pick up again when a project calls for them.
Frontend
HTML, CSS, JavaScript
The foundation. Everything else I use is built on top of this.
React & Next.js
My default way to ship a product. Fast to build with, and the ecosystem means there’s a well-worn path for almost anything I need.
TypeScript
I like knowing what shape my data is before it breaks. Strict mode on, every project.
Tailwind CSS
Styling I can maintain six months later without scrolling through a sea of class names I invented once and forgot.
Backend
Node.js
Runtime for almost everything I build server-side these days.
Hono
Lightweight web framework for Node. Great fit when I want a dedicated API service rather than stuffing it into Next.js.
Next.js API routes
The path of least resistance when the backend lives next to the frontend.
Java & Spring Boot
What I spent five years building enterprise APIs with. Still useful context, even if I’m not reaching for it day-to-day now.
Data & databases
Drizzle & Prisma
The two ORMs I alternate between depending on the project. Both play well with TypeScript.
SQL
Underneath the ORM, it’s still SQL. Happy to drop down when the abstraction starts getting in the way.
Zod
Validation at every integration point. If data crosses a boundary, it gets a Zod schema before anything downstream touches it.
JSON
The default wire format between clients and servers. Unglamorous but essential.
Infrastructure & DevOps
Vercel
Where most of my apps live. Deploys are fast and I don’t have to think about servers.
TurboRepo
For keeping multi-package projects sane. Builds and task running that scale with the codebase.
Git
Version control and branching. The boring essential.
Third-party services
BetterAuth & Clerk
Auth is a solved problem now — I use whichever fits the project. BetterAuth when I want self-hosted control, Clerk when I want to be done by lunch.
Stripe
Payments. Nothing else comes close for indie-scale projects.
Resend
Transactional email that just works, with an API I actually enjoy using.
AI tooling
Claude Code
Runs in my terminal and handles scaffolding and refactors, plus the long tail of boring edits across files.
Cursor
My editor. The AI context integration is what keeps me there instead of plain VS Code.
Model selection
I’ll bounce between Claude, Gemini, and OpenAI models depending on the task. Different models are good at different things, and it pays to know which is which.