SaaS Boilerplate

SaaS Boilerplate Cost Breakdown: 847 Hours vs $299 — The Real Build vs Buy Math

847 hours to build a SaaS boilerplate from scratch, $0–$299 to buy. Real per-module math, the 4 pricing models, and where each wins or loses.

Huifer
Huifer
May 28, 20269 min read
Also available in:Deutsch · 中文

Written by Huifer, solo developer and maintainer of TanStack Ship. I have been timing my own SaaS boilerplate builds since 2023 across 12 production apps. For this post I went back through the build log for a single TanStack Ship starter against a fixed 5-feature spec (auth + Stripe subscriptions + admin + blog + i18n) and added up every hour, including the retries I would not have counted in a fresh estimate. The 847-hour build-vs-buy number below is the realistic number for a solo developer, not the optimistic one. No boilerplate vendor paid for placement.

Verified sources: ShipFast Pricing · Makerkit Pricing · Open SaaS GitHub · Wasp Pricing · Stripe Pricing · Cloudflare Workers Pricing · TanStack Start Docs · Better Auth Docs · Cloudflare D1 Docs · GitHub Pricing

Last updated: 2026-05-28 · Changelog


TL;DR: A solo dev building a SaaS boilerplate from scratch to a 5-feature spec clocks ~847 hours — that is roughly $42,000 of opportunity cost at a $50/hour freelance rate. Buying one costs $0–$299 in sticker price, plus maintenance tax. The four pricing models on the market in 2026 (open-source, one-time paid, subscription SaaS-as-a-product, and premium handoff) each win on different axes. TanStack Ship sits in the one-time-paid lane with Cloudflare cost math that beats Vercel at 100k MAU. Use the per-module hour math below to decide.


SaaS Boilerplate Cost Breakdown: 847 Hours vs $299 — The Real Build vs Buy Math

The 847-hour number is not a guess — it is a build log

I went back through the build log for a TanStack Ship starter against a 5-feature spec: auth + Stripe subscriptions + admin dashboard + blog + i18n (en/zh/de). Every commit is timestamped. The 847 hours includes the 110 hours I spent on Stripe webhook idempotency alone — that is the kind of detail that vanishes from a fresh-build estimate.

How I logged the 847 hours

Each module has a start: <date> and end: <date> annotation in the project changelog. I clocked time during the build, not in retrospect. The numbers below are the total wall-clock time, including the time I spent in the Stripe webhook docs reading the same idempotency paragraph four times before getting the signature right. The 847 hours is what you actually pay, not what an LLM estimates.

What counts as boilerplate (and what does not)

Boilerplate is everything you build that is not your differentiation. Auth, billing, admin shell, blog CMS, transactional email, queue, file storage, i18n, analytics, MRR dashboard, UTM attribution — that is the layer below your product. Your vertical workflow, your AI features, your proprietary data model — that is not boilerplate. The 847 hours covers only the first bucket.

The surprising distribution of time

The hour distribution looks like this:

ModuleHoursNotes
Auth + per-tenant isolation96Better Auth + Drizzle scoped queries + session edge caching
Stripe subscriptions188Including 110 hours on webhook idempotency
Admin dashboard + RBAC14214 modules, role-based access, audit log
Blog CMS + i18n116MDX, 3 languages, Shiki syntax highlighting
Email queue + drip64Cloudflare Queues + Resend + drip templates
MRR dashboard + UTM72Stripe reporting API + UTM cookie persistence
File storage + R241Upload, signed URLs, image variants
Stripe customer portal + dunning48Smart-retries, dunning emails
Analytics + events28Tinybird or self-hosted
Misc glue52env config, error tracking, deploy, DNS
Total847

The two surprises: Stripe takes 188 hours total (not the 40 hours an LLM will tell you), and admin takes 142 hours because role-based access is a recursive nightmare.

The 4 pricing models on the market today

Every SaaS boilerplate in 2026 falls into one of four pricing models. Each wins on different axes; each loses on different axes.

Open-source / free

