Uses
Stack and tooling
What I reach for when building production systems. Updated as the stack evolves.
Core
- TypeScript — primary language for new code, strict mode, schema-first when it saves regressions.
- React + Next.js— App Router, RSC-first, client islands only when needed.
- Node.js — server-side runtime; ESM, native fetch when possible.
- SQL — PostgreSQL preferred, Prisma or Drizzle for typed access, handwritten SQL when the query is the design.
- GCP / GKE — Kubernetes for production workloads, Helm charts for delivery.
Frequently reached for
- Redis for caching and rate limiting; Elasticsearchfor search; Supabasewhen Postgres + auth + storage shipped together is the right tradeoff.
- Stripe for payments and subscriptions; verifying webhooks server-side, never trusting client state.
- OAuth + JWT + PKCEfor auth flows; HTTP-only cookies for session tokens; explicit consent for refresh.
- Tailwind CSS — utility-first, no parallel CSS system, design tokens via CSS variables.
- Astro for content-first sites where React would ship too much JS.
Editor and terminal
- VS Code or Cursor depending on the day.
- Terminal: zsh, with a minimal prompt. Most workflow lives in the shell.
- Linting: ESLint with strict boundaries, Prettier with organize imports.
- Tests: Vitest for unit, Playwright for end-to-end on critical flows only.
Operating practices
- Build it, run it.If I ship it, I'm on call for it. Observability and logs first, UI polish second.
- Async, written first.RFCs and decision logs as a side effect of the work.
- Many small files.One exported symbol per file, explicit imports, no helpers hiding inside components.