AI-ready
Como este boilerplate está otimizado para que um agente de IA escreva código que funcione.
Filosofia
LLMs não leem sua mente — leem seu código. Um boilerplate AI-friendly minimiza ambiguidade: tipos exatos, padrões repetidos, ADRs explícitos.
Tipos como contrato
@app/contracts exporta schemas Zod e tipos inferidos. Um agente que olha o contract sabe exatamente qual payload enviar e o que esperar de volta. Sem documentação que desatualiza.
import { CreateUserInput } from '@app/contracts';
// O tipo é a doc.Branded IDs
UserId ≠ OrganizationId ≠ string. Se um agente confunde um com o outro, o TS server pega antes do commit. Menos bugs sutis.
Result no lugar de throws
LLMs propagam erros melhor quando são valores. Result<T, E> mapeia naturalmente para JSON, para testes, para docs.
ADRs versionados
docs/adr/ documenta decisões arquiteturais (por que BetterAuth, por que billing agnóstico ao provider). Um agente lê o ADR antes de propor uma mudança que o contradiga.
Generators
bun run gen:domain <name> gera o scaffold de um aggregate completo (entity, VOs, repo, use cases, controller, testes). O agente segue o padrão existente sem inventar um novo.
MCP-friendly
Schemas Prisma + OpenAPI gerado em apps/server/openapi.json. Qualquer agente com tools OpenAPI explora a API sem adivinhar.
Padrões repetidos
Cada aggregate tem a mesma estrutura (domain/, application/, infrastructure/, interface/). Um LLM aprende o padrão em um domínio e replica no próximo sem fricção.