faw

swe

Why I Built mf2

February 24, 2026


Every SaaS I've built starts the same way: pick a database, pick auth, pick payments, pick email, wire them all together, and two weeks later I still haven't written a single line of business logic.

So I built mf2. One command gives you a full Turborepo monorepo with 6 apps, 20+ packages, and everything pre-wired: Convex, Clerk, Stripe, PostHog, Sentry, Resend, Vercel AI SDK, Arcjet.

npx create-mf2-app@latest

You're building features on day one instead of day fourteen.


The agent problem

I use Claude Code and Cursor for most of my coding, and they write good code when they can see the full picture. They break when half your config lives in a Supabase dashboard or an Auth0 admin panel they can't access.

Theo Browne said it well: "when everything in your codebase is a file, not some weird config in some dashboard, AI is way better at it."

That's the core idea behind mf2. If it's not in a .ts file, your agent can't use it. Every package exports typed interfaces, so when Claude sees import { auth } from '@repo/auth', it follows the import, reads the types, and writes correct code without guessing.

I watched Claude work with a Supabase project where half the auth config lived in the dashboard, and it hallucinated table schemas and guessed at RLS policies it couldn't see. In mf2, the schema is convex/schema.ts and the agent reads it directly, so those errors just vanish.


Why Convex

This is the biggest departure from the typical stack, because there's no Postgres, no Prisma, no Drizzle, and no migrations.

Convex is a TypeScript-native database where you define your schema in a .ts file, it generates the types, and queries react by default. The entire data layer is source code.

The tradeoff is that there's no raw SQL. If your team thinks in SQL, Convex is the wrong choice. But for a SaaS that needs real-time data, typed queries, and zero migrations, nothing else comes close.


What's next

mf2 is a web monorepo today, but next up is React Native + Expo for mobile, Electron for desktop, and Plasmo for browser extensions. One backend, many platforms, same shared packages.

We're building Cleve.ai on this stack, and if it works for a template it works for production.

npx create-mf2-app@latest my-app
cd my-app
bun run dev

Open source. If something's broken, open an issue.


February 24, 2026