Uses
What I use.
The tools I open every day. Editor, AI workflow, default stack, infrastructure. Nobody paid me to list any of this.
VS Code
Default editor. Dark theme, minimal UI, no exotic setup — the config should survive a laptop swap in ten minutes.
ESLint + Prettier
Formatting and lint arguments are decided by machines so humans can argue about architecture instead.
Tailwind CSS IntelliSense
Non-negotiable once a project uses Tailwind; class strings without it are write-only.
GitLens + Error Lens
Blame context inline and errors where the eyes already are. Small tools, large minutes saved.
AI tools are part of the daily workflow, but always inside guardrails — the same deterministic-first philosophy as the projects.
Claude Code
Primary coding agent for implementation work and refactors. Treated like a very fast junior: clear mandate in, reviewed diff out.
Codex CLI + Fencier
Agent runs are wrapped in my own guardrail tool — policy checks, scope verification and audit trails on every diff. Dogfooding as QA.
OpenAI API
The model layer inside products (Medbay, Georgie on this site). Constrained calls, schema-validated outputs, budget caps.
LangGraph
For agent systems where the control flow deserves to be a real graph instead of a prompt hoping for the best.
The boring-on-purpose foundation most of my projects start from.
TypeScript everywhere
One language across frontend, backend and tooling. Type errors are the cheapest bugs you will ever fix.
Next.js + React
App Router, server components where they pay off. The framework carries routing, rendering and deployment concerns I refuse to own.
PostgreSQL
The default answer to storage questions. Row-level security, real constraints, and it will outlive every trendy alternative.
Zod
Every boundary — API input, model output, env vars — gets a schema. Untrusted data is a category, not an exception.
Chosen with the allocator's rule: pay managed-service premiums to buy back founder-time, self-host only what differentiates.
Vercel
Hosting that scales to zero and deploys on push. The infra bill stays a rounding error until there is real usage.
Supabase
Managed Postgres with auth and row-level security included — an entire backend team's worth of undifferentiated work, rented.
Redis + BullMQ
For event-driven systems like CareLoop: deterministic job IDs, retries and queues that can be inspected when things go wrong.
Docker
For anything that must run the same on my machine, a client's server and CI. Not for cosplaying Google-scale ops.