AI-ready
Cómo este boilerplate está optimizado para que un agente de IA escriba código que funcione.
Filosofía
Los LLMs no leen tu mente — leen tu código. Un boilerplate AI-friendly minimiza la ambigüedad: tipos exactos, patrones repetidos, ADRs explícitos.
Tipos como contrato
@app/contracts exporta schemas Zod y tipos inferidos. Un agente que mira el contract sabe exactamente qué payload mandar y qué esperar de vuelta. Sin documentación que se desactualiza.
import { CreateUserInput } from '@app/contracts';
// El tipo es la doc.Branded IDs
UserId ≠ OrganizationId ≠ string. Si un agente confunde uno con otro, el TS server lo detecta antes del commit. Menos bugs sutiles.
Result en lugar de throws
Los LLMs propagan errores mejor cuando son valores. Result<T, E> se mapea naturalmente a JSON, a tests, a docs.
ADRs versionados
docs/adr/ documenta decisiones arquitectónicas (por qué BetterAuth, por qué billing agnóstico al proveedor). Un agente lee la ADR antes de proponer un cambio que la contradiga.
Generadores
bun run gen:domain <name> genera el scaffold de un agregado completo (entity, VOs, repo, use cases, controller, tests). El agente sigue el patrón existente sin inventar uno nuevo.
MCP-friendly
Schemas de Prisma + OpenAPI generado en apps/server/openapi.json. Cualquier agente con tools de OpenAPI explora el API sin adivinar.
Patrones repetidos
Cada agregado tiene la misma estructura (domain/, application/, infrastructure/, interface/). Un LLM aprende el patrón en un dominio y lo replica en el siguiente sin fricción.