Skip to main content

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.