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 importarexpress,@prisma/client, nem nada deapplication//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/contractssão a única fonte de verdade; a spec OpenAPI é regenerada e commitada a cada mudança de endpoint.
O que já está cabeado
| Capacidade | Onde vive | Notas |
|---|---|---|
| Servidor HTTP | apps/server/src/index.ts | OTel inicia primeiro, depois Express, depois as rotas |
| Módulos DDD | apps/server/src/modules/<context>/ | iam, billing, tenancy, notifications, storage, audit, feature-flags |
| RBAC | packages/shared/src/permissions/ | Strings resource:action, middleware requirePermission(p) |
| Background jobs | apps/server/src/infrastructure/jobs/ | BullMQ, UI do Bull Board em /admin/queues |
| Eventos de domínio | apps/server/src/infrastructure/events/event-bus.ts | Bus em memória, listeners conectados no bootstrap |
| Storage | apps/server/src/modules/storage/ | Providers null / local / s3 / uploadthing |
| Rate limiting | apps/server/src/infrastructure/http/rate-limit.ts | Limiters por tier memoizados com prefixos Redis separados |
| Observabilidade | apps/server/src/infrastructure/observability/ | OTel + Prometheus /metrics, Sentry server (@sentry/bun) |
| Frontend | apps/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 /docsO 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
- Recém-chegado: Primeiros passos → Estrutura do projeto → Ambiente.
- Construindo uma feature: Como fazer: adicionar uma nova feature.
- Mexendo na UI: Tokens do frontend e primitives.
- Precisa entender por que algo é do jeito que é: Arquitetura e Bounded contexts.