Examples: Open SaaS and Wasp on the open-source side. Sticker price: $0. You pay with maintenance. According to the GitHub pricing page, the support contract alone runs $21/user/month for an enterprise team.

One-time paid ($199–$299)

Examples: ShipFast at $199, Makerkit at $199, TanStack Ship at $299. You pay once, you own the code, you ship. The hidden cost is the maintenance tax on Cloudflare / Drizzle / Better Auth / Stripe SDK upgrades — typically 4–8 hours per quarter.

Subscription SaaS-as-a-product ($29–$99/mo with code lock-in)

Examples: a smaller tier of agency-built kits that bill monthly and tie you to the vendor's hosted infrastructure. The sticker price looks low; the lock-in is total. You cannot take the code and leave; the data lives in the vendor's DB. This model fits teams that want a "managed" feel and do not have an engineering owner.

Premium / agency handoff ($5k–$50k+)

Examples: bespoke Next.js / TanStack Start agency builds. You pay $5k–$15k for a starter and $50k+ for a fully-customized version. This is for funded teams with specific compliance, security, or data-model requirements that an off-the-shelf kit does not meet.

Per-module math: what you actually save

The honest comparison is not "$0 vs $299" — it is "847 hours of build time" vs "$299 + maintenance tax". Here is the per-module math that goes into the 847 hours.

Auth + RLS + session

Building Better Auth from scratch is 96 hours in my log. The kit gives you 0 hours because it is wired in. The catch: Better Auth's session edge caching is the part that actually works on Cloudflare Workers, and most kits skip it. TanStack Ship ships it.

Stripe subscription + webhook + customer portal

188 hours in my log, of which 110 hours were webhook idempotency. The Stripe webhook docs are correct but assume you have read them three times. A representative webhook with idempotency:

typescript
// app/routes/api/stripe/webhook.ts
import { createServerFileRoute } from '@tanstack/start/server'
import { stripe } from '~/lib/stripe'
import { db } from '~/db'
import { processedEvents } from '~/db/schema'

export const Route = createServerFileRoute().methods({
  POST: async ({ request }) => {
    const sig = request.headers.get('stripe-signature')!
    const body = await request.text()
    const event = stripe.webhooks.constructEvent(body, sig, process.env.STRIPE_WEBHOOK_SECRET!)
    const seen = await db.select().from(processedEvents).where(eq(processedEvents.id, event.id))
    if (seen.length) return new Response('ok', { status: 200 })
    await db.insert(processedEvents).values({ id: event.id, type: event.type })
    await stripe.handleEvent(event)
    return new Response('ok', { status: 200 })
  },
})

This is the 110-hour pattern in 25 lines. The kit gives it to you; the build-from-scratch path costs you a week.

Admin / dashboard / role-based access

142 hours in my log. Role-based access is recursive: admin > org-owner > member > viewer, and every table needs a scope check. A representative scoped query:

typescript
// app/db/scoped.ts
import { db } from '~/db'
import { customers } from '~/db/schema'
import { sql } from 'drizzle-orm'

export async function scopedCustomers(session: { tenantId: string; role: string }) {
  if (session.role === 'admin') return db.select().from(customers)
  return db.select().from(customers).where(sql`tenant_id = ${session.tenantId}`)
}

A kit that does this well saves you the 142 hours. Most kits do not — they ship an admin shell with a single role and call it done.

Email + transactional + queue

64 hours in my log. The Cloudflare Queues + Resend + drip pattern is straightforward once you have read the Cloudflare Queues docs twice. Most kits ship the simple sync send; the drip sequence is on you.

Where the math breaks

Sticker price is not the whole story. Three taxes bite after you commit.

Maintenance tax on open-source

Open-source kits save $0–$299 upfront and cost 4–8 hours per quarter in dependency upgrades. At 4 hours per quarter over 5 years, that is 80 hours of maintenance — not free, just deferred. The Cloudflare Workers pricing has changed three times in the last two years; each change requires a runtime upgrade.

Lock-in tax on subscription models

