I open-sourced my SaaS starter — here's the part I didn't

Published: (April 25, 2026 at 05:22 PM EDT)
2 min read
Source: Dev.to

Source: Dev.to

What you get for free

npm create orb@latest my-app
  • API – A Hono API with proper DDD layering (bounded contexts, repositories, a UnitOfWork, an EventBus). Not because DDD is trendy, but because it’s the structure I keep arriving at when a SaaS moves past the toy stage.
  • Multi‑tenant workspaces – The root primitive, with members and a workspace‑scoped PBAC system. Two‑scope permissions (workspace + team) baked in, with requirePermission() middleware on the server and useCan() on the client.
  • Auth – Powered by better-auth (magic links, OAuth, password + email verification).
  • Frontend choice – Either TanStack Start or Next.js App Router. The CLI deletes the one you didn’t pick. Both share the UI library and the WebSocket client; per‑page code is duplicated intentionally so each variant stays idiomatic to its framework.
  • Database – PostgreSQL via Prisma.
  • Realtime – WebSockets.
  • Dev utilities – An in‑memory rate limiter for development.
  • UI library – 55‑component internal library built on Base UI + Tailwind v4 (see coss.com).
  • Login & onboarding – A beautiful login page and onboarding flow tailored to creating your workspace.

All of this is a real SaaS skeleton you can ship. The source is on GitHub under the MIT license.

What’s behind the paywall

The following features are not included in the free starter:

  • Teams – Nested inside workspaces, with their own roles and permissions.
  • Billing – Stripe, Polar, and Dodo adapters behind a BillingProvider port.
  • Audit logs – Global (admin) and tenant‑scoped ledgers, materialized by a post‑commit projector.
  • UploadsUploadThing adapter behind a FileStorage port.
  • Transactional emailResend adapter behind a Mailer port.
  • Background jobs – Graphile Worker or QStash, swappable.
  • Remote rate limiting – Upstash or Unkey adapters.
  • Alternative ORM – Drizzle as an alternative to Prisma (same repository interfaces, same UnitOfWork).
  • Waitlist mode – For closed‑beta launches.

These components rely on many design decisions specific to my DDD approach.

I work at Cal.com as my day job—feel free to book me for anything tech‑related.

0 views
Back to Blog

Related posts

Read more »