



Assumi a arquitetura de um sistema de atendimento com IA para clínicas que já tinha clientes ativos. O sistema travava e não escalava. Ele foi construído pelos próprios sócios usando ferramentas de IA, o que fez todo sentido para validar o negócio, mas chegou num ponto em que o código não aguentava mais crescer.
O primeiro desafio foi arquitetar o código, por dois motivos. O primeiro é o óbvio: alguém precisava conseguir manter aquilo depois de mim. O segundo era um problema que os sócios viviam todo dia — eles pediam um ajuste numa tela para o Claude Code ou o Codex, e voltava com outra funcionalidade fora do ar, sem ninguém ter pedido.
Reorganizei o projeto em monorepo (pnpm + Turborepo), separando os aplicativos do painel, admin, checkout e site dos pacotes compartilhados de banco, autenticação, e-mails e UI. Tipei as rotas de ponta a ponta: o backend em Fastify valida tudo com Zod, gera o contrato OpenAPI a partir das próprias rotas, e desse contrato sai o client tipado que o front consome. Se o backend muda, o front quebra no type-check, não em produção. Junto disso, escrevi testes nas funcionalidades que não podiam quebrar — hoje são mais de 300 arquivos de teste unitário e uma suíte end-to-end cobrindo os fluxos críticos (login, inbox, CRM, campanhas, agentes, checkout). Com isso a IA passou a ter limite claro do que estava mexendo, e parou de derrubar o que já funcionava.
O segundo desafio foi a infraestrutura. A arquitetura estava fora do padrão: aplicação, banco e cache disputavam a mesma máquina, com um único processo Node para tudo. Era daí que vinha a lentidão. Refiz o provisionamento como código (Terraform, com ambientes de staging e produção separados) para escalar horizontalmente de forma automática, com banco e cache gerenciados, entrega de mídia por CDN e aviso por e-mail quando algo sai do normal.
Para dar uma ideia do tamanho da mudança: do jeito que estava, não aguentaria 50 clientes ativos usando ao mesmo tempo. Passou a aguentar 200, e a escala horizontal vai aumentando esse número conforme a necessidade.
Teve também uma parte que não era técnica. Eles vendiam plano com uso à vontade, e como o custo de LLM é variável, não existia nenhum freio. Um cliente sozinho podia consumir bem mais do que pagava no mês, e quanto mais o produto era usado, pior ficava a margem. Propus mudar para um modelo de créditos, debitando por token conforme o uso. O sistema usa Anthropic para texto e OpenAI para áudio e imagem, então cada tipo de consumo debita de acordo com o custo real dele — o débito é calculado a partir dos tokens da chamada, no preço do modelo usado, e todo consumo fica registrado por cliente. Isso deu previsibilidade de margem e mostrou, pela primeira vez, quanto cada cliente custa de verdade.
No fim, as reclamações de lentidão pararam e os clientes passaram a elogiar o sistema. E do lado do desenvolvimento, a IA conseguiu continuar construindo em cima do projeto sem quebrar o que já estava pronto.



