CRM · Plataforma web full-stack · Automação com IA
Easy Control
Do formulário ao contrato: a IA qualifica, o CEO aprova e o follow-up pelo WhatsApp roda sozinho, com cada envio monitorado.
- Cliente
- Bolsa Atleta USA
- Cargo
- Engenheiro de Software Full-stack
- Ano
- 2026
- Tecnologias
- Next.js
- React
- TypeScript
- Node.js
- PostgreSQL (Supabase)
- Google Cloud
- Gemini API
- GitHub Actions































Contexto
A Bolsa Atleta USA assessora atletas brasileiros na busca por bolsas esportivas em escolas e universidades dos Estados Unidos. O projeto cobre o sistema completo: o site público com formulário de avaliação e o Easy Control, plataforma interna de CRM e operações usada pelo CEO e pela equipe na gestão comercial, em contratos e no acompanhamento das famílias. Construí tudo como único engenheiro, com desenvolvimento assistido por IA (Claude Code), e o sistema está em produção.
Desafio
Leads de campanhas pagas chegam a qualquer hora e perdem interesse rapidamente. A maioria dos atletas é menor de idade e a decisão envolve investimento alto, então cada mensagem automática exige controle de elegibilidade, horário e destinatário. O sistema precisava automatizar o funil de vendas sem remover a aprovação humana e monitorar a entrega de forma contínua, inclusive diante de falhas silenciosas de provedores externos.
Resultados
- Cloud Functions em produção
- 27
- telas no Easy Control
- 60+
- pull requests integrados em 2026
- 410+
- arquivos de testes de guarda no CI
- 41
Principais entregas
- 01Arquitetei e desenvolvi o site público e o formulário multietapas em Next.js, React e TypeScript, com internacionalização em português, inglês e espanhol e atribuição de campanha (UTM, origem e dispositivo) gravada em cada lead no PostgreSQL (Supabase).
- 02Integrei o Gemini à qualificação de leads com prompt versionado, score financeiro auditável de 0 a 100, cinco estados de classificação e segunda passagem adversarial, mantendo a aprovação humana antes do primeiro contato ativo com cada lead do formulário.
- 03Desenvolvi o Easy Control em Next.js, React e Supabase, plataforma com mais de 60 telas (pipeline Kanban com etapas editáveis, War Room executivo e fila de aprovação), com controle de acesso por papel (RBAC) e Row Level Security no PostgreSQL.
- 04Criei a biblioteca de componentes e o design system do Easy Control com React, TypeScript e Tailwind CSS (tokens de cor, tipografia, raios e sombras, variantes tipadas com class-variance-authority, componentes de domínio com drag and drop e tema claro e escuro), aplicado a todas as telas.
- 05Desenvolvi o backend serverless com 27 Cloud Functions em Node.js 20 no Google Cloud (qualificação por IA, cadência de WhatsApp via Z-API, motor de fluxos de conversa, calendário, cobrança e sincronizações), com envio idempotente e duas travas de envio independentes no motor de fluxos.
- 06Implementei observabilidade com 23 checks de saúde automáticos (Cloud Function + Cloud Scheduler), alertas por WhatsApp e e-mail e dead-man's switch no GitHub Actions, além de CI/CD com 41 arquivos de testes de guarda que bloqueiam o merge em caso de regressão.
Telas e componentes
Funil no celular
O funil começa no site público, em português, inglês e espanhol. O formulário mobile-first registra a faixa de investimento que alimenta o score da IA, e o lead aprovado recebe o convite e a confirmação da reunião pelo WhatsApp. A conversa foi recriada com dados fictícios.
Aprovação humana
O dossiê de aprovação reúne o score auditável e a justificativa do Gemini para o CEO decidir. Tela recriada com dados fictícios.

Pipeline com etapas editáveis
O pipeline Kanban tem etapas editáveis, e a primeira coluna é a fila de aprovação humana. Tela recriada com dados fictícios.

