Tech Stack
The default kit I ship with, and the few places a product needs something else.
Most of the work is the same shape: a Next.js app, live data, auth, an AI surface, and a Vercel deploy. I keep that kit small on purpose. Complexity only earns its place when the product needs it.
The default
- App — Next.js App Router, React, TypeScript, Tailwind CSS
- Data — Convex when the product is live and collaborative
- Auth — Clerk
- AI — Vercel AI SDK over OpenAI
- Ship — Bun, Vercel, Git, Cursor
Trip Timelines, What To Get Me, ScratchLists, and SkyDunes all sit on that pattern. This site keeps the writing in git and uses Convex only for live bits — reactions now, files later if a post needs them.
Where it changes
- Postgres and Prisma on Local Community Hub, where communities, imports, and admin tools want a relational schema.
- WorkOS on ExplainBack, because learners, guardians, and organisations are not a single Clerk user.
- Polar for ExplainBack billing; Stripe for Local Community Hub credits and setup fees.
- Expo when there is a phone app — What To Get Me and ScratchLists.
- vgpu and WebGPU for the T on this homepage. Fancy lighting is not a product requirement everywhere.
I would rather repeat a boring stack than invent a new one for each idea.
Across the products
Distinctive choices from the project writeups — not every shared default.
Convex
Carmichaelt · Trip Timelines · What To Get Me · ExplainBack · ScratchLists
AI SDK
SkyDunes · Trip Timelines · What To Get Me · Local Community Hub
Clerk
Expo
Markdown
OpenAI
Polar
PostgreSQL
Prisma
Stripe
vgpu
WebGPU
WorkOS