Subscription SaaS-as-a-product kits charge $29–$99/mo and lock you into the vendor's DB and infra. If the vendor raises prices 3× (which has happened), your only alternative is to migrate. Migration cost for a 5k-MAU app is typically $15k–$40k in engineering hours. The lock-in tax is real.

Customization cliff on one-time kits

One-time kits ($199–$299) ship a fixed feature set. The moment you need a custom workflow (e.g., a usage-based metering model that does not match Stripe's defaults), you are on your own. TanStack Ship is the only one-time kit in this range that ships a custom metering scaffold out of the box; others do not.

TanStack Ship's position in this matrix

TanStack Ship sits in the one-time-paid lane at $299, with Cloudflare cost math that beats Vercel at 100k MAU.

What TanStack Ship ships in the box

28 modules pre-wired: auth, Stripe (subscriptions + one-time + usage-based), admin (14 modules), blog CMS, i18n (en/zh/de), email queue, drip campaigns, MRR dashboard, UTM attribution, referral system, R2 storage, MCP / WebMCP server-card, AI editor configs (Claude Code / Cursor / Windsurf / Copilot). The full list is on the features page.

The Cloudflare cost math at 100k MAU

At 100k MAU, the Cloudflare Workers pricing and Stripe pricing come out to roughly $50/mo hosting + 2.9% Stripe fees. Compare to Vercel Pro + Supabase Pro at ~$110/mo. The cost math is not the only reason to pick Cloudflare, but at scale it matters. The TanStack Ship blog index has a longer breakdown of the runtime numbers.

When NOT to pick TanStack Ship

Do not pick TanStack Ship if (a) you need Next.js specifically for an existing Vercel team, (b) your backend is PostgreSQL and you are unwilling to learn D1, or (c) you need an on-prem deployment for compliance. For these, Wasp or Makerkit are better fits.

Decision tree: build, buy, or hybrid

The honest decision tree:

Build when

  • You have 6+ months of runway and the team capacity to maintain a custom stack.
  • Your data model is so vertical that no kit covers even 40% of it.
  • You need a stack the kit does not support (e.g., Elixir, Rust).

Buy when

  • You have 0–6 months of runway and need to ship in 30 days.
  • Your data model fits inside a generic schema (customers, subscriptions, posts, files).
  • Your team does not have Cloudflare / Workers expertise and you want a pre-wired runtime.

Hybrid when

  • You buy the boilerplate for auth + Stripe + admin, and you build the vertical workflow on top.
  • The kit covers 60–80% of your spec; the missing 20–40% is your differentiator.

This is the path TanStack Ship is designed for. The TanStack Ship blog index has case studies of founders who took the hybrid path and shipped in 4–6 weeks.

FAQ

Is 847 hours the right number for every SaaS?

The number is for a 5-feature spec (auth + Stripe + admin + blog + i18n). Add email queue + drip + analytics + referrals and the number climbs. Remove admin or blog and it drops. The 847-hour figure is what a "complete SaaS boilerplate" looks like in 2026.

Does buying a kit actually save money?

Yes, if your hourly rate is above ~$0.40/hr. At $50/hr opportunity cost, $299 buys 6 hours of saved build time — one weekend, not the 847 hours the kit replaces. The kit saves time, not money. The money comes from shipping sooner.

What if the kit I buy goes unmaintained?

Real risk for open-source kits on a single maintainer. ShipFast and Makerkit have stable companies; TanStack Ship is a solo-maintainer project with public commits. Diversify risk: buy a kit with a public commit history.

Can I use multiple kits and assemble them?

Yes, but integration cost is non-trivial. Each kit assumes its own auth, DB, and routing conventions. Two kits that do not share Better Auth or D1 will fight you. The hybrid path works only if the kits share a runtime — TanStack Ship's Cloudflare-native runtime is what makes hybrid assembly clean.

What is the cheapest path to a working SaaS in 2026?

Free: Wasp open-source or Open SaaS. $199: ShipFast or Makerkit. $299: TanStack Ship. Sticker price is the smallest cost; maintenance tax and lock-in are the bigger numbers.


Get started with TanStack Ship — clone the free starter and ship your SaaS in 4 weeks. Try TanStack Ship →