War Room
O War Room reúne receita, funil, caixa e metas editáveis numa única tela. Tela recriada com dados fictícios.

Fluxos de conversa
O motor de fluxos de conversa independe do canal, mede a captura de leads e está ativo no WhatsApp. Tela recriada com dados fictícios.

Observabilidade
O monitor de observabilidade roda checks automáticos a cada 30 minutos e confirma a entrega real das mensagens. Tela recriada com dados fictícios.

Fundamentos do design system
Os tokens do tema claro e do escuro alimentam primitivos com variantes tipadas, reutilizados nas mais de 60 telas.

Anatomia do card
O card do Kanban é montado a partir de primitivos e compõe a coluna e o board, com cada estado vindo das classes do próprio componente.

Componentes de domínio
Os componentes de domínio cobrem carregamento, arraste, vazio e erro, e trocam de tema apenas pelos tokens.

Arquitetura
O quadro segue a jornada do lead de 1 a 10: do formulário em Next.js ao PostgreSQL no Supabase, das 27 Cloud Functions no Google Cloud à aprovação do CEO e à entrega confirmada no WhatsApp, com o vigia fora do Google Cloud e as decisões e trade-offs ao lado.

Funcionalidades e as dores que resolvem
Cada funcionalidade nasceu de um problema real da operação.
01
Qualificação de leads por IA
- Dor
- Com a operação tocada por duas pessoas, cada reunião conta. O que mais custava eram horas de reunião com leads de perfil intermediário e formulários preenchidos com dados aleatórios.
- Solução
- Cada formulário novo aciona uma Cloud Function que envia os dados sanitizados ao Gemini (prompt versionado, temperatura 0) e recebe um score financeiro de 0 a 100 baseado no tier de profissão. Uma trava em código impede que dado sujo saia como QUENTE ou MORNO, e a faixa do meio recebe uma segunda passagem adversarial.
Impacto: Score de 0 a 100 · 5 classificações
02
Fila de aprovação humana
- Dor
- Na versão totalmente automática, o lead QUENTE ou MORNO recebia o primeiro WhatsApp sem passar por nenhuma revisão humana: quem decidia o convite era só a IA.
- Solução
- Leads QUENTE e MORNO entram como pendentes na primeira coluna do pipeline, com o dossiê da IA, e o CEO é avisado na hora. Só a aprovação cria o negócio e libera o contato; uma requalificação nunca sobrescreve a decisão, e pendência com mais de 24 horas gera alerta.
Impacto: 100% do 1º WhatsApp após aprovação
03
Cadência de WhatsApp
- Dor
- Leads de campanha perdem interesse rápido, e o follow-up precisa sair na hora certa e só para quem deve: basta um filtro de elegibilidade faltando para uma mensagem chegar a quem está fora do perfil ou fora do momento certo.
- Solução
- Schedulers de hora em hora enviam a mensagem inicial e dois follow-ups via Z‑API, filtrando classe, timing e aprovação, e param quando o lead marca reunião. Cada envio é reservado com compare-and-set (CAS) atômico antes de sair, e um teste de guarda no CI bloqueia o merge se algum filtro sumir.
Impacto: Padrão: 22 h, 48 h e 7 dias
04
Observabilidade
- Dor
- Um provedor de WhatsApp pode responder 200 OK sem entregar nada: sem monitoramento da entrega real, a conexão cai, as filas parecem em dia e ninguém percebe.
- Solução
- Uma Cloud Function busca sinais positivos de vida a cada 30 minutos, como o estado da conexão e a cópia de cada mensagem que o próprio WhatsApp devolve como prova de entrega. Os alertas saem por WhatsApp e por e-mail, e um dead-man's switch no GitHub Actions avisa se o próprio monitor parar.
Impacto: Até 23 checks a cada 30 min
05
Detecção de reunião pelo Calendar
- Dor
- Reuniões marcadas pelo lead podiam não chegar ao CRM, sem erro nem log, quando o telefone vinha num formato que o parser não reconhecia (como o DDD entre parênteses colado ao número). E, se o push do Google falhasse, não havia segunda chance.
- Solução
- Uma push notification do Google Calendar casa o evento com o lead (e‑mail ou 10 últimos dígitos do telefone), confirma a reunião ao lead com o link do Meet, avisa o CEO e move o negócio para Reunião marcada. Uma varredura de hora em hora recupera o que o push não entregou.
Impacto: Push + varredura a cada hora
06
Pipeline com etapas editáveis
- Dor
- O processo comercial do CEO tinha 9 estágios que não coincidiam com as etapas gravadas no banco, e mudar um nome exigiria migração de banco e alterações espalhadas pelo código.
- Solução
- Kanban com arrastar e soltar em que o rótulo e a ordem de cada coluna vêm da configuração, não do enum do banco. Ao clicar na coluna, o CEO edita nome, automações e agentes de IA, e pode criar colunas próprias.
Impacto: 9 estágios + até 6 colunas próprias
07
War Room
- Dor
- Os leads chegavam a uma planilha do Google, e não havia uma visão única de receita, funil e caixa.
- Solução
- Painel executivo que reúne MRR, ARR, pipeline total, ticket médio e conversão, com atalhos para as análises de meta, funil, caixa, risco, posicionamento e famílias, tudo calculado a partir dos dados do próprio CRM.
Impacto: 6 painéis executivos
08
Fluxos de conversa
- Dor
- A ferramenta de automação de conversas usada antes media disparos, não resultados: havia muita atividade, mas quase nenhum contato, e-mail ou telefone capturado.
- Solução
- Motor próprio e independente de canal, ativo no WhatsApp e pronto para o Instagram (aguardando a revisão da Meta), com perguntas encadeadas e um bloco de captura que valida e-mail e telefone antes de gravar. Cada passo fica numa trilha append-only que mede a captura bloco a bloco.
Impacto: 2 travas de envio independentes
09
Automações sem código
- Dor
- Regras da operação, como tarefa para negociação parada ou aviso de parcela vencendo, não tinham como ser configuradas sem código.
- Solução
- Construtor visual de gatilho, condições e ações em que o CEO monta a regra. Uma Cloud Function executa as regras de hora em hora com compare-and-set, novas tentativas com backoff e pausa de 45 a 60 s entre envios de WhatsApp, e toda automação criada já nasce monitorada.
Impacto: 14 gatilhos e 7 tipos de ação
10
Transcrição das reuniões
- Dor
- A transcrição do Google Meet ficava num documento anexado ao evento, fora do histórico do lead no CRM.
- Solução
- Uma Cloud Function encontra o documento no evento do Calendar, exporta o texto pela Drive API, opcionalmente resume com o Gemini e grava tudo no detalhe do negócio, também sob demanda na aba Reunião.
Impacto: Captura a cada 2 h, sem duplicar
11
Formulário de avaliação
- Dor
- Os leads chegam de campanhas pagas pelo celular, alguns de fora do Brasil, e a avaliação é longa. Um formulário preso a telefone e CEP brasileiros deixaria essas famílias de fora, e fechar a aba no meio faria perder as respostas.
- Solução
- Formulário mobile-first de 12 etapas em 2 estágios, em português, inglês e espanhol, com telefone internacional, endereço adaptado ao país e rascunho salvo no aparelho. Cada envio grava UTMs, página de entrada, CTA e dispositivo junto com o lead.
Impacto: 12 etapas em 3 idiomas
12
CAC e gasto com Meta Ads
- Dor
- O gasto com marketing era lançado à mão, por canal e por mês, sem ligação com as campanhas que geravam cada lead.
- Solução
- Uma sincronização diária com a Marketing API grava o gasto por campanha e por dia e cruza o ID da campanha com o utm_id de cada lead, calculando o CAC por lead, por lead qualificado e por cliente.
Impacto: CAC em 3 etapas do funil























