ÚLTIMO RELEASEMANTENIMIENTO ACTIVO

La base SaaS
que tu IA
no rompe.

Un boilerplate SaaS TypeScript production-grade cuyas fronteras de arquitectura las hace cumplir el build — no un documento de convenciones que tu agente va a ignorar.

01Cloná

Un comando. Bun trae cada dependencia del workspace, Prisma genera el cliente.

02Generá

Plop scaffoldea domain, application, infrastructure — cableado al contenedor de DI.

03Deploy

La imagen Docker se construye con `bun run build`. Deploy a Fly, Render, tu VPS.

STACK

Construido sobre tecnología que ya conocés.

Sin lock-in exótico de vendor. Infra estándar, aburrida, battle-tested — cableada para que vos no tengas que hacerlo.

EN NÚMEROS

Densidad, cuantificada.

Lo que recibís el día que clonás el repo.

800+
tests pasando
44
páginas de docs
11
bounded contexts
3
providers de pago
3
idiomas i18n
0
mocks en CI

01 — IDENTITY

Auth que no te hace llorar.

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.

  • BetterAuth + sesiones argon2id
  • OAuth (Google, GitHub, más)
  • Sign-in con magic-link
  • 2FA TOTP + códigos de backup
  • Rate-limit por IP y por email
  • Password reset + verificación de email
Ver docs de auth
iam.signIn.ts
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 email

02 — REVENUE

Cobrá el día que lances.

Tres providers de pago detrás de un solo port. Customer portal, webhooks firmados in y out — el loop completo.

  • IPaymentProvider port: Polar, Stripe, MercadoPago
  • Checkout y portal hosteados por el provider
  • Webhook ingest idempotente con HMAC verificado
  • Recibos React Email vía el módulo notifications
  • Webhooks salientes a tus clientes (HMAC + retries)
  • Audit trail de cada evento de billing
Ver docs de billing
01

Checkout

POST /billing/checkout returns the provider-hosted URL.

02

Webhook in

HMAC-verified, idempotent, persists to your read model.

03

Portal

One-line redirect to the provider-hosted customer portal.

03 — TENANCY

Multi-tenant desde t=0.

Workspaces, members, roles, invitaciones, API keys por tenant. Las primitivas B2B que cada cliente pagador pide en la semana dos.

  • Workspaces de organización con cookies HMAC-signed
  • Roles de member: owner, admin, member
  • Invitaciones por email con tokens que expiran
  • API keys scoped por tenant
  • Impersonation de platform-admin, totalmente auditada
  • Audit log append-only, event-sourced
Ver docs de RBAC
A
Acme Inc
PRO PLAN
MEMBERS · 4+ Invite

04 — RELIABILITY

Dormí tranquilo de noche.

Tracing, errores, logs estructurados, readiness probes, jobs en Redis real. La infra aburrida que despierta a alguien si te la salteás.

  • OTel auto-instrumentation (bootea antes de Express)
  • Sentry: @sentry/bun + @sentry/nextjs
  • Logs Pino estructurados con trace correlation
  • /readiness probe + endpoint /metrics
  • Jobs BullMQ en Redis real
  • Dead-letter queue + schedulers tipo cron
Ver docs de observability
OTEL TRACE · 245mstrace_id 7f3a…
  • POST /api/v1/checkout245ms
  • iam.requireAuth4ms
  • pg SELECT user18ms
  • redis GET plan:423ms
  • polar.createCheckout168ms
  • jobs.enqueue receipt6ms

05 — AI

Primitivas de AI, no rebuilds.

Streaming de chat sobre SSE en Express, tool use, structured output, presupuestos de tokens por tenant, RAG, y un scaffold de servidor MCP.

  • Vercel AI SDK + provider de Anthropic
  • Streaming SSE en Express (sin lock-in de Vercel)
  • Tool use + structured output, type-safe
  • Token budget por org + rate limits
  • RAG con pgvector + primitivas de retrieval
  • Scaffold de servidor MCP + módulo assistant
Ver docs de AI
chat.route.ts
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, typed

ARQUITECTURA

Domain-driven, layer-enforced.

Cuatro capas, una regla: las dependencias apuntan hacia adentro. ESLint lo enforcea en cada commit — no existe el "oops, importé Express en domain".

interfaces/http/
Express controllers, Zod schemas, registro de rutas.
application/
Use cases, ports, DTOs. Orquesta domain + infrastructure.
domain/
Entities, value objects, repositories. Puro, sin I/O, sin framework.
infrastructure/
Prisma repos, adapters de terceros, mappers. Implementa los ports.
Dependencies point inward.
infrastructure/ implements ports.

