CRM B2B para gestão do ciclo de vida de leads: captação via webhook, atendimento por vendedor, alertas de leads parados e visão gerencial em dashboard.
O Syntra organiza a operação comercial em torno do lead. Cada lead percorre um ciclo de vida com status bem definidos, é atribuído a um vendedor responsável e acumula um histórico de interações e follow-ups. O sistema captura leads automaticamente por webhook (integração com fonte externa), sinaliza proativamente os que estão "esfriando" e consolida os números em um dashboard gerencial.
Aplicação server-side renderizada com Thymeleaf, autenticação e autorização com Spring Security, persistência com JPA/Hibernate e schema versionado com Flyway.
- Ciclo de vida do lead com status (
NOVO,CADASTRADO_NO_SITE,EM_ATENDIMENTO,AGUARDANDO_RETORNO,CONVERTIDO,PERDIDO,EM_OUTRO_ATENDIMENTO) - Captação via webhook com token secreto e integração externa de leads
- Central de Atenção — alertas de leads parados, calculados por status × dias parados, exibidos apenas para o vendedor responsável, com severidade (Atenção / Urgente)
- Sino de notificações no topo, com contagem atualizada por polling (~30s)
- Dashboard com indicadores da operação
- Atribuição por vendedor e RBAC por perfil de usuário
- Timeline de interações e follow-ups por lead
- Exportação de leads em XLSX (ExcelJS)
- Painel administrativo e gestão de conta do usuário
- Busca global e filtros na listagem de leads
| Camada | Tecnologia |
|---|---|
| Linguagem | Java 17 |
| Framework | Spring Boot 3.3.5 (Web, Data JPA, Validation) |
| Segurança | Spring Security 6 + Thymeleaf Extras |
| View | Thymeleaf (SSR) + JS/CSS |
| Persistência | PostgreSQL (produção) · H2 em memória (dev) |
| Migrations | Flyway |
| Build | Maven |
| Container / Deploy | Docker · Fly.io |
Perfil dev sobe com banco H2 em memória — não requer PostgreSQL local.
mvn spring-boot:run -Dspring-boot.run.profiles=devAplicação em http://localhost:8080.
As migrations Flyway e o seed inicial são aplicados automaticamente no boot.
Baseadas em .env.example:
| Variável | Descrição |
|---|---|
DATABASE_URL |
String JDBC do PostgreSQL (ex.: Neon), com sslmode=require |
WEBHOOK_SECRET |
Token que valida as chamadas do webhook de leads |
DIVIA_API_BASE_URL / DIVIA_API_TOKEN |
Integração com a fonte externa de leads |
ADMIN_EMAIL / ADMIN_PASSWORD |
Credenciais iniciais do admin (apenas primeiro boot) |
PORT |
Porta HTTP (padrão 8080) |
⚠️ Nunca faça commit de valores reais. Use variáveis de ambiente / secrets do provedor.
src/main/java/com/syntra/
├─ config/ # configuração (segurança, seed dev)
├─ controller/ # rotas web (Auth, Dashboard, Lead, Admin, Conta)
│ └─ api/ # endpoints JSON (leads, alertas, webhook)
├─ dto/ # objetos de transferência (inclui divia/)
├─ model/ # entidades JPA
│ └─ enums/ # StatusLead, Perfil, SeveridadeAlerta, JornadaLead...
├─ repository/ # Spring Data JPA
└─ service/ # regras de negócio (alertas, leads, integração)
src/main/resources/db/ # migrations Flyway (V1..V12) + scripts H2
Containerizado via Dockerfile e publicado no Fly.io (fly.toml, região gru):
flyctl deploy --remote-only --ha=falseDesenvolvido por Matheus Trajano · LinkedIn