Stack
What I build with
The AI I build with and the stack I ship on, layer by layer. Hover or tap a tile in the game to see what it is for, and catch the dino if you can.
My pair-programmer - I build most things here now.
The model behind Claude Code when I build.
Where I talk a problem through before building.
A second opinion when a fix gets stubborn.
A minimal agent harness that runs any model.
Inline, context-aware edits when my hands are on the keys.
Generation pipelines and structured outputs.
Long-context summarization in my extensions.
Local speech-to-text (powers Scribe).
Local text-to-speech (one of the voice engines in my VoiceDock extension).
Models and datasets to pull from.
Every web app I make starts here.
The UI layer under all of it.
Strict mode everywhere.
Styling right in the markup.
Validates forms and API input, typed end to end.
Accessible components I own and restyle.
Fast builds for my apps and extensions outside Next.js.
A full relational database when SQLite is not enough.
SQLite at the edge for my apps.
Type-safe queries, checked against the schema.
Auth and realtime data for quick builds.
Cloud hosting and storage when a project needs it.
Google APIs and cloud services.
Push to main and it ships.
R2 file storage and Turnstile spam checks.
The CMS behind my blog.
Redis for rate limits and the dino scores.
Drop-in sign-in and user management.
Sign-in for Next.js apps I host myself.
Tells me when something breaks in production.
Visitor numbers, only with consent.
End-to-end tests in five browsers.
CI on every pull request.
Lint that fails the build on any warning.
One code style, never argued about.
Small commits, every change on a branch.
Mockups before the code, when a design needs it.
I constantly try to improve
My tech stack
AI agents and models
Who I build with, and the models inside what I build.
Claude Code
My pair-programmer - I build most things here now.
Claude Opus 5.5
The model behind Claude Code when I build.
ChatGPT
Where I talk a problem through before building.
Codex
A second opinion when a fix gets stubborn.
Pi
A minimal agent harness that runs any model.
Cursor
Inline, context-aware edits when my hands are on the keys.
OpenAI
Generation pipelines and structured outputs.
Gemini
Long-context summarization in my extensions.
Local AI
Models that run on your own machine.
whisper.cpp
Local speech-to-text (powers Scribe).
Piper
Local text-to-speech (one of the voice engines in my VoiceDock extension).
Hugging Face
Models and datasets to pull from.
Frontend
The web apps themselves.
Next.js
Every web app I make starts here.
React
The UI layer under all of it.
TypeScript
Strict mode everywhere.
Tailwind CSS
Styling right in the markup.
ShadCN
Accessible components I own and restyle.
Zod
Validates forms and API input, typed end to end.
Vite
Fast builds for my apps and extensions outside Next.js.
Data
Where the data lives, and how it is queried.
PostgreSQL
A full relational database when SQLite is not enough.
Turso
SQLite at the edge for my apps.
Drizzle
Type-safe queries, checked against the schema.
Firebase
Auth and realtime data for quick builds.
Sanity
The CMS behind my blog.
Upstash
Redis for rate limits and the dino scores.
Hosting and cloud
Where it runs.
Vercel
Push to main and it ships.
Cloudflare
R2 file storage and Turnstile spam checks.
AWS
Cloud hosting and storage when a project needs it.
Google Cloud
Google APIs and cloud services.
Sign-in
Accounts, done properly.
Clerk
Drop-in sign-in and user management.
NextAuth
Sign-in for Next.js apps I host myself.
Quality and shipping
How it stays working.
Playwright
End-to-end tests in five browsers.
GitHub Actions
CI on every pull request.
ESLint
Lint that fails the build on any warning.
Prettier
One code style, never argued about.
Git
Small commits, every change on a branch.
Sentry
Tells me when something breaks in production.
Google Analytics
Visitor numbers, only with consent.
Design
Before the code, when it needs it.
Figma
Mockups before the code, when a design needs it.