domain/ no puede importar express, @prisma/client, ni nada de application/, infrastructure/, interfaces/. ESLint flat config lo enforcea.

BUILT FOR AGENTS

Claude Code y Cursor se sienten en casa.

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.

~/usedeploy
$ 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 typed
  • AGENT.md por bounded context — las reglas, en inglés plano, donde el agente las lee
  • Plop generators scaffoldean domain + application + infrastructure + interfaces en un solo comando
  • OpenAPI generado en cada cambio de endpoint — el typed fetch client se mantiene en lock-step
  • ESLint enforcea el layering DDD — los agentes no pueden cruzar boundaries por accidente
  • Tipos de ID branded hacen imposibles las foreign key mezcladas
  • Result<T, E> sobre throw — los agentes ven los error paths en la firma del tipo

Type-safe end-to-end. Bounded contexts DDD. Endpoints de AI streaming. 800+ tests exigentes.

UseDeploy es la base production-grade para la próxima generación de aplicaciones TypeScript SaaS.

TESTING

800+ tests en la suite. Redis real. Cero mocks en CI.

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.

$ bun run testPASS · 14.2s
modules/iam/use-cases/sign-in.spec.ts(24)
modules/iam/use-cases/totp.spec.ts(11)
modules/billing/adapters/polar.spec.ts(18)
modules/billing/use-cases/checkout.spec.ts(14)
modules/tenancy/use-cases/invitation.spec.ts(12)
modules/tenancy/use-cases/api-keys.spec.ts(9)
modules/observability/probes/readiness.spec.ts(7)
infrastructure/jobs/bullmq-runner.spec.ts(16)
PASS · 800+ tests across 62 files in 14.21s

INTERNACIONALIZACIÓN

Tres idiomas, type-safe, día uno.

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.

ENgetting-started.en.mdx

Get started

Clone the repo, install deps, run the dev server.

t('onboarding.start')
ESgetting-started.es.mdx

Empezar

Cloná el repo, instalá deps, corré el dev server.

t('onboarding.start')
PTgetting-started.pt.mdx

Começar

Clone o repo, instale deps, rode o dev server.

t('onboarding.start')

DEPLOY DONDE QUIERAS

Corre donde vos lo quieras correr.

Sin lock-in de plataforma. El Dockerfile es la única fuente de verdad — cada target builda desde la misma imagen.

Docker

docker-compose para local + prod. Build multi-stage de Bun, non-root, healthcheck.

Railway

Deploy con un click usando railway.toml en root + apps/client. Postgres + Redis como managed plugins.

Supabase

Usá Supabase Postgres + Auth como reemplazos drop-in. Schema y seeds compatibles.

Tu VPS

Unidades systemd, reverse proxy con Caddy, GitHub Actions para CD. Self-host friendly.

Pensado para agentes de AI.

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.

Convenciones legibles por agentes

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 docu
CLAUDE.md
1  ## 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

Lo que "gratis" te deja en la mano.

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.

FeatureuseDeploycreate-t3-appShipFastMakerkit
Email + password + 2FA + magic-linksolo OAuth
Multi-tenant orgs + invitaciones + API keysparcial
RBAC con permisos tipados
Billing — múltiples providers3 (Polar/Stripe/MP)StripeStripe
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)

Todo lo que necesitás
por un pago único.

Un solo pago cubre el código fuente, la docu y 800+ tests. Sin suscripciones, sin license keys, sin telemetría.

Guía de precios
$99/ $199
pago único · updates de por vida en el tier de $199
  • Código fuente completo, congelado para siempre
  • Proyectos ilimitados, uso comercial
  • 800+ tests · 44 páginas de docs · 11 bounded contexts
  • Garantía de devolución de 14 días

FAQ

Lo que vas a preguntar igual.

¿Puedo pedir refund?

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.

¿Está abierto el código?

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.

¿Qué stack usa?

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.

¿Cuánto hasta estar shippeando?

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.

¿Viene con tests?

800+ 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.

¿Puedo usarlo para client work / agencias?

Sí, la licencia cubre proyectos ilimitados y uso comercial. Usalo para tu propio SaaS, el SaaS de tu cliente, o ambos.

¿Y los updates después de comprar?

Lifetime updates en el tier de $199. Cada release llega a tu repo vía la herramienta de sync — overwrite selectivo, nunca destruye tu código de negocio.

MC
v2.1.0 · Desarrollo activo

MAINTAINER

Construido y shippeado por un solo ingeniero.

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.