10 Years Building Web Apps
What stuck with me after a decade shipping on the web.
I've spent the last decade building web apps—mostly small, sometimes scrappy, shipped more often than not. I like a modern stack; I bet on Next.js and Vercel—they're pushing the web forward, and that gives me leverage. I’ve shipped and operated production sites and games like SongTrivia (200K+ monthly players, real‑time multiplayer, multi‑tenant). The simple choices outlasted the clever ones. Here are the bits that still hold up when the budget is real and the clock is ticking.
TL;DR
- Boring stack; small, reversible changes; logs/metrics first.
- Next.js on Vercel;
- Monorepo + strict TypeScript; monolith by default.
- Convex + Better‑auth for real‑time; momentum > perfection.
What worked for me
- Monorepo everything (UI, utils, types) → less duplication, more consistency.
- Strict TypeScript → safer refactors, fewer bugs.
- Refactor continuously based on demand and cash flow.
- Keep code small and simple; avoid reinventing wheels.
- Prefer monoliths on Next.js.
- Keep infra simple: Vercel/Railway.
- Prefer readable over clever code.
- Logs/metrics first; then debug.
- Ship small, reversible changes; skip big‑bang refactors.
What didn’t work
- Premature abstractions and “platforms” no one reused.
- Over‑modeling; simple data + clear invariants aged better.
- Heroics; systems beat solo sprints.
My current toolkit
- Monorepo + shared packages.
- TypeScript strict mode: no
any
, real guards, exhaustive checks. - Shared ESLint config for consistency.
- Next.js monolith on Vercel; streaming where it helps.
- Vercel/Railway deployment.
- Better-auth + Convex DB (real-time; simpler than Postgres/Supabase).
- Test only where failure is expensive.
My four priorities: speed, maintainability, performance, security
I focus on keeping codebases as small as possible to prioritize these four pillars. In today's AI world, you need to ship fast and switch direction fast. A small, focused codebase lets you pivot quickly when the market demands it.
A note on momentum
Momentum is underrated. I learned that keeping the main loop tight (ship → observe → adjust) beats perfect planning. When I keep cycle time low, everything else gets easier.
I'll keep adding to this as I learn (and unlearn) more.
If you want more like this, see the Building category.