SaaS Starter

Boas-vindas

Um boilerplate pronto para produção com Bun + Express + Prisma + Next.js, camadas DDD, BetterAuth, billing, observabilidade e um design system UseDeploy.

O que é isto

Um starter SaaS opinativo construído ao redor de quatro restrições:

  • Domain-Driven Design, aplicado pelo ESLint — domain/ não pode importar express, @prisma/client, nem nada de application/ / infrastructure/.
  • Auth baseada em cookies via BetterAuth (sessions persistidas no Postgres, magic link, Google OAuth, organizações).
  • Billing agnóstico ao provider — Stripe, Mercado Pago e Polar compartilham uma única interface PaymentProvider.
  • Contratos tipados de ponta a ponta — os schemas Zod em @app/contracts são a única fonte de verdade; a spec OpenAPI é regenerada e commitada a cada mudança de endpoint.

O que já está cabeado

CapacidadeOnde viveNotas
Servidor HTTPapps/server/src/index.tsOTel inicia primeiro, depois Express, depois as rotas
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 do Bull Board em /admin/queues
Eventos de domínioapps/server/src/infrastructure/events/event-bus.tsBus em memória, listeners conectados no bootstrap
Storageapps/server/src/modules/storage/Providers null / local / s3 / uploadthing
Rate limitingapps/server/src/infrastructure/http/rate-limit.tsLimiters por tier memoizados com prefixos Redis separados
Observabilidadeapps/server/src/infrastructure/observability/OTel + Prometheus /metrics, Sentry server (@sentry/bun)
Frontendapps/client/Next 16, Tailwind v4, Fumadocs, design system UseDeploy em components/brand/*

Tour de 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 em /docs

O mínimo de env para subir: BETTER_AUTH_SECRET, BETTER_AUTH_URL, DATABASE_URL, CORS_ORIGINS. Todo adapter opcional (Sentry, OTel, S3, UploadThing, Redis) sobe como no-op quando sua configuração está vazia.

Para onde ir agora

Nesta página