Un starter TypeScript SaaS production-grade construido sobre Domain-Driven Design.
Un comando. Bun trae cada dependencia del workspace, Prisma genera el cliente.
Plop scaffoldea domain, application, infrastructure — cableado al contenedor de DI.
La imagen Docker se construye con `bun run build`. Deploy a Fly, Render, tu VPS.
BetterAuth + argon2id, sesiones, OAuth, magic-link, TOTP 2FA con códigos de backup, rate limits por IP y email.
Workspaces de org, RBAC, invitaciones de miembros, API keys por tenant, impersonación de admin con cookies HMAC.
Port IPaymentProvider con adapters de Stripe, MercadoPago, Polar.sh. Portal de cliente, read model por webhooks.
Entregas firmadas con HMAC vía BullMQ + Redis. Reintentos con backoff exponencial, DLQ, helper de verificación.
Banner de consentimiento de cookies, eliminación de cuenta con 30 días de gracia, export async a S3, anonimización de audit log.
Vercel AI SDK + adapter de Anthropic, streaming de completions, drop-in para tu propio agente o flujo RAG.
STACK
Sin lock-in exótico de vendor. Infra estándar, aburrida, battle-tested — cableada para que vos no tengas que hacerlo.
EN NÚMEROS
Lo que recibís el día que clonás el repo.
01 — IDENTITY
Email + contraseña, OAuth, magic-link, 2FA TOTP, password reset, GDPR delete — pre-cableado con defaults sanos y rate limits desde el día que clonás.
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
Tres providers de pago detrás de un solo port. Customer portal, webhooks firmados in y out — el 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, members, roles, invitaciones, API keys por tenant. Las primitivas B2B que cada cliente pagador pide en la semana dos.
04 — RELIABILITY
Tracing, errores, logs estructurados, readiness probes, jobs en Redis real. La infra aburrida que despierta a alguien si te la salteás.
05 — AI
Streaming de chat sobre SSE en Express, tool use, structured output, presupuestos de tokens por tenant, RAG, y un 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, typedARQUITECTURA
Cuatro capas, una regla: las dependencias apuntan hacia adentro. ESLint lo enforcea en cada commit — no existe el "oops, importé Express en domain".
domain/ no puede importar express, @prisma/client, ni nada de application/, infrastructure/, interfaces/. ESLint flat config lo enforcea.
BUILT FOR AGENTS
AGENT.md por bounded context. Plop generators que scaffoldean toda la pila de capas. Contratos OpenAPI tipados. Naming de archivos predecible. Tu pair-programmer de IA no alucina cuando las convenciones son así de 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 tests exigentes.
UseDeploy es la base production-grade para la próxima generación de aplicaciones TypeScript SaaS.
TESTING
Tests unitarios de domain, tests de integración sobre Postgres + Redis reales, tests end-to-end sobre un browser real. La pipeline de CI los corre todos en cada commit.
INTERNACIONALIZACIÓN
next-intl con typed messages. Fumadocs i18n con dot-parser de archivos por locale. EN/ES/PT en el producto Y en el sitio de docs, con 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 DONDE QUIERAS
Sin lock-in de plataforma. El Dockerfile es la única fuente de verdad — cada target builda desde la misma imagen.
docker-compose para local + prod. Build multi-stage de Bun, non-root, healthcheck.
Deploy con un click usando railway.toml en root + apps/client. Postgres + Redis como managed plugins.
Usá Supabase Postgres + Auth como reemplazos drop-in. Schema y seeds compatibles.
Unidades systemd, reverse proxy con Caddy, GitHub Actions para CD. Self-host friendly.
Desde convenciones AGENT.md hasta tipos de IDs branded y generadores Plop. UseDeploy está estructurado para que Claude Code y Cursor naveguen, razonen y refactoricen sin alucinar.
El repo incluye archivos CLAUDE.md y AGENT.md que documentan bounded contexts, convenciones, patrones prohibidos y el PORQUÉ de cada decisión arquitectónica. Soltá tu propia config de asistente y a producir.
Leer la 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 LOS STARTERS GRATIS
create-t3-app te da una app Next tipada y un login OAuth. El día que necesitás invoices, invitaciones o background jobs, ya estás shopeando 6 semanas más de glue work.
| Feature | useDeploy | create-t3-app | ShipFast | Makerkit |
|---|---|---|---|---|
| Email + password + 2FA + magic-link | ✓ | solo OAuth | ✓ | ✓ |
| Multi-tenant orgs + invitaciones + API keys | ✓ | — | — | parcial |
| RBAC con permisos tipados | ✓ | — | — | — |
| Billing — múltiples providers | 3 (Polar/Stripe/MP) | — | Stripe | Stripe |
| Background jobs (BullMQ + Redis real) | ✓ | — | — | — |
| Observability (OTel + Sentry + /metrics) | ✓ | — | — | — |
| Webhooks salientes (HMAC + retries) | ✓ | — | — | — |
| i18n (EN + ES + PT, tipado) | ✓ | — | — | — |
| DDD layering enforced por ESLint | ✓ | — | — | — |
| Sitio de docs scaffoldeado (Fumadocs) | ✓ | — | — | — |
Construido con las herramientas que ya usás
Nos ahorró dos meses solo en la capa de auth + billing. La estructura DDD se pagó sola la primera vez que onboardeamos a un dev nuevo.
El stack de webhooks entrantes/salientes + HMAC vale el precio él solo. Lo metimos un fin de semana, al siguiente shippamos una integración B2B.
Claude Code lee el AGENT.md y simplemente lo entiende. Se acabó re-explicar la arquitectura cada sesión. Esto es lo que AI-native debería significar.
Un solo pago cubre el código fuente, la docu y 459 tests. Sin suscripciones, sin license keys, sin telemetría.
Guía de preciosFAQ
Sí. 14 días, sin preguntas, sin formulario "¿podés contarnos por qué?". Preferimos que te vayas a que te quedes con una herramienta que no te calza.
Sí. Recibís el repo Git completo, MIT-licensed para uso comercial dentro de tus proyectos. Sin obfuscación, sin licence keys, sin telemetría llamando a 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. Estándar, aburrido, bien soportado.
Primer commit pusheado en una tarde. Auth real + org + primer cliente pagador en un fin de semana. SaaS completo con dominio custom en una semana.
459 de ellos. Tests unitarios de domain, tests de integración sobre Postgres + Redis reales, e2e sobre un browser real. CI los corre todos en cada commit. Sin mocks en CI.
Sí, la licencia cubre proyectos ilimitados y uso comercial. Usalo para tu propio SaaS, el SaaS de tu cliente, o ambos.
Lifetime updates en el tier de $50. Cada release llega a tu repo vía la herramienta de sync — overwrite selectivo, nunca destruye tu código de negocio.
MAINTAINER
UseDeploy lo construye y mantiene Martin Coll — full-stack engineer, fundador y operador. Cada línea sale desde un solo teclado, con el feedback loop agéntico encendido. Sin comité, sin culto Discord — solo un maker que ya shippeó un SaaS antes.