Um starter TypeScript SaaS production-grade construído sobre Domain-Driven Design.
Um comando. Bun puxa cada dependência do workspace, Prisma gera o cliente.
Plop faz scaffold de domain, application, infrastructure — conectado ao container de DI.
A imagem Docker é construída com `bun run build`. Deploy para Fly, Render, sua VPS.
BetterAuth + argon2id, sessões, OAuth, magic-link, TOTP 2FA com códigos de backup, rate limits por IP e email.
Workspaces de org, RBAC, convites de membros, API keys por tenant, impersonação de admin com cookies HMAC.
Port IPaymentProvider com adapters de Stripe, MercadoPago, Polar.sh. Portal do cliente, read model por webhooks.
Entregas assinadas com HMAC via BullMQ + Redis. Retries com backoff exponencial, DLQ, helper de verificação.
Banner de consentimento de cookies, exclusão de conta com 30 dias de carência, export async para S3, anonimização de audit log.
Vercel AI SDK + adapter da Anthropic, streaming de completions, drop-in para seu próprio agente ou fluxo RAG.
STACK
Sem lock-in exótico de vendor. Infra padrão, chata, battle-tested — conectada para que você não precise.
EM NÚMEROS
O que você recebe no dia em que clona o repo.
01 — IDENTITY
Email + senha, OAuth, magic-link, 2FA TOTP, password reset, GDPR delete — pré-conectado com defaults sãos e rate limits desde o dia que você clona.
import { iam } from '@app/iam'; const session = await iam.signIn({email,password,totp: code, // throws on invalid 2FA}); // session is an HMAC-signed httpOnly cookie// rate-limited per IP and per email02 — REVENUE
Três providers de pagamento atrás de uma única port. Customer portal, webhooks assinados in e out — o loop completo.
POST /billing/checkout returns the provider-hosted URL.
HMAC-verified, idempotent, persists to your read model.
One-line redirect to the provider-hosted customer portal.
03 — TENANCY
Workspaces, membros, roles, convites, API keys por tenant. As primitivas B2B que cada cliente pagante pede na semana dois.
04 — RELIABILITY
Tracing, erros, logs estruturados, readiness probes, jobs em Redis real. A infra chata que acorda alguém se você pular.
05 — AI
Streaming de chat sobre SSE no Express, tool use, structured output, orçamentos de tokens por tenant, RAG, e um scaffold de servidor MCP.
import { ai } from '@app/ai'; const stream = await ai.streamText({model: 'claude-opus-4-7',messages,tools: { listUsers, search },maxTokens: 4096, // per-org budget enforced}); return stream.toResponse(); // SSE, typedARQUITETURA
Quatro camadas, uma regra: dependências apontam para dentro. ESLint impõe isso em cada commit — não existe "oops, importei Express em domain".
domain/ não pode importar express, @prisma/client, nem nada de application/, infrastructure/, interfaces/. ESLint flat config impõe.
BUILT FOR AGENTS
AGENT.md por bounded context. Plop generators que scaffoldam toda a pilha de camadas. Contratos OpenAPI tipados. Nomenclatura de arquivos previsível. Seu pair-programmer de IA não alucina quando as convenções são tão consistentes.
$ bun run plop endpoint
? Module name: notifications
? Endpoint name: send
? Method: POST
✓ application/use-cases/send.use-case.ts
✓ application/dto/send.dto.ts
✓ interfaces/http/send.controller.ts
✓ interfaces/http/send.schema.ts
✓ application/use-cases/send.use-case.spec.ts
$ bun run generate:api
✓ OpenAPI regenerated · 47 routes typedType-safe end-to-end. Bounded contexts DDD. Endpoints de AI streaming. 459 testes desafiadores.
UseDeploy é a base production-grade para a próxima geração de aplicações TypeScript SaaS.
TESTING
Testes unitários de domain, testes de integração sobre Postgres + Redis reais, testes end-to-end sobre um browser real. O pipeline de CI roda todos em cada commit.
INTERNACIONALIZAÇÃO
next-intl com typed messages. Fumadocs i18n com dot-parser de arquivos por locale. EN/ES/PT no produto E no site de docs, com fallback automático para keys faltantes.
Clone the repo, install deps, run the dev server.
t('onboarding.start')Cloná el repo, instalá deps, corré el dev server.
t('onboarding.start')Clone o repo, instale deps, rode o dev server.
t('onboarding.start')DEPLOY ONDE QUISER
Sem lock-in de plataforma. O Dockerfile é a única fonte da verdade — cada target builda da mesma imagem.
docker-compose para local + prod. Build multi-stage do Bun, non-root, healthcheck.
Deploy num clique com railway.toml na raiz + apps/client. Postgres + Redis como managed plugins.
Use Supabase Postgres + Auth como substitutos drop-in. Schema e seeds compatíveis.
Units systemd, reverse proxy com Caddy, GitHub Actions para CD. Self-host friendly.
De convenções AGENT.md a tipos de IDs branded e geradores Plop. UseDeploy é estruturado para que Claude Code e Cursor naveguem, raciocinem e refatorem sem alucinar.
O repo inclui arquivos CLAUDE.md e AGENT.md que documentam bounded contexts, convenções, padrões proibidos e o PORQUÊ de cada decisão arquitetural. Solte sua própria config de assistente e produza.
Ler a docu1 ## DDD layering (enforced by ESLint)
2
3 Each module under apps/server/src/modules/<ctx>/:
4
5 domain/ # entities, VOs — no I/O
6 application/ # use cases, ports, DTOs
7 infrastructure/ # Prisma repos, adapters
8 interfaces/http/ # Express controllers, Zod
9
10 domain/ cannot import express,
11 @prisma/client, or anything from
12 application/infrastructure/interfaces/.
13
14 ESLint flat configs enforce this.VS OS STARTERS GRATUITOS
create-t3-app te dá um app Next tipado e um login OAuth. No dia que você precisa de invoices, convites ou background jobs, já está caçando mais 6 semanas de glue work.
| Feature | useDeploy | create-t3-app | ShipFast | Makerkit |
|---|---|---|---|---|
| Email + senha + 2FA + magic-link | ✓ | só OAuth | ✓ | ✓ |
| Multi-tenant orgs + convites + API keys | ✓ | — | — | parcial |
| RBAC com permissões tipadas | ✓ | — | — | — |
| Billing — múltiplos providers | 3 (Polar/Stripe/MP) | — | Stripe | Stripe |
| Background jobs (BullMQ + Redis real) | ✓ | — | — | — |
| Observability (OTel + Sentry + /metrics) | ✓ | — | — | — |
| Webhooks de saída (HMAC + retries) | ✓ | — | — | — |
| i18n (EN + ES + PT, tipado) | ✓ | — | — | — |
| DDD layering imposto por ESLint | ✓ | — | — | — |
| Site de docs scaffoldado (Fumadocs) | ✓ | — | — | — |
Construído com as ferramentas que você já usa
Economizou dois meses só na camada de auth + billing. A estrutura DDD se pagou sozinha na primeira vez que onboardeamos um dev novo.
O stack de webhooks entrantes/saintes + HMAC vale o preço sozinho. Colocamos em um fim de semana, no seguinte enviamos uma integração B2B.
Claude Code lê o AGENT.md e simplesmente entende. Acabou re-explicar a arquitetura toda sessão. Isso é o que AI-native deveria significar.
Um único pagamento cobre o código-fonte, a docu e 459 testes. Sem assinaturas, sem license keys, sem telemetria.
Guia de preçosFAQ
Sim. 14 dias, sem perguntas, sem formulário "pode nos contar por quê?". Preferimos que você saia a que fique com uma ferramenta que não encaixa.
Sim. Você recebe o repo Git completo, MIT-licensed para uso comercial em seus projetos. Sem ofuscação, sem licence keys, sem telemetria ligando para casa.
Bun runtime, servidor Express, Prisma + Postgres, cliente Next.js, BetterAuth, billing Polar/Stripe/MercadoPago, BullMQ + Redis, OpenTelemetry + Sentry + Pino, storage S3-compatible, Vercel AI SDK + Anthropic. Padrão, chato, bem suportado.
Primeiro commit pushado numa noite. Auth real + org + primeiro cliente pagante num fim de semana. SaaS completo com domínio custom numa semana.
459 deles. Testes unitários de domain, testes de integração sobre Postgres + Redis reais, e2e sobre browser real. CI roda todos em cada commit. Sem mocks em CI.
Sim, a licença cobre projetos ilimitados e uso comercial. Use no seu próprio SaaS, no SaaS do seu cliente, ou ambos.
Lifetime updates no tier de $50. Cada release chega no seu repo via a ferramenta de sync — overwrite seletivo, nunca destrói seu código de negócio.
MAINTAINER
UseDeploy é construído e mantido por Martin Coll — engenheiro full-stack, founder e operador. Cada linha sai de um só teclado, com o feedback loop agêntico ligado. Sem comitê, sem culto Discord — apenas um maker que já shippou um SaaS antes.