Boring Technology Wins
The most successful software projects we've delivered share a common trait: they used well-understood, well-supported technology. Not the newest framework. Not the most hyped database. The tools that simply work.
Here's our current production stack.
Frontend
Next.js 14 — App Router, server components, and built-in optimisation make this our universal choice. We've tried the alternatives and keep coming back.
TypeScript — Non-negotiable. Type safety prevents more bugs per hour written than any other practice.
Tailwind CSS — Utility-first. Consistent. Fast to write. We've tried CSS-in-JS extensively; Tailwind is better for team velocity.
Framer Motion — Animation library that handles everything from page transitions to complex gesture interactions.
Backend
Node.js + Express or Next.js API Routes — depending on whether we need a separate service.
Prisma — Type-safe ORM that generates TypeScript types from our schema. No raw SQL unless optimisation requires it.
PostgreSQL — On Supabase for managed hosting. Reliable, powerful, scales well.
Redis — Caching and job queues. We use it for any operation that shouldn't block the request cycle.
Auth
NextAuth.js — Handles sessions, JWT, OAuth, and credentials. We've evaluated Auth0, Clerk, and custom solutions. NextAuth wins for Next.js projects.
Infrastructure
Vercel — For Next.js deployments. DX is unmatched.
Supabase — PostgreSQL + Storage + Auth as a service. Replaced Firebase for us entirely.
Cloudflare — DNS, CDN, and DDoS protection for every production domain.
This stack is not exciting. It is reliable. In client work, that's what matters.