Filtyr AI
← Back to blog

Why I Build Everything with TypeScript and Supabase

Every stack decision is a bet on speed. Not just runtime speed — speed of development, speed of debugging, speed of hiring, speed of changing your mind three months in. After years of trying different combinations, I keep coming back to the same core: TypeScript, Next.js, and Supabase. Here's why.

TypeScript catches the bugs that matter. I'm not a type purist. I don't write TypeScript because I think dynamically typed languages are bad. I write it because the bugs I care about — wrong shapes flowing through APIs, mismatched database types, undefined sneaking in from a third-party response — are exactly the bugs TypeScript catches at build time. When you're moving fast and shipping weekly, a type error at compile time is worth ten times more than the same bug caught in production at 2 AM.

Supabase gives you Postgres without the ops tax. I've run my own Postgres clusters. I've managed RDS instances. I've set up pgBouncer and handled connection pooling drama. Life is too short. Supabase gives me a real Postgres database with Row Level Security, real-time subscriptions, edge functions, and auth — all without me thinking about infrastructure. When a client needs a new feature that touches the database, I'm writing a migration and a query, not provisioning servers.

Next.js is the right default for most products. Server components, API routes, static generation, edge middleware — it handles the full spectrum from marketing site to complex app. I've shipped landing pages, dashboards, multi-tenant SaaS apps, and API backends all in Next.js. The ecosystem is massive, Vercel's deployment is zero-config, and when I need to do something weird, the escape hatches are there.

The real advantage is consistency. When every project uses the same stack, I'm not context-switching between languages, ORMs, deployment pipelines, and auth systems. I know exactly where to find things. I know the failure modes. I know the performance characteristics. That consistency compounds — each project I ship makes me faster on the next one. I'm not learning a new framework; I'm deepening my expertise with the one I already know.

When I don't use this stack. This isn't a religion. If a client needs Python for ML pipelines, that's Python. If something needs raw performance, I'll reach for Go or Rust. But for the 80% of products that are "web app with a database, some AI, and a need to ship fast" — this stack is unbeatable.