Brett Calhoun

5 min

How to Pick a Modern Tech Stack for Your MVP

Brett Calhoun

5 min

How to Pick a Modern Tech Stack for Your MVP

Our Head of Engineering at RedbudVC put together the best MVP stack breakdown I’ve ever seen and I’m sharing it with you because founders ask me about this constantly…

I don’t believe in one default MVP stack.

A good MVP stack depends on the product, the founder, the team, the market, and what needs to be proven first. There are many tools now, and choosing casually can be expensive later because switching stacks is painful once product logic, data, authentication, permissions, and user workflows are built around it.

You shouldn’t ask yourself: “Next.js or React Native?”
But instead: what are we building, and where will users experience most of the value?

There are generally three components in an application:

  1. Frontend

  2. Backend

  3. Database

Selecting the base for each component is crucial to the success of an application. There is a balance between speed, time to value, and scalability. In the new age of AI, engineers are architects not coders. 

Mixing languages across your stack is like trying to speak two different languages in the same conversation. 

The biggest mistake I made as a young engineer was having a Python backend and a React frontend. I didn’t need Python, I could’ve just used Node.js. If I would’ve done that, I would’ve saved hundreds of hours on syncing the shape of the data between the two. 

Step 1: Web, Mobile, Or Both?

This usually decides the frontend direction.

If the product is mobile-first, I’d usually choose:

React Native + Expo

Expo is strong for MVPs because it lets you move fast, ship to iOS and Android, avoid a lot of native complexity, and still escape into native code later if needed.

If the product is web-first, I’d usually choose:

Next.js

Next.js is still one of the best choices for serious web apps because you get routing, server rendering, API routes/server actions, deployment options, and a large ecosystem.

If the product needs both web and mobile, I’d split it based on how important each platform is.

If web is secondary, I might use:

Expo + Expo Web

It can be a little funky, but for internal tools, companion dashboards, or lower-traffic web needs, it can work just fine.

If both web and mobile are important, I’d use:

  • Turborepo

  • Next.js for web

  • Expo for mobile

  • Shared packages for business logic, types, validation, API clients, utilities

That gives you native-quality mobile and proper web, while sharing the parts that shouldn’t be duplicated.

I generally would not start with native Swift/Kotlin unless the product truly requires deep native behavior, heavy device integrations, custom performance needs, or platform-specific UX that React Native cannot reasonably handle.

Step 2: Database Choice

For 90% of MVPs, I’d start with SQL (Postgres) hosted on either Supabase or Railway.

Most business apps are relational: users, teams, permissions, payments, inventory, tasks, records, etc. SQL fits that world very well.

For ease and speed, I like Supabase, especially when you want authentication, storage, migrations, dashboards, and Postgres together.

But I’m more cautious now about building the entire app around directly querying Supabase from the frontend with heavy RLS (Row Level Security). It works, but it can get complicated as product logic grows. RLS has to check permission for each row that you are getting, so it can make each query slower. When building bigger applications, RLS can get very hard to maintain, and if you don’t think of edge cases, it could potentially leak a lot of private data.

My current preference is:

Frontend -> Backend API -> Database

The backend owns permissions, business logic, and database writes. The database is not directly queryable by random frontend clients.

If you don’t want SQL, there’s another option. For more realtime, flexible, less structured apps, I’ve started to like:

Convex

Convex is especially interesting when the product needs fast realtime updates, reactive data, collaborative flows, or more flexible document-like data. The tradeoff is more vendor lock-in compared to plain Postgres.

Step 3: Backend

For TypeScript-heavy products, I like:

Hono

Hono is lightweight, fast, and simple. It works well for deterministic API endpoints where each endpoint does one clear job.

For Python-heavy products, I like:

FastAPI

I prefer Python when the product involves scraping, automation, AI agents, or hardware-intensive background jobs.

A common setup I like:

Turborepo

apps/web  -> Next.js

apps/mobile  ->  Expo

apps/api  ->  Hono or FastAPI

packages/shared  ->  types, schemas, utilities, domain logic

packages/db  ->  database client, migrations, query helpers

This keeps everything in one repository while allowing each app to evolve properly.

Step 4: Avoid Lock-In Where Possible

One thing I care about a lot: can I leave this platform later?

For MVPs, managed services are great because they save time. But I prefer tools that have a credible escape path.

Good examples:

  • Postgres

  • Next.js

  • React Native

  • FastAPI

  • Hono

  • Docker

  • S3-compatible storage

  • Supabase

  • Convex

These are easier to move, self-host, or replace later.

More proprietary platforms can be worth it, but you need to know what you’re accepting. Vendor lock-in is not automatically bad, but accidental lock-in is.

The key question is:

If this product works, will this stack still make sense at 10x usage, 10x complexity, and 10x team size?

Scenario 1: Technical Founder

For a technical founder, I’d optimize for long-term control without slowing the MVP too much.

Suggested default:

Web-first:

  • Next.js

  • Postgres / Supabase

  • Hono or Next.js server-side backend

  • Turborepo if there are multiple apps/packages

  • Vercel/Fly.io/Railway/Render for hosting

Mobile-first:

  • Expo

  • Postgres / Supabase

  • Hono or FastAPI backend

  • Shared TypeScript packages where useful

A technical founder can handle more complexity, so I’d be more comfortable setting up a proper monorepo, clean API boundaries, migrations, shared types, and a solid backend early.

I would avoid over-engineering, but I would not build something disposable either. The MVP should be fast, but don’t create a foundation you hate three months later.

For technical founders, the best stack is usually:

boring core technology + strong architecture + room to scale

Scenario 2: Non-Technical Founder

For a non-technical founder, the priority changes.

The stack should optimize for:

  • speed

  • maintainability

  • availability of developers

  • low operational burden

  • clear documentation

  • easy handoff

I would avoid obscure tools, overly clever architectures, and anything that only one specialist knows how to maintain.

Suggested options:

Web app:

  • Next.js + Supabase + Vercel

Mobile app:

  • Expo + Supabase

Internal tool / admin-heavy MVP:

  • Retool, Airtable, Bubble, Softr, or a lightweight custom Next.js app

For non-technical founders, I’d be careful with no-code. No-code can be excellent for validating demand, workflows, and internal operations. But if the product itself is software with complex logic, permissions, integrations, or custom UX, no-code can become a trap.

A good rule:

Use no-code to validate the business, and use software to solidify it.

For a non-technical founder, I’d usually recommend a stack that many agencies and freelancers can understand. Next.js, Supabase, Expo, Stripe, and Postgres are easier to hire for than niche frameworks.

Final Take

The best MVP stack is not always the trendiest.

It is the stack that lets you test the riskiest assumption quickly while still giving you a path to become a real product if the MVP works.

For me, that usually means:

  • Next.js for serious web apps

  • Expo for serious mobile apps

  • Postgres for most data

  • Hono for lightweight TypeScript APIs

  • FastAPI for Python-heavy workflows

  • Turborepo when there are multiple apps or shared logic

The biggest mistake is choosing technology before understanding the product. The second biggest mistake is choosing tools that feel fast today but make the company slower tomorrow.

No-code lets you understand your product before you build it. Don't commit to a stack until you know what you're actually building.

related posts

Build with us in any climate.

Start your building journey with a team that appreciates the struggle

Build with us in any climate.

Start your building journey with a team that appreciates the struggle

Build with us in any climate.

Start your building journey with a team that appreciates the struggle