Skip to content
MSM
11 min readMichael Schmidt

The MSM stack, explained: why Next.js + Supabase + Cloudflare + local Ollama

Draft — Michael review required

{{DRAFT — Michael review required}} Ghostwritten by Claude Code in Michael's voice.

I don't believe in "best stacks." I believe in a stack that you, the person running it, can hold in your head. Here's mine.

The defaults

Next.js 15, App Router, React 19. Not because it's fashionable; because its primitives — server components, PPR, streaming — solve real problems I used to solve by hand.

TypeScript strict. End-to-end. Anywhere the wire could be wrong, types catch it before a pager goes off.

Tailwind v4. Utility CSS is the one opinion I've never regretted. v4 moves the config to CSS, which removes a whole class of "why isn't my theme loading" headaches.

Supabase. Postgres I don't have to run. Auth I don't have to write. Storage I don't have to tune. For 98 out of 100 projects, this is enough.

Cloudflare. DNS, cache, Workers, R2. The cheapest serious CDN with a programmable edge. Small studios live or die on their edge story; mine doesn't die here.

Netlify for most frontends, DigitalOcean for apps that need a real server. The split is boring and correct.

Resend for transactional email. Klaviyo for marketing email. Separating them is a surprisingly meaningful quality-of-life call.

The AI layer

Claude (Anthropic) for client-facing AI. Sonnet 4.5 for nuanced work, Haiku 4.5 for cost-sensitive chatbots. The Anthropic SDK is clean, the streaming API is well-designed, and the company takes alignment seriously — which matters when you're deploying to a client whose lawyers read your T&Cs.

Ollama for local / private work. Right of Safety (patent-sensitive) runs on Qwen locally. Nothing confidential leaves the machine.

Claude Code for the build itself. Addressed at length in the other post.

What I don't reach for

  • Firebase. Supabase is better for my kind of work. Moving on.
  • Vercel. Netlify does the same thing for less money, and pushing against vendor gravity is a healthy habit.
  • Prisma on small projects. The generated types are nice, but for a ten-table schema it's overhead. @supabase/ssr + generated types from the Supabase CLI is often enough.

The real answer

The stack matters less than the ability to ship through it. Every stack is hollow until you're fluent. I'm fluent in this one. I'd be slower in yours.


Next up: what I learned building a PWA into a home-inspection site.

#stack#architecture