CRM de leads
CRM que acompanha o lead de uma clínica do primeiro contato ao fechamento do tratamento, com a agenda no mesmo lugar.

O problema
A clínica recebia leads de anúncios e controlava tudo em planilha: quem chamou, quem agendou, quem faltou, quem fechou.
O resultado
O CRM troca a planilha por dois painéis, um para cada momento do funil, e mede o resultado sozinho. Ele abre dentro da plataforma de mensagens que a clínica já usa, então a equipe atende e move o card sem trocar de tela.
- CRC1, agendamento: do lead que chegou até a avaliação marcada.
- CRC2, fechamento: do paciente que compareceu até o tratamento fechado.
- Agenda: cada consulta anda junto com o card do paciente.
- Dashboard e metas: o gestor vê o funil, a receita e o que precisa de ação.
- Origem do lead: identificada pelo anúncio, com funil por campanha.
- API pública: contrato OpenAPI, chaves por clínica e webhooks de saída.
- Várias clínicas e unidades no mesmo sistema, cada uma isolada da outra.
Como foi construído
Um app Next.js e um processo de tarefas em segundo plano, do mesmo código.
- Clean Architecture por módulo: domínio puro, casos de uso e adaptadores. Uma verificação automática barra qualquer dependência fora da regra.
- Toda escrita passa por um caso de uso, que grava a mudança, o evento de histórico e o webhook de saída na mesma transação.
- API com um esquema só: o mesmo esquema valida a chamada e gera a documentação.
- Regras no banco testadas de verdade: os testes aplicam as migrações reais em um Postgres que roda dentro do processo.
- Decisões registradas: mais de 30 registros de decisão de arquitetura (ADRs).
Stack por camada
- Telas: Next.js 16, React 19, Tailwind 4, shadcn/ui, TanStack Query, dnd-kit
- API: Hono, zod, OpenAPI 3.1, Scalar
- Dados: PostgreSQL, Drizzle, pg-boss
- Qualidade: TypeScript, Vitest, ESLint, dependency-cruiser, CI no GitHub Actions
- Entrega: Docker, nginx, VPS
Telas
Os dados que aparecem nas telas são fictícios.
(abre a imagem inteira em outra aba)Ficha do card: dados, campanha de origem, responsáveis, anotações, anexos e o histórico completo do lead.
(abre a imagem inteira em outra aba)Dashboard: oito visões sobre o mesmo período, por unidade. Cada indicador explica como é calculado.
(abre a imagem inteira em outra aba)Funil por campanha: o que cada anúncio trouxe, do lead ao fechamento.
(abre a imagem inteira em outra aba)Agenda por profissional. Marcar uma consulta move o card no funil, e o comparecimento volta para o CRM.
(abre a imagem inteira em outra aba)Ficha do paciente: consultas, indicadores, retornos, anamnese e arquivos.
(abre a imagem inteira em outra aba)Documentação da API pública, gerada do mesmo esquema que valida as chamadas.