S SaaS Boilerplate
Gratis & open source · MIT →

Starter SaaS yang tinggal pakai.

Auth, billing, organisasi, invitation, sampai payment gateway Indonesia — semua sudah jadi. Gratis dan open source — tinggal clone dan fokus ke fitur produkmu.

saas-boilerplate — zsh
$ bun run docker:up
Container saas-postgres Started
Container saas-mailpit Started
$ bun install
bun install v1.3
573 packages installed
$ bun run db:migrate && bun run db:seed
Migrations complete.
Seeding plans...
Seed complete.
$ bun run dev
API listening on http://localhost:3000
→ Web running at http://localhost:5173
$
The stack

Yang sudah jadi.

Bukan daftar buzzword. Ini yang benar-benar ada di dalam repo.

  • bun@1.3

    Bun 1.3

    Install, dev, build, dan test pakai satu tool.

  • hono + zod-openapi

    Hono + zod-openapi

    API type-safe. Docs OpenAPI auto-generate dari route.

  • drizzle + postgres

    Postgres 16 + Drizzle

    Migrasi disimpan di repo. Bukan di dashboard vendor.

  • better-auth

    Better Auth

    Email, OAuth, organisasi, invitation, role.

  • duitku · midtrans · xendit

    Duitku

    Sudah wired. Midtrans, Xendit, Stripe punya interface yang sama — tinggal implementasi.

  • i18next (en · id)

    i18next

    Bahasa Indonesia dan English sudah aktif.

The problem

Ini yang biasanya makan waktu berminggu-minggu.

Bukan fiturnya. Tapi hal-hal kecil di baliknya — auth, org, billing, webhook. Bagian yang tiap kali bangun SaaS ditulis lagi dari awal.

01

Auth bukan cuma halaman login.

Session, verifikasi email, reset password, OAuth, organisasi, invitation, role. Kalau ditulis dari nol, ini yang makan berminggu-minggu.

02

Tiap payment gateway punya bahasa sendiri.

Duitku, Midtrans, Xendit — signature scheme, bentuk webhook, dan status code-nya beda. Integrasi satu gateway sudah bikin capek. Kedua mulai dari nol lagi.

03

Multi-tenant salah sedikit, data bocor.

Setiap query harus scope ke organisasi. Active org perlu di-resolve per request. Role harus dicek di tempat yang tepat. Satu terlewat, tenant lain bisa lihat datanya.

04

Kalau fondasinya kacau, tim ikutan pelan.

Type yang bocor, migrasi manual, testing setup yang ribet. Bug yang seharusnya ketahuan di editor malah baru muncul di production.

Tech stack

Yang kamu dapat.

Daftar teknologi lengkap dengan versinya. Semua sudah ter-integrasi.

Runtime & Bahasa

Runtime dan bahasa yang dipakai.

Satu tool untuk install, dev, build, dan test. TypeScript strict mode di semua workspace.

  • Bun runtime + package manager + bundler 1.3
  • TypeScript strict mode 5.7
  • Biome formatter + linter 2.5
Backend

API framework yang type-safe.

Hono untuk routing, zod-openapi untuk validasi request dan generate spec OpenAPI otomatis. Swagger UI di /api/docs.

  • Hono 4.12
  • @hono/zod-openapi 1.4
  • @hono/swagger-ui 0.6
  • Zod 4.4
Database

Postgres dengan migrasi di repo.

Drizzle ORM dengan schema TypeScript. Migrasi ter-version. Tidak ada schema drift antara dev dan production.

  • Postgres Docker Compose untuk dev 16
  • Drizzle ORM 0.45
  • drizzle-kit generator migrasi 0.31
  • postgres.js driver 3.4
Auth

Better Auth dengan organization plugin.

Session, verifikasi email, reset password, OAuth (Google/GitHub), organisasi, invitation, dan role — semua satu paket.

  • Better Auth 1.6
  • Organization plugin multi-tenant built-in
Payments

Payment gateway yang bisa diganti.

Interface abstrak sebagai kontrak. Duitku sudah diimplementasi. Midtrans, Xendit, dan Stripe tinggal implementasi karena interface-nya sama.

  • Duitku VA, e-wallet, QRIS implemented
  • Midtrans butuh implementasi interface
  • Xendit butuh implementasi interface
  • Stripe butuh implementasi interface
Frontend

React 19 dengan router file-based.

