11 KiB
11 KiB
Aggios App
Plataforma composta por serviços de autenticação, painel administrativo (superadmin) e site institucional da Aggios, orquestrados via Docker Compose.
Visão geral
- Objetivo: permitir que superadministradores cadastrem e gerenciem agências (tenants) enquanto o site institucional apresenta informações públicas da empresa.
- Stack: Go (backend), Next.js 16 (dashboard e site), PostgreSQL, Traefik, Docker.
- Status: Sistema multi-tenant completo com Soluções Alpha (ERP e Documentos), CRM Beta (leads, funis, campanhas), portal do cliente, segurança cross-tenant validada, branding dinâmico e file serving via API.
Componentes principais
backend/: API Go com serviços de autenticação, operadores e CRUD de agências (endpoints/api/admin/agenciese/api/admin/agencies/{id}). Inclui handlers para CRM (leads, funis, campanhas), portal do cliente e exportação de dados.front-end-agency/: Painel Next.js para agências - branding dinâmico, upload de logos, gestão de perfil, CRM completo com Kanban, portal de cadastro de clientes e autenticação tenant-aware.front-end-dash.aggios.app/: painel Next.js – login do superadmin, listagem de agências, exibição detalhada e exclusão definitiva.frontend-aggios.app/: site institucional Next.js com suporte a temas claro/escuro e compartilhamento de tokens de design.backend/internal/data/postgres/: scripts de inicialização do banco (estrutura base de tenants e usuários) + migrações para CRM, funis e autenticação de clientes.traefik/: reverse proxy e certificados automatizados.
Funcionalidades entregues
v2.0 - Alpha: CRM, ERP e Documentos (29/12/2025)
- 🏢 ERP Alpha:
- Módulo inicial de gestão empresarial integrado ao dashboard
- Estrutura base para controle financeiro e operacional
- 📄 Gestão de Documentos (Docs) Alpha:
- Repositório centralizado de arquivos por tenant
- Organização de documentos técnicos, comerciais e operacionais
- Visualização integrada no painel da agência
- 🚀 CRM Evolução:
- Refinamento dos fluxos de leads e funis
- Preparação para automações de vendas
v1.5 - CRM Beta: Leads, Funis e Portal do Cliente (24/12/2025)
-
🎯 Gestão Completa de Leads:
- CRUD completo de leads com status, origem e pontuação
- Sistema de importação de leads (CSV/Excel)
- Filtros avançados por status, origem, responsável e cliente
- Associação de leads a clientes específicos
- Timeline de atividades e histórico de interações
-
📊 Funis de Vendas (Sales Funnels):
- Criação e gestão de múltiplos funis personalizados
- Board Kanban interativo com drag-and-drop
- Estágios customizáveis com cores e ícones
- Vinculação de funis a campanhas específicas
- Métricas e conversão por estágio
-
🎪 Gestão de Campanhas:
- Criação de campanhas com período e orçamento
- Vinculação de campanhas a clientes específicos
- Acompanhamento de leads gerados por campanha
- Dashboard de performance de campanhas
-
👥 Portal do Cliente:
- Sistema de registro público de clientes
- Autenticação dedicada para clientes (JWT separado)
- Dashboard personalizado com estatísticas
- Visualização de leads e listas compartilhadas
- Gestão de perfil e alteração de senha
-
🔗 Compartilhamento de Listas:
- Tokens únicos para compartilhamento de leads
- URLs públicas para visualização de listas específicas
- Controle de acesso via token com expiração
-
👔 Gestão de Colaboradores:
- Sistema de permissões (Owner, Admin, Member, Readonly)
- Middleware de autenticação unificada (agência + cliente)
- Controle granular de acesso a funcionalidades
- Atribuição de leads a colaboradores específicos
-
📤 Exportação de Dados:
- Exportação de leads em CSV
- Filtros aplicados na exportação
- Formatação otimizada para planilhas
v1.4 - Segurança Multi-tenant e File Serving (13/12/2025)
-
🔒 Segurança Cross-Tenant Crítica:
- Validação de tenant_id em endpoints de login (bloqueio de cross-tenant authentication)
- Validação de tenant em todas rotas protegidas via middleware
- Mensagens de erro genéricas (sem exposição de arquitetura multi-tenant)
- Logs detalhados de tentativas de acesso cross-tenant bloqueadas
-
📁 File Serving via API:
- Nova rota
/api/files/{bucket}/{path}para servir arquivos do MinIO através do backend Go - Eliminação de dependência de DNS (
files.localhost) - arquivos servidos viaapi.localhost - Headers de cache otimizados (Cache-Control: public, max-age=31536000)
- CORS e content-type corretos automaticamente
- Nova rota
-
🎨 Melhorias de UX:
- Mensagens de erro humanizadas no formulário de login (sem pop-ups/toasts)
- Erros inline com ícones e cores apropriadas
- Feedback em tempo real ao digitar (limpeza automática de erros)
- Mensagens específicas para cada tipo de erro (401, 403, 404, 429, 5xx)
-
🔧 Melhorias Técnicas:
- Next.js middleware injetando headers
X-Tenant-Subdomainpara routing correto - TenantDetector middleware prioriza headers customizados sobre Host
- Upload de logos retorna URLs via API ao invés de MinIO direto
- Configuração MinIO com variáveis de ambiente
MINIO_SERVER_URLeMINIO_BROWSER_REDIRECT_URL
- Next.js middleware injetando headers
v1.3 - Branding Dinâmico e Favicon (12/12/2025)
- Branding Multi-tenant: Logo, favicon e cores personalizadas por agência
- Favicon Dinâmico: Atualização em tempo real via localStorage e SSR metadata
- Upload de Arquivos: Sistema de upload para MinIO com bucket público
- Rate Limiting: 1000 requisições/minuto por IP
v1.2 - Redesign Interface Flat
- Adoção de design "Flat" (sem sombras), focado em bordas e limpeza visual
- Gestão avançada de agências com filtros robustos
- Detalhamento completo com visualização de branding
v1.1 - Fundação Multi-tenant
- Login de Superadmin com JWT
- Cadastro de Agências
- Proxy Interno Next.js para chamadas autenticadas
- Site Institucional com dark mode
Executando o projeto
- Pré-requisitos: Docker Desktop e Node.js 20+ (para utilitários opcionais).
- Variáveis: ajustar
.envconforme referências existentes (docker-compose.yml, arquivosconfig). - Subir os serviços:
docker-compose up --build - Hosts locais:
- Painel SuperAdmin:
http://dash.localhost - Painel Agência:
http://{agencia}.localhost(ex:http://idealpages.localhost) - Portal do Cliente:
http://{agencia}.localhost/cliente(cadastro e área logada) - Site:
http://aggios.app.localhost - API:
http://api.localhost - Console MinIO:
http://minio.localhost(admin: minioadmin / M1n10_S3cur3_P@ss_2025!)
- Painel SuperAdmin:
- Credenciais padrão: ver
backend/internal/data/postgres/init-db.sqlpara usuário superadmin seed.
Segurança
- ✅ Cross-Tenant Authentication: Usuários não podem fazer login em agências que não pertencem
- ✅ Tenant Isolation: Todas rotas protegidas validam tenant_id no JWT vs tenant_id do contexto
- ✅ Erro Handling: Mensagens genéricas que não expõem arquitetura interna
- ✅ JWT Validation: Tokens validados em cada requisição autenticada
- ✅ Rate Limiting: 1000 req/min por IP para prevenir brute force
Estrutura de diretórios (resumo)
backend/ API Go (config, domínio, handlers, serviços)
internal/
api/
handlers/
crm.go 🎯 CRUD de leads, funis e campanhas
customer_portal.go 👥 Portal do cliente (auth, dashboard, leads)
export.go 📤 Exportação de dados (CSV)
collaborator.go 👔 Gestão de colaboradores
files.go Handler para servir arquivos via API
auth.go 🔒 Validação cross-tenant no login
middleware/
unified_auth.go 🔐 Autenticação unificada (agência + cliente)
customer_auth.go 🔑 Middleware de autenticação de clientes
collaborator_readonly.go 📖 Controle de permissões readonly
auth.go 🔒 Validação tenant em rotas protegidas
tenant.go 🔧 Detecção de tenant via headers
domain/
auth_unified.go 🆕 Domínios para autenticação unificada
repository/
crm_repository.go 🆕 Repositório de dados do CRM
backend/internal/data/postgres/ Scripts SQL de seed
migrations/
015_create_crm_leads.sql 🆕 Estrutura de leads
020_create_crm_funnels.sql 🆕 Sistema de funis
018_add_customer_auth.sql 🆕 Autenticação de clientes
front-end-agency/ Dashboard Next.js para Agências
app/
(agency)/
crm/
leads/ 🆕 Gestão de leads
funis/[id]/ 🆕 Board Kanban de funis
campanhas/ 🆕 Gestão de campanhas
cliente/
cadastro/ 🆕 Registro público de clientes
(portal)/ 🆕 Portal do cliente autenticado
share/leads/[token]/ 🆕 Compartilhamento de listas
login/page.tsx Login com mensagens humanizadas
components/
crm/
KanbanBoard.tsx 🆕 Board Kanban drag-and-drop
CRMCustomerFilter.tsx 🆕 Filtros avançados de CRM
team/
TeamManagement.tsx 🆕 Gestão de equipe e permissões
middleware.ts Injeção de headers tenant
front-end-dash.aggios.app/ Dashboard Next.js Superadmin
frontend-aggios.app/ Site institucional Next.js
traefik/ Regras de roteamento e TLS
1. docs/ Documentação funcional e técnica
Testes e validação
- Consultar
1. docs/TESTING_GUIDE.mdpara cenários funcionais. - Testes de Segurança:
- ✅ Tentativa de login cross-tenant retorna 403
- ✅ JWT de uma agência não funciona em outra agência
- ✅ Logs registram tentativas de acesso cross-tenant
- Testes de File Serving:
- ✅ Upload de logo gera URL via API (
http://api.localhost/api/files/...) - ✅ Imagens carregam sem problemas de CORS ou DNS
- ✅ Cache headers aplicados corretamente
- ✅ Upload de logo gera URL via API (
Próximos passos sugeridos
- Implementar soft delete e trilhas de auditoria para exclusão de agências
- Adicionar validação de permissões por tenant em rotas de files (se necessário)
- Expandir testes automatizados (unitários e e2e) focados no fluxo do dashboard
- Disponibilizar pipeline CI/CD com validações de lint/build
Repositório
- Principal: https://git.stackbyte.cloud/erik/aggios.app.git
- Branch: 2.0-crm-erp-doc (v2.0 - Soluções Alpha ERP e Documentos + CRM)