SaaS Starter

Bienvenida

Un boilerplate listo para producción con Bun + Express + Prisma + Next.js, capas DDD, BetterAuth, billing, observabilidad y un design system UseDeploy.

Qué es esto

Un starter SaaS opinado construido alrededor de cuatro restricciones:

  • Domain-Driven Design, aplicado por ESLint — domain/ no puede importar express, @prisma/client, ni nada desde application/ / infrastructure/.
  • Auth basada en cookies vía BetterAuth (sessions persistidas en Postgres, magic link, Google OAuth, organizaciones).
  • Billing agnóstico al proveedor — Stripe, Mercado Pago y Polar comparten una única interfaz PaymentProvider.
  • Contratos tipados de punta a punta — los schemas de Zod en @app/contracts son la única fuente de verdad; la spec de OpenAPI se regenera y se commitea con cada cambio de endpoint.

Qué viene cableado

CapacidadDónde viveNotas
Servidor HTTPapps/server/src/index.tsOTel arranca primero, luego Express, luego las rutas
Módulos DDDapps/server/src/modules/<context>/iam, billing, tenancy, notifications, storage, audit, feature-flags
RBACpackages/shared/src/permissions/Strings resource:action, middleware requirePermission(p)
Background jobsapps/server/src/infrastructure/jobs/BullMQ, UI de Bull Board en /admin/queues
Eventos de dominioapps/server/src/infrastructure/events/event-bus.tsBus en memoria, los listeners se enganchan en bootstrap
Storageapps/server/src/modules/storage/Providers null / local / s3 / uploadthing
Rate limitingapps/server/src/infrastructure/http/rate-limit.tsLimiters por tier memoizados con prefijos de Redis separados
Observabilidadapps/server/src/infrastructure/observability/OTel + Prometheus /metrics, Sentry server (@sentry/bun)
Frontendapps/client/Next 16, Tailwind v4, Fumadocs, design system UseDeploy en components/brand/*

Recorrido en 30 segundos

git clone <repo> my-saas
cd my-saas
bun install
cp apps/server/.env.example apps/server/.env
bunx prisma migrate dev --schema apps/server/prisma/schema.prisma
bun run dev          # client :3004, server :3005, docs en /docs

El mínimo de env para arrancar: BETTER_AUTH_SECRET, BETTER_AUTH_URL, DATABASE_URL, CORS_ORIGINS. Cada adapter opcional (Sentry, OTel, S3, UploadThing, Redis) arranca como no-op cuando su configuración está sin definir.

Hacia dónde seguir

En esta página