TanStack Router auto-generate route tree. TanStack Query untuk server state. Tailwind v4 dengan shadcn/ui — semua komponen sudah customized.

  • React 19.2
  • Vite 8.1
  • TanStack Router file-based routing 1.170
  • TanStack Query server state 5.101
  • Tailwind CSS 4.3
  • shadcn/ui komponen ter-customize new-york
  • Radix UI primitives aksesibel pinned
  • i18next en + id 26.3
  • lucide-react ikon 1.24
Email

Template React, kirim via Resend.

React Email untuk template. Fallback ke console log kalau API key belum diisi — dev tidak blocked.

  • React Email template React 6.7
  • @react-email/components 1.0
  • Resend delivery 6.17
DevOps & Testing

CI/CD dan testing dari hari pertama.

Dockerfile multi-stage untuk API dan web. GitHub Actions untuk lint, typecheck, dan test. Workflow terpisah build + push image ke GHCR. Vitest untuk unit test, Playwright untuk end-to-end.

  • Docker API + web images multi-stage
  • GitHub Actions lint + typecheck + test CI
  • Vitest unit test 3.2
  • Playwright end-to-end 1.61
Reliability

Yang sering terlewat waktu bangun SaaS sendiri.

Bukan tambahan opsional. Ini yang biasanya ditemukan bocor waktu production sudah jalan.

  • 01

    Security header lengkap

    CSP, HSTS, X-Frame-Options, Referrer-Policy — semua dipasang lewat hono/secure-headers. Nginx SPA juga di-hardened.

  • 02

    Error format konsisten

    AppError dengan kode dan status HTTP yang stabil. Client bisa handle error berdasarkan kode, bukan parsing string.

  • 03

    Rate limit per IP

    Sliding window untuk route bisnis, limit lebih ketat untuk sign-in dan reset password. Webhook di-skip supaya tidak kena retry burst.

  • 04

    Signature webhook dicek

    Adapter payment gateway verify signature timing-safe sebelum data disentuh. Amount dan currency dicek ulang lawan pending order.

  • 05

    Webhook idempoten + state machine

    Payment dedupe by (provider, reference). Terminal states (paid/refunded) tidak bisa turun. Subscription auto-active dalam satu transaksi.

  • 06

    Role-based access

    requireActiveOrg + requireRole helper. Owner/admin/member berjenjang. Route yang ubah workspace butuh admin minimal.

  • 07

    OpenAPI docs otomatis

    Route yang ditulis pakai createRoute() muncul di Swagger UI di /api/docs saat dev. Di production docs digated.

  • 08

    Testing sudah diset

    Vitest untuk unit, Playwright untuk end-to-end. CI GitHub Actions sudah nyala.

Deploy anywhere

Deploy di mana pun yang jalanin container.

Docker
VPS
Fly.io
Railway
Render
Vercel

Bukan runtime khusus vendor. Dockerfile multi-stage untuk API dan web. Pindah hosting tinggal push image.

Use cases

Buat produk seperti apa.

  • Langganan SaaS

    Paket bulanan dalam Rupiah. Organisasi punya banyak member dan role. Checkout lewat gateway yang bisa ditukar.

  • Marketplace

    Vendor punya workspace masing-masing. Anggota, invitation, dan tagihan terpisah per organisasi.

  • Internal tool

    Auth guard, role-based access, dan shell dashboard yang bisa ditambah menu tanpa refactor besar.

  • Produk berbasis API

    Rate limit, error format yang konsisten, dan hook untuk billing berdasarkan pemakaian.

  • Project agency

    Satu codebase dipakai untuk banyak klien. Konfigurasi payment gateway tinggal ganti per project.

  • Indie SaaS

    Bangun sendiri tanpa harus nulis fondasi lagi. Fokus ke yang bikin produk kamu beda.

Honest scope

Batasnya jelas.

Bukan platform hosted, bukan generator kode. Ini repo yang kamu clone dan modifikasi sepenuhnya.

Yang kamu dapat
  • + Codebase TypeScript yang siap dijalankan
  • + Monorepo dengan batas paket yang jelas
  • + Fondasi multi-tenant yang gateway-agnostic
  • + Titik mulai yang bisa kamu ubah sesukanya
Yang bukan
  • Platform SaaS yang di-host
  • Generator kode yang tidak boleh disentuh
  • Kode bisnis spesifik untuk produkmu
  • Jaminan cocok untuk semua project
Start today

Mulai dari yang sudah jadi.

Auth, billing, multi-tenant — tiga hal yang biasanya bikin project mandek. Di sini sudah kelar. Tinggal clone dan bangun.