The Tech Stack I Use for SaaS MVPs and Why

A practical, experience-based breakdown of the frameworks, database, payment providers, and hosting setup used to ship SaaS MVPs, and the reasoning behind each choice.

Hilmi
Hilmi
||10 min read
The Tech Stack I Use for SaaS MVPs and Why Cover Visual

Why the topic matters

I get asked about my stack more often than I get asked about pricing, and I understand why. Picking a tech stack for a SaaS MVP feels like a decision you cannot undo. Founders read stack comparison threads until 2 AM, worried that one wrong pick will lock them into six months of rework.

Here is what turns that anxiety into a plan: the stack is not the product. The stack is a tool for shipping the product fast enough to learn whether anyone actually wants it. After building MVPs across retreat booking platforms, white-label booking systems, internal automation tools, and a handful of marketplace-adjacent products, I keep coming back to the same small set of tools. Not because they are trendy, but because they remove friction at the exact points where early-stage products usually get stuck: authentication, payments, multi-tenancy, and speed of iteration.

This is not a "best stack" ranking. It is the reasoning I actually use on every new MVP, including which tool I skip and when.

Context and assumptions

This breakdown assumes a B2B or B2C SaaS product built by a small team, one to three developers, that needs to launch within eight to twelve weeks and validate real demand. It also assumes the product will eventually need to handle payments, multiple tenants or organizations, and at least one third-party integration.

The right stack for an MVP is not the one with the most features. It is the one that lets you replace guesses with real user data as fast as possible.

If you are building something with heavy compute requirements, such as video processing, large-scale model training, or real-time multiplayer systems, some of these choices will not apply directly. This is written for the far more common case: a business tool that reads data, writes data, moves money, and needs to look trustworthy from day one.

The short answer

If someone asks me for the one-line version, it is this: Laravel with Livewire and Filament for internal-heavy or admin-heavy SaaS, Next.js with TypeScript and Supabase for customer-facing products that need a more custom or interactive frontend. PostgreSQL sits underneath both. Stripe handles international billing, while Midtrans or Xendit take over when the primary market is Indonesia. DigitalOcean or a managed platform covers hosting, with Cloudflare in front of everything.

The rest of this article explains why, and where each choice tends to break down.

Backend: Laravel first, unless the frontend needs to lead

Laravel is still my default starting point for most SaaS MVPs, and the reason is not familiarity. It is that Laravel ships with the boring, unglamorous parts already solved: authentication scaffolding, queues, scheduled jobs, database migrations, form validation, and an ORM that does not fight you. None of that is exciting to build, and none of it should be, because it is not what makes your product valuable. It is infrastructure you need out of your way, not a feature users will ever notice.

When I pair Laravel with Livewire and Filament, I can build a working admin panel, a settings page, and a CRUD-heavy internal tool in a fraction of the time it would take to hand-build the same thing as a separate API plus a React frontend. For SaaS products where the "product" is largely operational, think internal tools, client portals, dashboards, or approval workflows, this combination lets me skip an entire API layer and a separate frontend build step. Fewer moving parts means fewer places for an MVP to break during a demo.

I reach for Next.js with TypeScript instead when the frontend itself is the product. If the MVP needs a highly interactive booking calendar, a real-time dashboard, a public marketing site with strong SEO requirements, or an interface that needs to feel closer to a native app than a form-heavy backoffice tool, Next.js earns its extra setup cost. App Router plus TypeScript gives me route-level control, easier SEO metadata handling, and a component structure that scales better once the frontend has real complexity.

The mistake I see most often is choosing the frontend-heavy stack out of habit, even when the actual MVP is eighty percent forms and tables. That decision alone can double build time without adding anything the user will notice.

Frontend: match the complexity, not the trend

A quick way to decide: if you can sketch the entire interface as a series of forms, tables, and settings pages, Livewire and Filament will get you there faster, with less code to maintain long term. If the interface needs custom interactions, state that updates in real time, or a design that has to feel polished on both desktop and mobile from day one, Next.js paired with a component approach built on Tailwind CSS is worth the extra setup.

Tailwind CSS shows up in both stacks for the same reason: it removes the need to name, maintain, and clean up a separate CSS file for every component, which matters a lot when the UI is still changing weekly based on early user feedback.

Database: PostgreSQL, almost without exception

I default to PostgreSQL for every SaaS MVP regardless of which backend framework is doing the work. The reasoning is simple: PostgreSQL handles relational data well, supports JSON columns when semi-structured flexibility is needed, and scales further than most MVPs will ever require before a migration becomes worth considering. Switching databases later because the original choice was too limited is a far more expensive mistake than starting with something that can grow alongside the product.

When the product is built on Next.js, I usually reach for Supabase specifically, not just for the PostgreSQL instance, but for what comes bundled with it: authentication, row-level security for multi-tenant data isolation, storage, and a generated API that saves real time in the first few weeks. Row-level security matters more than people expect at MVP stage. It means tenant data isolation is enforced at the database layer, not just in application code, which removes an entire category of "we forgot a WHERE clause somewhere" bugs before they can ever happen.

For Laravel projects, plain PostgreSQL managed through the framework's own migration and Eloquent tooling is usually enough, since Laravel already covers authentication and authorization without needing an external layer for it.

Payments: pick based on the market, not the framework

