Pular para o conteúdo
Todos os projetos

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

  1. 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).
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  1. 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.

    • Página inicial de bolsaatletausa.com no celular: logotipo da Bolsa Atleta USA, título Educação Esportiva Inteligente, selo Acompanhamento ativo em cada etapa, texto sobre projetos da High School à universidade e botão bordô Iniciar avaliação estratégica.
      Página inicial de bolsaatletausa.com no celular: logotipo da Bolsa Atleta USA, título Educação Esportiva Inteligente, selo Acompanhamento ativo em cada etapa, texto sobre projetos da High School à universidade e botão bordô Iniciar avaliação estratégica.
    • Etapa Estrutura Estratégica do formulário no celular: texto sobre o investimento anual em dólar, a pergunta sobre quanto a família está preparada para investir e cinco faixas de US$ 15.000 a US$ 70.000 em cartões, com uma selecionada; rodapé Etapa 2 de 2, 75% completo.
      Etapa Estrutura Estratégica do formulário no celular: texto sobre o investimento anual em dólar, a pergunta sobre quanto a família está preparada para investir e cinco faixas de US$ 15.000 a US$ 70.000 em cartões, com uma selecionada; rodapé Etapa 2 de 2, 75% completo.
    • Conversa de WhatsApp da Bolsa Atleta USA com uma mãe: mensagem informando que o perfil do atleta foi selecionado, com link para agendar a Reunião Estratégica Individual, resposta da família, confirmação automática da reunião com data, horário e link do Google Meet, e a resposta final da família confirmando presença.
      Conversa de WhatsApp da Bolsa Atleta USA com uma mãe: mensagem informando que o perfil do atleta foi selecionado, com link para agendar a Reunião Estratégica Individual, resposta da família, confirmação automática da reunião com data, horário e link do Google Meet, e a resposta final da família confirmando presença.
  2. 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.

    Janela de aprovação de leads sobre o pipeline: à esquerda a fila ordenada por score, à direita o dossiê do atleta com a pré-qualificação da IA — score financeiro 82, tier de profissão A, prioridade esportiva alta, sinais de reforço e de alerta — e os botões Reprovar e Aprovar lead.
    Janela de aprovação de leads sobre o pipeline: à esquerda a fila ordenada por score, à direita o dossiê do atleta com a pré-qualificação da IA — score financeiro 82, tier de profissão A, prioridade esportiva alta, sinais de reforço e de alerta — e os botões Reprovar e Aprovar lead.
  3. 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.

    Kanban do pipeline de vendas do Easy Control: coluna laranja de leads aguardando aprovação, seguida de Lead, Reunião marcada, Reunião e Diagnóstico, com cards de atletas mostrando valor, plano, próxima ação e selos de prioridade e de qualificação por IA; acima, indicadores do pipeline e filtros por temperatura, plano e atraso.
    Kanban do pipeline de vendas do Easy Control: coluna laranja de leads aguardando aprovação, seguida de Lead, Reunião marcada, Reunião e Diagnóstico, com cards de atletas mostrando valor, plano, próxima ação e selos de prioridade e de qualificação por IA; acima, indicadores do pipeline e filtros por temperatura, plano e atraso.
  4. War Room

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

    War Room executivo do Easy Control, com o logotipo da marca no alto da barra lateral: receita do mês com gráfico de área de 12 meses e progresso da meta, cartões de pipeline total, conversão e famílias ativas, metas estratégicas do ano e seis atalhos para meta, funil, caixa, risco, posicionamento e experiência das famílias.
    War Room executivo do Easy Control, com o logotipo da marca no alto da barra lateral: receita do mês com gráfico de área de 12 meses e progresso da meta, cartões de pipeline total, conversão e famílias ativas, metas estratégicas do ano e seis atalhos para meta, funil, caixa, risco, posicionamento e experiência das famílias.
  5. 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.

    Construtor de fluxos de conversa do WhatsApp no Easy Control: gatilho de mensagem com palavra-chave, blocos encadeados de mensagem, pergunta com opções, classificação por IA, captura para o funil e passagem para humano, cada um com quantos contatos chegaram e quantos seguiram; ao lado, o funil de captura, as travas de envio com o Instagram aguardando liberação e o assistente que monta fluxos com IA.
    Construtor de fluxos de conversa do WhatsApp no Easy Control: gatilho de mensagem com palavra-chave, blocos encadeados de mensagem, pergunta com opções, classificação por IA, captura para o funil e passagem para humano, cada um com quantos contatos chegaram e quantos seguiram; ao lado, o funil de captura, as travas de envio com o Instagram aguardando liberação e o assistente que monta fluxos com IA.
  6. 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.

    Monitor de filas da observabilidade do Easy Control: status geral Tudo operacional, indicadores de conexão do WhatsApp, qualificações e entregas confirmadas, cinco automações operacionais, seis verificações da fila com status OK e o fluxo do formulário até a reunião.
    Monitor de filas da observabilidade do Easy Control: status geral Tudo operacional, indicadores de conexão do WhatsApp, qualificações e entregas confirmadas, cinco automações operacionais, seis verificações da fila com status OK e o fluxo do formulário até a reunião.
  7. Fundamentos do design system

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

    Prancha do design system do Easy Control, fundamentos e primitivos, com o símbolo da marca, um bloco dividido em três estágios de verde, ao lado do título: dez tokens de cor em pares claro e escuro com hexadecimais (primary e ec-stage-2 nos verdes floresta e pinho da marca, que no tema escuro viram menta e jade claro, gradiente, texto, superfícies e cores de status); escala tipográfica Inter; raios de 6 a 20 px, quatro níveis de sombra e o material liquid glass sobre manchas da marca; botões nas variantes primary, secondary, ghost, brand e destructive nos estados padrão, hover e desabilitado, tamanhos e foco de teclado; badges por tom, classificações QUENTE, MORNO, FRIO, INVÁLIDO e INCOMPLETO, planos, prioridades e variações percentuais; switches, abas segmentadas e sublinhadas, campos de texto e cabeçalho de página.
    Prancha do design system do Easy Control, fundamentos e primitivos, com o símbolo da marca, um bloco dividido em três estágios de verde, ao lado do título: dez tokens de cor em pares claro e escuro com hexadecimais (primary e ec-stage-2 nos verdes floresta e pinho da marca, que no tema escuro viram menta e jade claro, gradiente, texto, superfícies e cores de status); escala tipográfica Inter; raios de 6 a 20 px, quatro níveis de sombra e o material liquid glass sobre manchas da marca; botões nas variantes primary, secondary, ghost, brand e destructive nos estados padrão, hover e desabilitado, tamanhos e foco de teclado; badges por tom, classificações QUENTE, MORNO, FRIO, INVÁLIDO e INCOMPLETO, planos, prioridades e variações percentuais; switches, abas segmentadas e sublinhadas, campos de texto e cabeçalho de página.
  8. 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.

    Prancha de anatomia e composição do Easy Control: o card de negócio do Kanban ampliado com seis marcadores numerados (faixa da etapa, atleta e responsável, plano, valor e tempo na etapa, próxima ação e selos) ligados às propriedades tipadas do componente e à sua assinatura em JSX; ao lado, a cadeia de composição Badge, DealCard, PipelineColumn e PipelineBoard; abaixo, o mesmo card nos estados padrão, hover, arrastando, incompleto com ação atrasada e fora do timing.
    Prancha de anatomia e composição do Easy Control: o card de negócio do Kanban ampliado com seis marcadores numerados (faixa da etapa, atleta e responsável, plano, valor e tempo na etapa, próxima ação e selos) ligados às propriedades tipadas do componente e à sua assinatura em JSX; ao lado, a cadeia de composição Badge, DealCard, PipelineColumn e PipelineBoard; abaixo, o mesmo card nos estados padrão, hover, arrastando, incompleto com ação atrasada e fora do timing.
  9. Componentes de domínio

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

    Prancha de componentes de domínio do Easy Control com estados que as telas não mostram: coluna do Kanban destacada como alvo de soltura com um card sendo arrastado, esqueleto de carregamento, coluna de aprovação vazia e coluna oculta durante a reordenação; cartões de indicador com variação invertida; dossiê de pré-qualificação na variante MORNO com score 58; automação pausada; blocos de fluxo de condição e de espera; checks de saúde OK, Atenção e Falha; notificação de lead aprovado; e, num painel escuro, os mesmos componentes com os tokens do tema escuro.
    Prancha de componentes de domínio do Easy Control com estados que as telas não mostram: coluna do Kanban destacada como alvo de soltura com um card sendo arrastado, esqueleto de carregamento, coluna de aprovação vazia e coluna oculta durante a reordenação; cartões de indicador com variação invertida; dossiê de pré-qualificação na variante MORNO com score 58; automação pausada; blocos de fluxo de condição e de espera; checks de saúde OK, Atenção e Falha; notificação de lead aprovado; e, num painel escuro, os mesmos componentes com os tokens do tema escuro.
  10. 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.

    Quadro de arquitetura do Easy Control no estilo de um board do Miro, do formulário ao contrato, com os números 27 Cloud Functions em produção, 17 jobs no Cloud Scheduler, 131 migrations versionadas, mais de 200 políticas de RLS, 23 checks de saúde a cada 30 min e 41 arquivos de testes de guarda. Oito zonas: Clientes e canais (família do atleta, WhatsApp, Instagram aguardando a revisão da Meta e CEO e equipe com 4 papéis); Front-end na Vercel (site público em três idiomas, formulário multietapas, link curto, o Easy Control em App Router com Server Components, a inbox de WhatsApp, o tracking e o monorepo Turborepo com pnpm); Dados no Supabase (PostgREST, Database Webhooks, o PostgreSQL como fonte única do CRM, Supabase Auth, Storage, funções SQL e triggers e as configurações com gates fail-closed); Google Cloud na região us-central1, com os 17 jobs do Cloud Scheduler e seus crons, as filas de WhatsApp, os motores de automação e de fluxos, a observabilidade e as funções de borda, webhooks e APIs; APIs externas (Gemini 2.5 Flash, Resend com fallback para o Brevo, Sheets, Calendar, Drive, Gmail, Z-API, Marketing API e Instagram); CI/CD no GitHub Actions, com o CI que bloqueia o merge, develop para UAT, main para PRD e o dead-man's switch; Segurança, fail-closed por padrão; e Decisões e trade-offs em notas adesivas. A jornada do lead, numerada de 1 a 10, vai do formulário ao upsert no PostgREST, ao webhook do banco que aciona 3 funções, à nota do Gemini, à aprovação do CEO, à fila com CAS, à entrega pela Z-API, ao push do Calendar, ao espelho de cada mensagem e ao heartbeat lido pelo vigia no GitHub Actions. Linhas tracejadas azuis marcam o assíncrono, e as vermelhas, falha e fallback.
    Quadro de arquitetura do Easy Control no estilo de um board do Miro, do formulário ao contrato, com os números 27 Cloud Functions em produção, 17 jobs no Cloud Scheduler, 131 migrations versionadas, mais de 200 políticas de RLS, 23 checks de saúde a cada 30 min e 41 arquivos de testes de guarda. Oito zonas: Clientes e canais (família do atleta, WhatsApp, Instagram aguardando a revisão da Meta e CEO e equipe com 4 papéis); Front-end na Vercel (site público em três idiomas, formulário multietapas, link curto, o Easy Control em App Router com Server Components, a inbox de WhatsApp, o tracking e o monorepo Turborepo com pnpm); Dados no Supabase (PostgREST, Database Webhooks, o PostgreSQL como fonte única do CRM, Supabase Auth, Storage, funções SQL e triggers e as configurações com gates fail-closed); Google Cloud na região us-central1, com os 17 jobs do Cloud Scheduler e seus crons, as filas de WhatsApp, os motores de automação e de fluxos, a observabilidade e as funções de borda, webhooks e APIs; APIs externas (Gemini 2.5 Flash, Resend com fallback para o Brevo, Sheets, Calendar, Drive, Gmail, Z-API, Marketing API e Instagram); CI/CD no GitHub Actions, com o CI que bloqueia o merge, develop para UAT, main para PRD e o dead-man's switch; Segurança, fail-closed por padrão; e Decisões e trade-offs em notas adesivas. A jornada do lead, numerada de 1 a 10, vai do formulário ao upsert no PostgREST, ao webhook do banco que aciona 3 funções, à nota do Gemini, à aprovação do CEO, à fila com CAS, à entrega pela Z-API, ao push do Calendar, ao espelho de cada mensagem e ao heartbeat lido pelo vigia no GitHub Actions. Linhas tracejadas azuis marcam o assíncrono, e as vermelhas, falha e fallback.

Funcionalidades e as dores que resolvem

Cada funcionalidade nasceu de um problema real da operação.

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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. 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. 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. 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