Skip to content
BoringStack
Star

Why BoringStack

3 min read

Build the product that solves a problem. Skip rebuilding the infrastructure every SaaS needs from scratch.

BoringStack is a pre-built SaaS template for login-based products. It includes auth, billing, email, background jobs, tenancy, deployment infrastructure, and architecture enforcement. The first sprint is your domain work, not reinventing the infra wheel.

One monorepo with API (Bun + Elysia), UI (React + Vite), and infra (Docker Compose + OpenTofu). Deploy together initially; split layers later if you need to. Most products never do.

  • Auth. Sign-in and sessions: register, verify email, OAuth, password reset, MFA hooks. HttpOnly cookies; tokens stay off the client. See Auth.
  • Teams. Multi-tenant accounts: organizations, members, roles, plan features. Permissions enforced on the server. See Multi-tenant.
  • Billing. Stripe ready: webhooks, subscription lifecycle, plan entitlements. Add your prices when you need them. See Billing.
  • Email. Transactional mail: templates, outbound queues, in-app notifications. Mailpit in dev; your provider in prod. See Email.
  • Jobs. Background work: BullMQ on Valkey. Audit log on mutations. Work stays in the API, not the browser. See Background work.
  • Deploy. Local and production: Docker Compose on your machine. GHCR images, Traefik, backups on a VPS. See Deployment.
  • Production judgment since 2008. Layout, env, queues, deploy defaults. Decisions from commercial startups, already made.
  • Architecture enforced in CI. ESLint plugins block bad merges. Rules are machine-readable, not prose in a README.
  • OpenAPI contract between layers. API auto-emits schema; UI generates a typed client. Drift is a compile error.
  • Agents and humans speak the same language. Lint violations, OpenAPI boundaries, and AGENTS.md docs read the same to both.

SaaS with accounts, billing, or shared data. You want production infrastructure in the repo on day one and a VPS you control. Stripe, email, and other providers plug in when you are ready for them.

  • API (apps/api). Auth, billing, queues, email, audit, persistence. The system of record and background workers.
  • UI (apps/ui). React SPA, i18n, client state. Calls the API through a generated OpenAPI client.
  • Infra (infra/compose). Postgres, Valkey, Docker Compose locally. Traefik, TLS, backups on a VPS in prod.

One monorepo. Layers you can deploy separately when growth asks for it. Postgres and Valkey on hardware you run. A single VPS carries most products a long way.

Postgres and Valkey on one VPS. Bill tracks server size, not per-request meters.

Most products under 50k MAU fit on a CPX31 (4 vCPU, 8 GB, around 11 EUR/month). GHCR images are free if public. Hetzner storage backups are a few euros per month. Stripe and email providers charge on volume, not fixed monthly fees.

Monthly cost across stages

Monthly infra cost by tier

Select a traffic tier. The three columns are solution categories (not named vendors), using public rate cards as of 2026-05. See the methodology page for assumptions and math.

MAU

~2k

req / day

80k

egress

50 GB / mo

DB storage

5 GB

~2k MAU, 80k req/day, moderate egress.

BoringStack

VPS + Cloudflare + B2

$8/ mo

You own the box. You own the pager.

Managed-PaaS bundle

10×

Edge functions + managed Postgres

$80/ mo

Vendor lock-in; cold starts; bandwidth meter.

Hosted SaaS platform

25×

All-in-one with per-seat / per-event pricing

$200/ mo

Price scales with users, not with usage.

Prices as of 2026-05. Every figure rounded; comparisons use public list-price rate cards, not enterprise negotiations. See the cost methodology page for the math, the assumptions, and the citations.

See Cost methodology for the full breakdown.