This is where I see the most confusion from founders building for Indonesia while reading advice written for the US market. Stripe is the correct default when customers pay in USD or EUR and the product needs subscription billing, invoicing, and strong developer documentation. It is not the correct default when the primary customers are Indonesian businesses paying in Rupiah.

For an Indonesian or Southeast Asian market, I use Midtrans or Xendit instead. Both support local payment methods that actually matter to that customer base, such as virtual accounts, e-wallets like GoPay and OVO, and QRIS, none of which Stripe supports directly in that region. Getting this wrong is not a minor detail. The payment integration can work perfectly and the checkout page can still convert at zero, simply because it never offered a payment method the target customer actually uses. (I can help you build this—see my SaaS development services).

The decision, in short: match the payment provider to where the money is actually coming from, not to which provider has the nicest documentation.

Hosting and infrastructure: keep it boring on purpose

For hosting, I lean on DigitalOcean for most MVPs that need a real server, Laravel apps, background workers, scheduled jobs, and a managed platform for the frontend when Next.js is doing the heavy lifting. Cloudflare sits in front of nearly everything I ship, handling DNS, basic protection, and caching, because it costs almost nothing to set up and removes an entire category of "why is the site down" problems before they start.

I do not reach for Kubernetes, multi-region deployment, or complex container orchestration at MVP stage, even when a client asks for it out of a sense that "serious" software needs serious infrastructure. An MVP with twelve users does not need infrastructure built for twelve thousand. That complexity can wait until the product has usage patterns worth optimizing for. Building it earlier just slows down the one thing that matters most at this stage, which is shipping something real users can react to.

Where AI and LLM integration actually belongs

AI features are increasingly part of MVP scope, and the mistake I see most is treating "add AI" as a single checkbox rather than a specific feature with a specific job. When I add an LLM integration to an MVP, it is usually solving one narrow task well, such as summarizing a support ticket, generating a first draft of a report, or classifying incoming data, rather than being framed as a general assistant bolted onto the product. A narrow AI feature is easier to test, easier to explain to a user, and easier to judge as actually working. A vague one is hard to evaluate and even harder to improve.

A simple decision framework

SituationMy default pickWhy
Product is mostly internal tools, dashboards, or CRUD-heavy workflowsLaravel + Livewire + FilamentFastest path to a working admin-style product in one codebase
Product's core value is the frontend experience itselfNext.js + TypeScript + SupabaseBetter control over interactivity, SEO, and component structure
Customers pay in USD or EUR with subscription billingStripeBest documentation, strong subscription tooling
Customers pay in IDR and need local payment methodsMidtrans or XenditSupports e-wallets, virtual accounts, and QRIS that Stripe does not
Need multi-tenant data isolation fastSupabase with row-level securityIsolation enforced at the database layer, not just in app code
Hosting for an MVP with uncertain trafficDigitalOcean + CloudflarePredictable cost, low setup overhead, enough headroom to start

Common mistakes

The pattern I see most often is founders, and even other developers, choosing a stack based on what is popular on social media rather than what the actual MVP needs. A Next.js and Supabase stack gets recommended constantly, and for good reason, it is genuinely strong. But recommending it for a product that is essentially an internal admin tool with three user roles and a handful of settings pages adds unnecessary frontend complexity for zero added value to the end user.

The second common mistake is defaulting to Stripe for an Indonesian market product simply because every tutorial online uses Stripe. The integration itself will work fine. It is the customer's preferred payment method that will not be there.

The third mistake is over-investing in infrastructure before the product has proven anyone wants it. Multi-region failover and horizontal auto-scaling are solutions to problems an MVP does not have yet.

Frequently asked questions

Is Laravel or Next.js better for a SaaS MVP?

Neither is universally better. Laravel with Livewire is faster to ship for admin-heavy or workflow-heavy products, since it avoids building a separate frontend and API. Next.js is the better choice when the frontend's interactivity or design is central to the product's value.

Should I use Stripe for a SaaS MVP built for Indonesian customers?

Not as the primary or only option. Stripe does not directly support common Indonesian payment methods like QRIS, GoPay, or local virtual accounts. Midtrans or Xendit are better defaults for that market.

Do I need Kubernetes or complex infrastructure for a SaaS MVP?

No. A single well-configured server through DigitalOcean, or a managed platform, combined with Cloudflare in front of it, is enough for the traffic levels most MVPs see in their first months.

Is Supabase good enough for a real product, or just a prototyping tool?

It is production-capable, not just for prototypes. Row-level security handles multi-tenant data isolation properly, and the underlying database is standard PostgreSQL, so there is a clear upgrade path as the product grows.

Key takeaways

  • Match the backend to how the MVP actually behaves: Laravel and Livewire for workflow-heavy internal tools, Next.js for products where the frontend experience is the value.
  • Default to PostgreSQL, and use Supabase specifically when authentication and multi-tenant data isolation are needed from day one.
  • Choose payment providers based on where the customer's money actually comes from, not based on what tutorials recommend.
  • Keep infrastructure boring and inexpensive until real usage tells you it needs to change.
  • If AI features are part of the scope, keep them narrow enough that you can actually tell whether they work.

The stack I use today is not the stack I used three years ago, and it will likely change again. What has not changed is the question I ask before every decision: does this choice help ship something a real user can react to within the next few weeks, or does it just feel more serious?

Working through a similar product or engineering decision?

Tell me what you are building and where the uncertainty is. I help founders clarify product requirements and translate them into a scoped, reliable technical plan.

Discuss Your Project