Prepara versao dev 1.0
This commit is contained in:
21
1. docs/old/HOSTS.md
Normal file
21
1. docs/old/HOSTS.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# ==================================================
|
||||
# AGGIOS - Configuração de Hosts Local
|
||||
# ==================================================
|
||||
#
|
||||
# WINDOWS: Adicione estas linhas ao arquivo:
|
||||
# C:\Windows\System32\drivers\etc\hosts
|
||||
#
|
||||
# LINUX/MAC: Adicione estas linhas ao arquivo:
|
||||
# /etc/hosts
|
||||
#
|
||||
# ==================================================
|
||||
|
||||
127.0.0.1 aggios.local
|
||||
127.0.0.1 dash.aggios.local
|
||||
127.0.0.1 api.aggios.local
|
||||
127.0.0.1 traefik.aggios.local
|
||||
|
||||
# Ou use *.localhost (funciona sem editar hosts no Windows 10+)
|
||||
# http://localhost
|
||||
# http://dash.localhost
|
||||
# http://api.localhost
|
||||
108
1. docs/old/README.md
Normal file
108
1. docs/old/README.md
Normal file
@@ -0,0 +1,108 @@
|
||||
# 📚 Documentação - Aggios
|
||||
|
||||
Documentação centralizada do projeto Aggios.
|
||||
|
||||
## 📂 Estrutura
|
||||
|
||||
```
|
||||
1. docs/
|
||||
├── README.md ← Você está aqui
|
||||
├── design-system.md # Design System
|
||||
├── info-cadastro-agencia.md # Informações - Cadastro de Agência
|
||||
├── instrucoes-ia.md # Instruções para IA
|
||||
├── plano.md # Plano do Projeto
|
||||
├── projeto.md # Visão Geral do Projeto
|
||||
│
|
||||
└── backend-deployment/ # Documentação Backend + Traefik
|
||||
├── 00_START_HERE.txt # 👈 COMECE AQUI!
|
||||
├── INDEX.md # Índice completo
|
||||
├── QUICKSTART.md # 5 minutos para começar
|
||||
├── ARCHITECTURE.md # Design da arquitetura
|
||||
├── API_REFERENCE.md # Todos os endpoints
|
||||
├── DEPLOYMENT.md # Deploy e scaling
|
||||
├── SECURITY.md # Segurança e checklist
|
||||
├── TESTING_GUIDE.md # Como testar
|
||||
├── IMPLEMENTATION_SUMMARY.md # Resumo implementação
|
||||
└── README_IMPLEMENTATION.md # Status do projeto
|
||||
```
|
||||
|
||||
## 🚀 Começar Rápido
|
||||
|
||||
### 1️⃣ Backend + Traefik (Novo)
|
||||
👉 Leia: **[backend-deployment/00_START_HERE.txt](./backend-deployment/00_START_HERE.txt)**
|
||||
|
||||
Documentação completa do backend Go, Traefik, PostgreSQL, Redis e MinIO.
|
||||
|
||||
### 2️⃣ Projeto & Visão
|
||||
👉 Consulte:
|
||||
- [projeto.md](./projeto.md) - Visão geral do projeto
|
||||
- [plano.md](./plano.md) - Plano detalhado
|
||||
|
||||
### 3️⃣ Design & UX
|
||||
👉 Consulte:
|
||||
- [design-system.md](./design-system.md) - Design System
|
||||
|
||||
### 4️⃣ Informações Específicas
|
||||
👉 Consulte:
|
||||
- [info-cadastro-agencia.md](./info-cadastro-agencia.md) - Cadastro de agências
|
||||
- [instrucoes-ia.md](./instrucoes-ia.md) - Instruções para IA
|
||||
|
||||
## 📖 Documentação Backend em Detalhes
|
||||
|
||||
Pasta: `backend-deployment/`
|
||||
|
||||
| Documento | Descrição |
|
||||
|-----------|-----------|
|
||||
| **00_START_HERE.txt** | 👈 COMECE AQUI! Visão geral e primeiros passos |
|
||||
| **INDEX.md** | Índice completo e navegação |
|
||||
| **QUICKSTART.md** | Setup em 5 minutos |
|
||||
| **ARCHITECTURE.md** | Design da arquitetura (Go + Traefik + Multi-tenant) |
|
||||
| **API_REFERENCE.md** | Todos os endpoints com exemplos |
|
||||
| **DEPLOYMENT.md** | Guia de deploy e scaling |
|
||||
| **SECURITY.md** | Segurança, checklist produção e boas práticas |
|
||||
| **TESTING_GUIDE.md** | Como testar toda a stack |
|
||||
| **IMPLEMENTATION_SUMMARY.md** | Resumo do que foi implementado |
|
||||
| **README_IMPLEMENTATION.md** | Status do projeto e próximos passos |
|
||||
|
||||
## 🎯 Por Experiência
|
||||
|
||||
### 👶 Iniciante
|
||||
1. Leia [projeto.md](./projeto.md)
|
||||
2. Consulte [backend-deployment/QUICKSTART.md](./backend-deployment/QUICKSTART.md)
|
||||
3. Execute `docker-compose up -d`
|
||||
|
||||
### 👨💻 Desenvolvedor
|
||||
1. Estude [backend-deployment/ARCHITECTURE.md](./backend-deployment/ARCHITECTURE.md)
|
||||
2. Consulte [backend-deployment/API_REFERENCE.md](./backend-deployment/API_REFERENCE.md)
|
||||
3. Comece a codificar em `backend/`
|
||||
|
||||
### 🏗️ DevOps/Infrastructure
|
||||
1. Leia [backend-deployment/DEPLOYMENT.md](./backend-deployment/DEPLOYMENT.md)
|
||||
2. Revise [backend-deployment/SECURITY.md](./backend-deployment/SECURITY.md)
|
||||
3. Siga [backend-deployment/TESTING_GUIDE.md](./backend-deployment/TESTING_GUIDE.md)
|
||||
|
||||
### 🎨 Designer/UX
|
||||
1. Consulte [design-system.md](./design-system.md)
|
||||
2. Revise [plano.md](./plano.md)
|
||||
|
||||
## 📞 Navegação Rápida
|
||||
|
||||
**Backend:**
|
||||
- Setup → [QUICKSTART.md](./backend-deployment/QUICKSTART.md)
|
||||
- Arquitetura → [ARCHITECTURE.md](./backend-deployment/ARCHITECTURE.md)
|
||||
- API → [API_REFERENCE.md](./backend-deployment/API_REFERENCE.md)
|
||||
- Deploy → [DEPLOYMENT.md](./backend-deployment/DEPLOYMENT.md)
|
||||
- Segurança → [SECURITY.md](./backend-deployment/SECURITY.md)
|
||||
- Testes → [TESTING_GUIDE.md](./backend-deployment/TESTING_GUIDE.md)
|
||||
|
||||
**Projeto:**
|
||||
- Visão geral → [projeto.md](./projeto.md)
|
||||
- Plano → [plano.md](./plano.md)
|
||||
- Design → [design-system.md](./design-system.md)
|
||||
- Cadastros → [info-cadastro-agencia.md](./info-cadastro-agencia.md)
|
||||
|
||||
---
|
||||
|
||||
**Status**: ✅ Documentação Centralizada
|
||||
**Última atualização**: Dezembro 5, 2025
|
||||
**Versão**: 1.0.0
|
||||
980
1. docs/old/info-cadastro-agencia.md
Normal file
980
1. docs/old/info-cadastro-agencia.md
Normal file
@@ -0,0 +1,980 @@
|
||||
# 📝 CADASTRO AGGIOS - FLUXO COMPLETO (5 STEPS)
|
||||
|
||||
---
|
||||
|
||||
## 📋 Índice
|
||||
|
||||
1. [Visão Geral](#visão-geral)
|
||||
2. [Estrutura de Steps](#estrutura-de-steps)
|
||||
3. [Step 1: Dados Pessoais](#step-1-dados-pessoais)
|
||||
4. [Step 2: Empresa Básico](#step-2-empresa-básico)
|
||||
5. [Step 3: Localização e Contato](#step-3-localização-e-contato)
|
||||
6. [Step 4: Escolher Domínio](#step-4-escolher-domínio)
|
||||
7. [Step 5: Personalização](#step-5-personalização)
|
||||
8. [Endpoints](#endpoints)
|
||||
9. [Validações](#validações)
|
||||
10. [Fluxo Técnico](#fluxo-técnico)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Visão Geral
|
||||
|
||||
O cadastro de agências na plataforma Aggios é dividido em **5 etapas** bem equilibradas, onde o usuário preenche:
|
||||
|
||||
1. Dados pessoais (admin)
|
||||
2. Dados da empresa (básico)
|
||||
3. Localização e contato (empresa)
|
||||
4. Escolhe seu domínio
|
||||
5. Personaliza o painel
|
||||
|
||||
**URL**: `dash.aggios.app/cadastro`
|
||||
|
||||
**Endpoint final**: Redireciona para `{slug}.aggios.app/welcome`
|
||||
|
||||
**Tempo médio**: 5-10 minutos
|
||||
|
||||
**Taxa de conversão esperada**: 60%+
|
||||
|
||||
---
|
||||
|
||||
## 📐 Estrutura de Steps
|
||||
|
||||
A barra de progresso mostra visualmente o progresso:
|
||||
|
||||
```
|
||||
●○○○○ Step 1: Dados Pessoais
|
||||
○●○○○ Step 2: Empresa Básico
|
||||
○○●○○ Step 3: Localização e Contato (MESCLADO)
|
||||
○○○●○ Step 4: Escolher Domínio
|
||||
○○○○● Step 5: Personalização
|
||||
```
|
||||
|
||||
Cada step tem objetivo claro e validação independente.
|
||||
|
||||
---
|
||||
|
||||
## 🔐 STEP 1: DADOS PESSOAIS
|
||||
|
||||
**URL**: `dash.aggios.app/cadastro/step-1` ou `dash.aggios.app/cadastro`
|
||||
|
||||
**Tempo estimado**: 2-3 minutos
|
||||
|
||||
**Objetivo**: Capturar dados do admin que vai gerenciar a agência
|
||||
|
||||
### O que o user vê
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────┐
|
||||
│ Criar Agência Aggios │
|
||||
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
|
||||
│ │
|
||||
│ Etapa 1 de 5: Dados Pessoais │
|
||||
│ ●○○○○ (barra de progresso) │
|
||||
│ │
|
||||
│ Seu Nome Completo: * │
|
||||
│ [_______________________________] │
|
||||
│ │
|
||||
│ Email Pessoal: * │
|
||||
│ [_______________________________] │
|
||||
│ (será usado para login) │
|
||||
│ │
|
||||
│ Telefone/Celular: * │
|
||||
│ [_______________________________] │
|
||||
│ formato: (XX) XXXXX-XXXX │
|
||||
│ │
|
||||
│ WhatsApp: (opcional) │
|
||||
│ ☑ Mesmo número do telefone acima │
|
||||
│ OU: │
|
||||
│ [_______________________________] │
|
||||
│ │
|
||||
│ Senha: * │
|
||||
│ [_______________________________] │
|
||||
│ • Mín 8 caracteres │
|
||||
│ • 1 letra maiúscula │
|
||||
│ • 1 número │
|
||||
│ • 1 caractere especial (!@#$%^&*) │
|
||||
│ │
|
||||
│ Confirmar Senha: * │
|
||||
│ [_______________________________] │
|
||||
│ │
|
||||
│ ☑ Concordo com Termos de Uso │
|
||||
│ ☑ Desejo receber newsletters │
|
||||
│ │
|
||||
│ [CANCELAR] [PRÓXIMA ETAPA →] │
|
||||
│ │
|
||||
└────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Campos Coletados
|
||||
|
||||
- Nome Completo (obrigatório)
|
||||
- Email Pessoal (obrigatório, será login)
|
||||
- Telefone/Celular (obrigatório)
|
||||
- WhatsApp (opcional - pode ser igual ao telefone)
|
||||
- Senha (obrigatório, com requisitos de força)
|
||||
- Confirmação de Senha (obrigatório)
|
||||
- Aceitar Termos (obrigatório)
|
||||
- Newsletter (opcional)
|
||||
|
||||
### Comportamentos da UI
|
||||
|
||||
**Validação em Tempo Real:**
|
||||
- Email: valida se já existe (com pequena pausa para não bombardear servidor)
|
||||
- Telefone: auto-formata conforme digita
|
||||
- WhatsApp: auto-formata conforme digita
|
||||
- Força de senha: mostra indicador visual com requisitos
|
||||
|
||||
**Máscara de Telefone:**
|
||||
- User digita: 9999999999
|
||||
- Sistema transforma em: (11) 9999-9999
|
||||
- Transforma automaticamente
|
||||
|
||||
**WhatsApp:**
|
||||
- Se marca "Mesmo número do telefone" → campo desaparece
|
||||
- Se desmarcar → campo aparece para preenchimento
|
||||
|
||||
**Botão Próxima Etapa:**
|
||||
- Desabilitado enquanto formulário incompleto
|
||||
- Habilitado quando tudo preenchido
|
||||
- Scroll até primeiro erro se houver problema
|
||||
|
||||
### Validações
|
||||
|
||||
- Nome: mínimo 3 caracteres
|
||||
- Email: formato válido + não pode existir no banco
|
||||
- Telefone: formato (XX) XXXXX-XXXX
|
||||
- WhatsApp: formato (XX) XXXXX-XXXX (opcional)
|
||||
- Senha: 8+ caracteres, 1 maiúscula, 1 número, 1 especial
|
||||
- Confirmação: deve ser igual à senha
|
||||
- Terms: deve estar marcado
|
||||
|
||||
---
|
||||
|
||||
## 🏢 STEP 2: EMPRESA BÁSICO
|
||||
|
||||
**URL**: `dash.aggios.app/cadastro/step-2`
|
||||
|
||||
**Tempo estimado**: 3-4 minutos
|
||||
|
||||
**Objetivo**: Capturar informações básicas da agência
|
||||
|
||||
### O que o user vê
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────┐
|
||||
│ Criar Agência Aggios │
|
||||
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
|
||||
│ │
|
||||
│ Etapa 2 de 5: Empresa Básico │
|
||||
│ ○●○○○ (barra de progresso) │
|
||||
│ │
|
||||
│ Nome da Agência: * │
|
||||
│ [_______________________________] │
|
||||
│ (ex: IdeaPages, DevStudio, etc) │
|
||||
│ │
|
||||
│ CNPJ da Empresa: * │
|
||||
│ [__.__.__/__-__] │
|
||||
│ (ex: 12.345.678/0001-90) │
|
||||
│ ℹ️ Será usado para emissão de recibos │
|
||||
│ │
|
||||
│ Descrição (breve): * │
|
||||
│ [_______________________________] │
|
||||
│ [_______________________________] │
|
||||
│ [_______________________________] │
|
||||
│ (máx 300 caracteres) │
|
||||
│ │
|
||||
│ Website/Portfolio (opcional): │
|
||||
│ [_______________________________] │
|
||||
│ (ex: https://idealpages.com.br) │
|
||||
│ │
|
||||
│ Segmento/Indústria: * │
|
||||
│ [Agência Digital ▼] │
|
||||
│ │
|
||||
│ Tamanho da Equipe: │
|
||||
│ [1-10 pessoas ▼] │
|
||||
│ │
|
||||
│ [← ANTERIOR] [PRÓXIMA ETAPA →] │
|
||||
│ │
|
||||
└────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Campos Coletados
|
||||
|
||||
- Nome da Agência (obrigatório, 3-100 caracteres)
|
||||
- CNPJ (obrigatório, 14 dígitos com validação)
|
||||
- Descrição Breve (obrigatório, 10-300 caracteres)
|
||||
- Website/Portfolio (opcional)
|
||||
- Segmento/Indústria (obrigatório, dropdown)
|
||||
- Tamanho da Equipe (obrigatório, dropdown)
|
||||
|
||||
### Comportamentos da UI
|
||||
|
||||
**CNPJ:**
|
||||
- Auto-formata: 12345678000190 → 12.345.678/0001-90
|
||||
- Valida dígitos verificadores (algoritmo CNPJ)
|
||||
- Mostra status visual: ✓ válido, ✗ inválido/duplicado
|
||||
- Se duplicado: "Este CNPJ já está registrado"
|
||||
|
||||
**Descrição:**
|
||||
- Contador de caracteres em tempo real: 47/300
|
||||
- Quando atinge máximo: não permite mais digitação
|
||||
- Mostra em cores: verde (ok), amarelo (perto do máximo)
|
||||
|
||||
**Dropdown com Busca:**
|
||||
- Segmento: pode filtrar por busca
|
||||
- Tamanho: opções fixas (1-10, 11-50, 51-100, 100+)
|
||||
|
||||
**Botão Anterior:**
|
||||
- Sempre disponível
|
||||
- Volta para Step 1 com dados preenchidos
|
||||
|
||||
### Validações
|
||||
|
||||
- Nome empresa: 3-100 caracteres, sem caracteres especiais
|
||||
- CNPJ: 14 dígitos + dígitos verificadores válidos + não duplicado
|
||||
- Descrição: 10-300 caracteres
|
||||
- Website: URL válida (opcional)
|
||||
- Indústria: obrigatório selecionar
|
||||
- Tamanho: obrigatório selecionar
|
||||
|
||||
### Opções de Indústrias
|
||||
|
||||
- Agência Digital
|
||||
- Agência Full-Stack
|
||||
- Consultoria
|
||||
- SaaS
|
||||
- E-commerce
|
||||
- Software House
|
||||
- Outra
|
||||
|
||||
---
|
||||
|
||||
## 📍 STEP 3: LOCALIZAÇÃO E CONTATO
|
||||
|
||||
**URL**: `dash.aggios.app/cadastro/step-3`
|
||||
|
||||
**Tempo estimado**: 3-4 minutos
|
||||
|
||||
**Objetivo**: Capturar dados de localização e contato comercial (MESCLADO em uma tela)
|
||||
|
||||
**Motivo da Mesclagem**: Dois grupos relacionados (endereço físico + contato), economiza step sem prejudicar UX
|
||||
|
||||
### O que o user vê
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────┐
|
||||
│ Criar Agência Aggios │
|
||||
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
|
||||
│ │
|
||||
│ Etapa 3 de 5: Localização e Contato │
|
||||
│ ○○●○○ (barra de progresso) │
|
||||
│ │
|
||||
│ ── LOCALIZAÇÃO ── │
|
||||
│ │
|
||||
│ CEP: * │
|
||||
│ [_____-___] [BUSCAR CEP] │
|
||||
│ (ex: 01310-100) │
|
||||
│ │
|
||||
│ Estado: * │
|
||||
│ [São Paulo ▼] │
|
||||
│ │
|
||||
│ Cidade: * │
|
||||
│ [São Paulo ▼] │
|
||||
│ (dropdown com busca) │
|
||||
│ │
|
||||
│ Bairro: * │
|
||||
│ [_______________________________] │
|
||||
│ │
|
||||
│ Rua/Avenida: * │
|
||||
│ [_______________________________] │
|
||||
│ │
|
||||
│ Número: * │
|
||||
│ [___________] │
|
||||
│ │
|
||||
│ Complemento: (opcional) │
|
||||
│ [_______________________________] │
|
||||
│ (ex: Apt 1234, Sala 500) │
|
||||
│ │
|
||||
│ ── CONTATO DA EMPRESA ── │
|
||||
│ │
|
||||
│ Email Comercial: * │
|
||||
│ [_______________________________] │
|
||||
│ (ex: contato@idealpages.com.br) │
|
||||
│ │
|
||||
│ Telefone da Empresa: * │
|
||||
│ [_______________________________] │
|
||||
│ (ex: (11) 3333-4444) │
|
||||
│ │
|
||||
│ WhatsApp Empresarial: (opcional) │
|
||||
│ ☑ Mesmo número do telefone acima │
|
||||
│ OU: │
|
||||
│ [_______________________________] │
|
||||
│ │
|
||||
│ [← ANTERIOR] [PRÓXIMA ETAPA →] │
|
||||
│ │
|
||||
└────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Campos Coletados - Localização
|
||||
|
||||
- CEP (obrigatório, 8 dígitos, busca com ViaCEP)
|
||||
- Estado/UF (obrigatório, dropdown com 27 opções)
|
||||
- Cidade (obrigatório, dropdown com busca)
|
||||
- Bairro (obrigatório, mínimo 3 caracteres)
|
||||
- Rua/Avenida (obrigatório, mínimo 3 caracteres)
|
||||
- Número (obrigatório, 1-5 dígitos)
|
||||
- Complemento (opcional, máximo 100 caracteres)
|
||||
|
||||
### Campos Coletados - Contato
|
||||
|
||||
- Email Comercial (obrigatório)
|
||||
- Telefone da Empresa (obrigatório)
|
||||
- WhatsApp Empresarial (opcional, pode ser igual ao telefone)
|
||||
|
||||
### Comportamentos da UI
|
||||
|
||||
**CEP - Busca com ViaCEP:**
|
||||
|
||||
Quando user digita um CEP válido:
|
||||
1. Sistema aguarda 1-2 segundos (debounce)
|
||||
2. Faz requisição para ViaCEP
|
||||
3. Se encontrado: auto-preenche Estado, Cidade, Bairro, Rua
|
||||
4. User completa Número e Complemento
|
||||
5. Se não encontrado: campos ficam em branco para preenchimento manual
|
||||
|
||||
**Feedback Visual do CEP:**
|
||||
- ⏳ Amarelo enquanto busca
|
||||
- ✓ Verde quando encontrado
|
||||
- ✗ Vermelho quando não encontrado
|
||||
|
||||
**Dropdown de Cidades:**
|
||||
- Ao clicar em "Cidade"
|
||||
- Abre dropdown com opções do Estado selecionado
|
||||
- Pode digitar para filtrar (ex: digita "cam" → mostra "Campinas")
|
||||
- Seleciona e fecha
|
||||
|
||||
**Máscara de CEP:**
|
||||
- User digita: 01310100
|
||||
- Sistema transforma em: 01310-100
|
||||
- Auto-formata conforme digita
|
||||
|
||||
**WhatsApp - Checkbox:**
|
||||
- Se marca "Mesmo número do telefone" → campo WhatsApp desaparece
|
||||
- Se desmarcar → campo WhatsApp aparece
|
||||
|
||||
**Seções Visuais:**
|
||||
- "LOCALIZAÇÃO" em destaque (para separar dos contatos)
|
||||
- "CONTATO DA EMPRESA" em destaque (segunda seção)
|
||||
- Divisão visual clara entre as duas seções
|
||||
|
||||
### Validações
|
||||
|
||||
**Localização:**
|
||||
- CEP: 8 dígitos válidos
|
||||
- CEP: encontrado em ViaCEP OU preenchido manualmente com dados corretos
|
||||
- Estado: selecionado de lista (27 UFs)
|
||||
- Cidade: selecionada de lista
|
||||
- Bairro: 3+ caracteres
|
||||
- Rua: 3+ caracteres
|
||||
- Número: 1-5 dígitos numéricos
|
||||
|
||||
**Contato:**
|
||||
- Email: formato válido
|
||||
- Telefone: formato válido (XX) XXXX-XXXX
|
||||
- WhatsApp: formato válido (XX) XXXXX-XXXX (opcional)
|
||||
|
||||
---
|
||||
|
||||
## 🌐 STEP 4: ESCOLHER DOMÍNIO
|
||||
|
||||
**URL**: `dash.aggios.app/cadastro/step-4`
|
||||
|
||||
**Tempo estimado**: 1-2 minutos
|
||||
|
||||
**Objetivo**: User escolhe o slug (domínio) para seu painel
|
||||
|
||||
**Importância**: Decisão importante, mostra sugestões automáticas
|
||||
|
||||
### O que o user vê
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────┐
|
||||
│ Criar Agência Aggios │
|
||||
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
|
||||
│ │
|
||||
│ Etapa 4 de 5: Escolha seu Domínio │
|
||||
│ ○○○●○ (barra de progresso) │
|
||||
│ │
|
||||
│ Seu painel estará em: │
|
||||
│ https://[_____________].aggios.app │
|
||||
│ │
|
||||
│ Dicas: │
|
||||
│ • Use nome da sua agência (sem espaços) │
|
||||
│ • Apenas letras, números e hífen │
|
||||
│ • Mínimo 3 caracteres │
|
||||
│ │
|
||||
│ ┌──────────────────────────────────────────┐ │
|
||||
│ │ idealpages ✓ │ │
|
||||
│ │ (verde + checkmark = disponível) │ │
|
||||
│ └──────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 🔗 https://idealpages.aggios.app │
|
||||
│ │
|
||||
│ [USAR ESTE] │
|
||||
│ │
|
||||
│ ── OU ESCOLHA OUTRO ── │
|
||||
│ │
|
||||
│ Prefere outro? │
|
||||
│ [_______________________________] │
|
||||
│ │
|
||||
│ [VERIFICAR DISPONIBILIDADE] │
|
||||
│ │
|
||||
│ ┌──────────────────────────────────────────┐ │
|
||||
│ │ idealpages-studio ✓ │ │
|
||||
│ │ (disponível - verde) │ │
|
||||
│ └──────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 🔗 https://idealpages-studio.aggios.app │
|
||||
│ │
|
||||
│ [USAR ESTE] │
|
||||
│ │
|
||||
│ ┌──────────────────────────────────────────┐ │
|
||||
│ │ idealpages-admin ✗ │ │
|
||||
│ │ ❌ Domínio reservado (não disponível) │ │
|
||||
│ └──────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [← ANTERIOR] [PRÓXIMA ETAPA →] │
|
||||
│ │
|
||||
└────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Campos Coletados
|
||||
|
||||
- Slug/Domínio (obrigatório, única decisão neste step)
|
||||
|
||||
### Comportamentos da UI
|
||||
|
||||
**Sugestão Automática:**
|
||||
- Ao chegar na página, sistema pega nome da empresa
|
||||
- Transforma em slug válido (exemplo: "IdeaPages" → "idealpages")
|
||||
- Já mostra pronto com ✓ se disponível
|
||||
- User pode usar sugestão ou escolher outro
|
||||
|
||||
**Validação em Tempo Real:**
|
||||
- User digita em "Prefere outro?"
|
||||
- Sistema aguarda 1-2 segundos (debounce)
|
||||
- Verifica se slug é válido e disponível
|
||||
- Mostra resultado visual: ✓ (verde), ✗ (vermelho), ⏳ (amarelo verificando)
|
||||
|
||||
**Auto-Formatação:**
|
||||
- "IdeaPages" → "idealpages" (lowercase automático)
|
||||
- "Ideal Pages" → "ideal-pages" (espaço vira hífen)
|
||||
- "Ideal___Pages" → "ideal-pages" (múltiplos hífens viram um)
|
||||
- Remove caracteres inválidos automaticamente
|
||||
|
||||
**Botão "Usar Este":**
|
||||
- Só fica ativado para slugs com ✓
|
||||
- Desativado para slugs com ✗
|
||||
- Ao clicar: salva escolha, permite ir para próximo step
|
||||
|
||||
### Validações
|
||||
|
||||
- Comprimento: 3-50 caracteres
|
||||
- Formato: apenas a-z, 0-9, hífen (-)
|
||||
- Estrutura: não começa/termina com hífen
|
||||
- Reservados: não é palavra reservada do sistema
|
||||
- Unicidade: não existe no banco
|
||||
|
||||
### Palavras Reservadas (Não Permitidas)
|
||||
|
||||
admin, api, dash, app, www, mail, blog, shop, store, support, help, docs, status, aggios, login, register, signup, oauth, webhook
|
||||
|
||||
---
|
||||
|
||||
## 🎨 STEP 5: PERSONALIZAÇÃO
|
||||
|
||||
**URL**: `dash.aggios.app/cadastro/step-5`
|
||||
|
||||
**Tempo estimado**: 2-3 minutos
|
||||
|
||||
**Objetivo**: Personalizar visual do painel (logo, cores, configurações)
|
||||
|
||||
**Final da jornada**: Último step antes da criação
|
||||
|
||||
### O que o user vê
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────┐
|
||||
│ Criar Agência Aggios │
|
||||
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
|
||||
│ │
|
||||
│ Etapa 5 de 5: Personalização do Painel │
|
||||
│ ○○○○● (barra de progresso) │
|
||||
│ │
|
||||
│ ── LOGO E IDENTIDADE ── │
|
||||
│ │
|
||||
│ Logotipo: (opcional) │
|
||||
│ ┌──────────────────────────────────────────┐ │
|
||||
│ │ [📁 SELECIONAR ARQUIVO] │ │
|
||||
│ │ Ou arraste um arquivo aqui │ │
|
||||
│ │ │ │
|
||||
│ │ Formatos: JPG, PNG, SVG │ │
|
||||
│ │ Tamanho máximo: 5MB │ │
|
||||
│ │ Recomendado: 1024x1024px │ │
|
||||
│ │ │ │
|
||||
│ │ ℹ️ Será exibido no topo do seu painel │ │
|
||||
│ └──────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ── CORES DO PAINEL ── │
|
||||
│ │
|
||||
│ Cor Primária: * │
|
||||
│ ┌────────────────────────────────────────┐ │
|
||||
│ │ [███] #3B82F6 (Azul padrão) │ │
|
||||
│ │ [ESCOLHER COR] │ │
|
||||
│ └────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ Cor Secundária: (opcional) │
|
||||
│ ┌────────────────────────────────────────┐ │
|
||||
│ │ [███] #10B981 (Verde padrão) │ │
|
||||
│ │ [ESCOLHER COR] │ │
|
||||
│ └────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ── PREVIEW EM TEMPO REAL ── │
|
||||
│ ┌──────────────────────────────────────────┐ │
|
||||
│ │ ┌────────────────────────────────────┐ │ │
|
||||
│ │ │ IdeaPages │ │ │
|
||||
│ │ │ (com logo se tiver) │ │ │
|
||||
│ │ └────────────────────────────────────┘ │ │
|
||||
│ │ │ │
|
||||
│ │ ████████████████████████████████████ │ │ ← cor primária
|
||||
│ │ │ │
|
||||
│ │ ┌────────────────────────────────────┐ │ │
|
||||
│ │ │ 📊 Dashboard │ │ │
|
||||
│ │ │ Bem-vindo ao seu painel! │ │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ │ [Botão com cor primária] │ │ │
|
||||
│ │ │ [Botão com cor secundária] │ │ │
|
||||
│ │ └────────────────────────────────────┘ │ │
|
||||
│ └──────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ── CONFIGURAÇÕES ── │
|
||||
│ │
|
||||
│ ☑ Permitir que clientes façam upload │
|
||||
│ de arquivos nos projetos │
|
||||
│ │
|
||||
│ ☑ Ativar portal de cliente automaticamente │
|
||||
│ para novos projetos │
|
||||
│ │
|
||||
│ [← ANTERIOR] [FINALIZAR E CRIAR AGÊNCIA] │
|
||||
│ │
|
||||
└────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Campos Coletados
|
||||
|
||||
- Logo (opcional, arquivo JPG/PNG/SVG, máx 5MB)
|
||||
- Cor Primária (obrigatório, hex color)
|
||||
- Cor Secundária (opcional, hex color)
|
||||
- Permitir Upload de Clientes (checkbox, padrão: true)
|
||||
- Ativar Portal de Cliente (checkbox, padrão: true)
|
||||
|
||||
### Comportamentos da UI
|
||||
|
||||
**Upload de Logo:**
|
||||
- Área drag & drop: user pode arrastar arquivo diretamente
|
||||
- Clique para selecionar: abre file picker
|
||||
- Progresso visual: barra de upload enquanto sobe arquivo
|
||||
- Preview: mostra imagem após upload
|
||||
- Opção de remover: botão X para descartar
|
||||
|
||||
**Color Picker:**
|
||||
- Clica em "ESCOLHER COR" → abre modal
|
||||
- Modal oferece:
|
||||
- Paleta de cores predefinidas (rápido)
|
||||
- Picker customizado com gradiente
|
||||
- Slider de brilho (claro/escuro)
|
||||
- Input direto de hex (#RRGGBB)
|
||||
- Confirmar/Cancelar na modal
|
||||
- Preview em tempo real no painel
|
||||
|
||||
**Preview em Tempo Real:**
|
||||
- Ao escolher cores: preview atualiza instantaneamente
|
||||
- Ao fazer upload de logo: aparece no preview
|
||||
- Mostra como ficará o painel da agência
|
||||
- Lado a lado com os controles
|
||||
|
||||
**Checkboxes (Configurações):**
|
||||
- "Permitir upload de clientes": já vem marcado por padrão
|
||||
- "Portal cliente automático": já vem marcado por padrão
|
||||
- User pode desmarcar se quiser (não recomendado)
|
||||
|
||||
**Botão Final:**
|
||||
- "FINALIZAR E CRIAR AGÊNCIA": botão destaque
|
||||
- Desabilitado se Cor Primária não estiver preenchida
|
||||
- Ao clicar: começa processo de criação
|
||||
|
||||
### Validações
|
||||
|
||||
- Logo: JPG, PNG, SVG (opcional), máximo 5MB
|
||||
- Cor Primária: formato hex válido (#RRGGBB)
|
||||
- Cor Secundária: formato hex válido (opcional)
|
||||
|
||||
---
|
||||
|
||||
## 🔌 ENDPOINTS
|
||||
|
||||
### Autenticação e Cadastro
|
||||
|
||||
**POST /auth/signup/step-1**
|
||||
- Recebe dados pessoais
|
||||
- Valida email + telefone + senha
|
||||
- Cria entrada temporária (signup_temp)
|
||||
- Retorna tempUserId para próximos steps
|
||||
|
||||
**POST /auth/signup/step-2**
|
||||
- Recebe dados da empresa
|
||||
- Valida CNPJ + nomes + indústria
|
||||
- Atualiza signup_temp
|
||||
- Retorna success
|
||||
|
||||
**POST /auth/signup/step-3**
|
||||
- Recebe localização e contato
|
||||
- Valida CEP + endereço + emails/telefones
|
||||
- Atualiza signup_temp
|
||||
- Retorna success
|
||||
|
||||
**POST /auth/signup/step-4**
|
||||
- Recebe slug do domínio
|
||||
- Valida disponibilidade + formato
|
||||
- Atualiza signup_temp
|
||||
- Retorna success
|
||||
|
||||
**POST /auth/signup/step-5**
|
||||
- Recebe personalização (logo, cores, configs)
|
||||
- Valida tudo
|
||||
- Executa TRANSAÇÃO:
|
||||
- Cria tenant
|
||||
- Cria user admin
|
||||
- Deleta signup_temp
|
||||
- Gera JWT
|
||||
- Retorna token + tenant + redirectUrl
|
||||
|
||||
### Validações Auxiliares
|
||||
|
||||
**GET /auth/check-slug?slug=idealpages**
|
||||
- Verifica se slug está disponível
|
||||
- Retorna: available (true/false)
|
||||
- Usado em tempo real na Step 4
|
||||
|
||||
**GET /api/cep/:cep**
|
||||
- Busca CEP em ViaCEP
|
||||
- Retorna: estado, cidade, bairro, rua
|
||||
- Integração: ViaCEP API (gratuita)
|
||||
- Cache: 24 horas em Redis
|
||||
|
||||
**POST /upload/logo**
|
||||
- Faz upload de logo para Minio (S3-compatible)
|
||||
- Retorna URL da imagem
|
||||
- Validações: tamanho, formato
|
||||
|
||||
---
|
||||
|
||||
## ✅ VALIDAÇÕES
|
||||
|
||||
### STEP 1 - Dados Pessoais
|
||||
|
||||
**Nome Completo:**
|
||||
- Mínimo 3 caracteres
|
||||
- Sem números no meio
|
||||
- Máximo 100 caracteres
|
||||
|
||||
**Email:**
|
||||
- Formato válido (RFC 5322)
|
||||
- Não pode existir no banco
|
||||
- Verificação com debounce (1-2 segundos)
|
||||
|
||||
**Telefone:**
|
||||
- Formato: (XX) XXXXX-XXXX
|
||||
- 10-11 dígitos totais
|
||||
- Números válidos (começa de 0-9)
|
||||
|
||||
**WhatsApp:**
|
||||
- Formato: (XX) XXXXX-XXXX (opcional)
|
||||
- Se preenchido: deve ser válido
|
||||
- Pode ser igual ao telefone
|
||||
|
||||
**Senha:**
|
||||
- Mínimo 8 caracteres
|
||||
- 1 letra maiúscula (A-Z)
|
||||
- 1 número (0-9)
|
||||
- 1 caractere especial (!@#$%^&*)
|
||||
- Máximo 128 caracteres
|
||||
|
||||
**Confirmação Senha:**
|
||||
- Deve ser exatamente igual à senha
|
||||
|
||||
**Terms:**
|
||||
- Deve estar marcado para prosseguir
|
||||
|
||||
---
|
||||
|
||||
### STEP 2 - Empresa Básico
|
||||
|
||||
**Nome Empresa:**
|
||||
- 3-100 caracteres
|
||||
- Sem caracteres especiais
|
||||
- Sem números apenas
|
||||
|
||||
**CNPJ:**
|
||||
- Exatamente 14 dígitos (sem formatação)
|
||||
- Dígitos verificadores válidos (algoritmo CNPJ)
|
||||
- Não pode estar duplicado no banco
|
||||
- Deve estar ativo na Receita Federal
|
||||
|
||||
**Descrição:**
|
||||
- Mínimo 10 caracteres
|
||||
- Máximo 300 caracteres
|
||||
- Deve descrever a agência
|
||||
|
||||
**Website:**
|
||||
- URL válida (opcional)
|
||||
- Deve começar com https:// ou http://
|
||||
- Domínio válido
|
||||
|
||||
**Indústria:**
|
||||
- Obrigatório selecionar de lista predefinida
|
||||
|
||||
**Tamanho Equipe:**
|
||||
- Obrigatório selecionar de opções: 1-10, 11-50, 51-100, 100+
|
||||
|
||||
---
|
||||
|
||||
### STEP 3 - Localização e Contato
|
||||
|
||||
**CEP:**
|
||||
- Exatamente 8 dígitos (sem formatação)
|
||||
- Deve estar cadastrado em ViaCEP
|
||||
- Se não encontrado: aceita preenchimento manual
|
||||
|
||||
**Estado (UF):**
|
||||
- Obrigatório selecionar de 27 UFs
|
||||
- Dois caracteres (SP, MG, RJ, etc)
|
||||
|
||||
**Cidade:**
|
||||
- Obrigatório selecionar de lista (por UF)
|
||||
- Válida para o estado escolhido
|
||||
|
||||
**Bairro:**
|
||||
- Mínimo 3 caracteres
|
||||
- Máximo 100 caracteres
|
||||
- Sem números exclusivamente
|
||||
|
||||
**Rua/Avenida:**
|
||||
- Mínimo 3 caracteres
|
||||
- Máximo 200 caracteres
|
||||
- Pode conter números
|
||||
|
||||
**Número:**
|
||||
- 1-5 dígitos numéricos
|
||||
- Obrigatório
|
||||
|
||||
**Complemento:**
|
||||
- Máximo 100 caracteres (opcional)
|
||||
- Exemplos: Apt 1234, Sala 500, Loja 2
|
||||
|
||||
**Email Comercial:**
|
||||
- Formato válido
|
||||
- Obrigatório
|
||||
- Diferente do email pessoal (em regra, mas não obrigatório)
|
||||
|
||||
**Telefone Empresa:**
|
||||
- Formato: (XX) XXXX-XXXX ou (XX) XXXXX-XXXX
|
||||
- 10-11 dígitos
|
||||
- Obrigatório
|
||||
|
||||
**WhatsApp Empresa:**
|
||||
- Formato: (XX) XXXXX-XXXX (opcional)
|
||||
- Se preenchido: deve ser válido
|
||||
- Pode ser igual ao telefone
|
||||
|
||||
---
|
||||
|
||||
### STEP 4 - Domínio
|
||||
|
||||
**Slug:**
|
||||
- Comprimento: 3-50 caracteres
|
||||
- Caracteres permitidos: a-z, 0-9, hífen (-)
|
||||
- Não pode começar com hífen
|
||||
- Não pode terminar com hífen
|
||||
- Não pode ser palavra reservada
|
||||
- Não pode estar duplicado no banco
|
||||
|
||||
---
|
||||
|
||||
### STEP 5 - Personalização
|
||||
|
||||
**Logo:**
|
||||
- Formatos aceitos: JPG, PNG, SVG (opcional)
|
||||
- Tamanho máximo: 5MB
|
||||
- Resolução recomendada: 1024x1024px
|
||||
|
||||
**Cor Primária:**
|
||||
- Formato hex válido (#RRGGBB)
|
||||
- Obrigatório
|
||||
|
||||
**Cor Secundária:**
|
||||
- Formato hex válido (opcional)
|
||||
- Padrão: #10B981 (verde)
|
||||
|
||||
**Checkboxes:**
|
||||
- Valores: true/false
|
||||
- Nenhuma validação especial
|
||||
|
||||
---
|
||||
|
||||
## 🔄 FLUXO TÉCNICO
|
||||
|
||||
### Fluxo Geral
|
||||
|
||||
User acessa `dash.aggios.app/cadastro`
|
||||
↓
|
||||
Sistema verifica JWT (não logado)
|
||||
↓
|
||||
Redireciona para `/cadastro/step-1`
|
||||
↓
|
||||
User preenche Step 1 (Dados Pessoais)
|
||||
↓
|
||||
Frontend valida
|
||||
↓
|
||||
POST /auth/signup/step-1
|
||||
↓
|
||||
Backend valida
|
||||
↓
|
||||
INSERT signup_temp
|
||||
↓
|
||||
Armazena tempUserId em localStorage
|
||||
↓
|
||||
Redireciona /cadastro/step-2
|
||||
|
||||
### Fluxo Completo
|
||||
|
||||
```
|
||||
Step 1 → Valida + POST → INSERT signup_temp
|
||||
↓
|
||||
Step 2 → Valida + POST → UPDATE signup_temp
|
||||
↓
|
||||
Step 3 → Valida + ViaCEP + POST → UPDATE signup_temp
|
||||
↓
|
||||
Step 4 → Valida + Check slug + POST → UPDATE signup_temp
|
||||
↓
|
||||
Step 5 → Valida + Upload logo + POST → TRANSAÇÃO
|
||||
↓
|
||||
TRANSAÇÃO (Backend):
|
||||
├─ Valida tempUserId
|
||||
├─ Valida todos dados
|
||||
├─ CREATE tenant
|
||||
├─ CREATE user (admin)
|
||||
├─ DELETE signup_temp
|
||||
├─ Gera JWT
|
||||
└─ COMMIT
|
||||
↓
|
||||
Response: success + token + tenant + redirectUrl
|
||||
↓
|
||||
Frontend:
|
||||
├─ Armazena JWT
|
||||
├─ Armazena tenantSlug
|
||||
├─ Redireciona para: {slug}.aggios.app/welcome
|
||||
```
|
||||
|
||||
### Tratamento de Erros
|
||||
|
||||
**Se validação frontend falhar:**
|
||||
- Mostra erros inline abaixo de cada campo
|
||||
- Destaca campos com erro (vermelho)
|
||||
- Scroll automático até primeiro erro
|
||||
- User corrige e tenta novamente
|
||||
|
||||
**Se backend retornar erro:**
|
||||
- Toast com mensagem de erro (em vermelho)
|
||||
- User permanece na mesma página
|
||||
- Formulário mantém valores preenchidos
|
||||
- User pode corrigir e tentar novamente
|
||||
|
||||
**Se sessão expirar:**
|
||||
- signup_temp é deletado após 24 horas
|
||||
- Redireciona pra login
|
||||
- User perde progresso
|
||||
- Pode começar do zero
|
||||
|
||||
**Se houver problema na transação final:**
|
||||
- Rollback automático (desfaz tudo)
|
||||
- Retorna erro específico
|
||||
- User fica em Step 5
|
||||
- Pode tentar novamente
|
||||
|
||||
---
|
||||
|
||||
## 📊 Estatísticas Esperadas
|
||||
|
||||
**Tempo médio de conclusão**: 5-10 minutos
|
||||
|
||||
**Taxa de conclusão esperada**: 60%+
|
||||
|
||||
**Pontos de drop-off provável**:
|
||||
- Step 1 (não quer criar conta): ~15%
|
||||
- Step 2 (CNPJ problemático): ~10%
|
||||
- Step 3 (endereço): ~5%
|
||||
- Step 4 (domínio indecisão): ~5%
|
||||
- Step 5 (logo/cores): ~5%
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Resumo Final
|
||||
|
||||
```
|
||||
✅ CADASTRO FINAL: 5 STEPS
|
||||
|
||||
Step 1: Dados Pessoais (5 campos)
|
||||
- Nome, email, telefone, whatsapp, senha
|
||||
- 2-3 minutos
|
||||
- Taxa drop: ~15%
|
||||
|
||||
Step 2: Empresa Básico (6 campos)
|
||||
- Nome, CNPJ, descrição, website, indústria, tamanho
|
||||
- 3-4 minutos
|
||||
- Taxa drop: ~10%
|
||||
|
||||
Step 3: Localização e Contato (10 campos) ← MESCLADO
|
||||
- CEP, estado, cidade, bairro, rua, número, complemento
|
||||
- Email, telefone, whatsapp
|
||||
- 3-4 minutos
|
||||
- Taxa drop: ~10%
|
||||
|
||||
Step 4: Domínio (1 campo)
|
||||
- Escolher slug
|
||||
- 1-2 minutos
|
||||
- Taxa drop: ~5%
|
||||
|
||||
Step 5: Personalização (3 campos)
|
||||
- Logo, cores primária/secundária, checkboxes
|
||||
- 2-3 minutos
|
||||
- Taxa drop: ~5%
|
||||
|
||||
TOTAL: 25 campos distribuídos equilibradamente
|
||||
|
||||
BENEFÍCIOS:
|
||||
✅ 5 steps (não assusta usuário)
|
||||
✅ Distribuição lógica (cada step tem objetivo)
|
||||
✅ Step 3 mesclado (10 campos, bem organizado com seções)
|
||||
✅ Validação granular (erro em um step não afeta outro)
|
||||
✅ Melhor taxa de conversão (menos drop-off)
|
||||
✅ Progress visual (user sabe onde está)
|
||||
✅ Fácil retomar se desistir (dados salvos em DB)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Versão**: 1.0
|
||||
**Data**: 04/12/2025
|
||||
**Status**: Pronto para desenvolvimento
|
||||
**Detalhamento**: Lógica e UX (sem código técnico)
|
||||
13
1. docs/old/instrucoes-ia.md
Normal file
13
1. docs/old/instrucoes-ia.md
Normal file
@@ -0,0 +1,13 @@
|
||||
Repositorio
|
||||
|
||||
https://git.stackbyte.cloud/erik/aggios.app.git
|
||||
|
||||
touch README.md
|
||||
git init
|
||||
git checkout -b main
|
||||
git add README.md
|
||||
git commit -m "first commit"
|
||||
git remote add origin https://git.stackbyte.cloud/erik/aggios.app.git
|
||||
git push -u origin main
|
||||
|
||||
coloque sempre cursor pointer em botoes e links!
|
||||
217
1. docs/old/plano.md
Normal file
217
1. docs/old/plano.md
Normal file
@@ -0,0 +1,217 @@
|
||||
# 📋 PLANO DE TAREFAS ATUALIZADO - AGGIOS
|
||||
|
||||
**Backend Go + Stack Completo**
|
||||
**Status**: ✅ Infraestrutura pronta (Docker 5/5 serviços)
|
||||
**Versão**: 2.0
|
||||
**Data**: 06/12/2025
|
||||
|
||||
---
|
||||
|
||||
## 📊 Visão Geral
|
||||
|
||||
```
|
||||
FASE 1: Completar Backend Go (1-2 semanas)
|
||||
└─ Autenticação + Handlers + Banco de Dados
|
||||
|
||||
FASE 2: Conectar Frontends (1 semana)
|
||||
└─ Dashboard + Landing conectadas ao backend
|
||||
|
||||
FASE 3: Features Core (2 semanas)
|
||||
└─ Cadastro multi-step + CRM básico
|
||||
|
||||
FASE 4: Deploy + Testes (1 semana)
|
||||
└─ CI/CD + Testes + Deploy em produção
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🟢 STATUS ATUAL
|
||||
|
||||
✅ **Infraestrutura Pronta:**
|
||||
- Backend Go rodando no Docker
|
||||
- PostgreSQL 16 com migrations
|
||||
- Redis 7 para cache
|
||||
- MinIO para S3-compatible storage
|
||||
- Traefik v2.10 para multi-tenant
|
||||
- Health checks respondendo
|
||||
|
||||
---
|
||||
|
||||
## 🔴 FASE 1: COMPLETAR BACKEND GO (PRÓXIMOS 7-10 DIAS)
|
||||
|
||||
**Objetivo**: Backend 100% funcional com autenticação e handlers reais
|
||||
**Estimativa**: 1-2 semanas
|
||||
**Dependências**: Infraestrutura ✓
|
||||
|
||||
### 1.1 Autenticação & Security
|
||||
- [ ] Implementar handler `/api/auth/register` (criar usuário)
|
||||
- [ ] Implementar handler `/api/auth/login` (gerar JWT)
|
||||
- [ ] Implementar handler `/api/auth/refresh` (renovar token)
|
||||
- [ ] Implementar handler `/api/auth/logout` (invalida refresh token)
|
||||
- [ ] Implementar middleware JWT (validação de token)
|
||||
- [ ] Implementar middleware CORS (origins whitelisted)
|
||||
- [ ] Implementar rate limiting (Redis)
|
||||
- [ ] Hash de senha com Argon2
|
||||
|
||||
### 1.2 Endpoints Core
|
||||
- [ ] GET `/api/me` - Dados do usuário autenticado
|
||||
- [ ] GET `/api/health` - Status de todos os serviços
|
||||
- [ ] POST `/api/tenants` - Criar novo tenant/agência
|
||||
- [ ] GET `/api/tenants/:id` - Buscar tenant específico
|
||||
|
||||
### 1.3 Camada de Dados
|
||||
- [ ] Completar modelos: User, Tenant, RefreshToken
|
||||
- [ ] Implementar repository pattern (database queries)
|
||||
- [ ] Implementar service layer (lógica de negócio)
|
||||
- [ ] Testes unitários dos handlers
|
||||
|
||||
**Go Check**: Endpoints autenticados funcionam, JWT é validado, banco responde
|
||||
|
||||
---
|
||||
|
||||
## 🟠 FASE 2: CONECTAR FRONTENDS (7-10 DIAS)
|
||||
|
||||
**Objetivo**: Dashboard e landing conectadas ao backend
|
||||
**Estimativa**: 1 semana
|
||||
**Dependências**: Fase 1 ✓
|
||||
|
||||
### 2.1 Dashboard (Next.js)
|
||||
- [ ] Implementar login (chamar `/api/auth/login`)
|
||||
- [ ] Armazenar JWT em cookies/localStorage
|
||||
- [ ] Middleware de autenticação (redirecionar para login)
|
||||
- [ ] Página de dashboard com dados do usuário (`/api/me`)
|
||||
- [ ] Integrar com Traefik (subdomain routing)
|
||||
|
||||
### 2.2 Landing Institucional
|
||||
- [ ] Conectar botão "Começar" ao formulário de registro
|
||||
- [ ] Integrar `/api/auth/register`
|
||||
- [ ] Validações de frontend
|
||||
- [ ] Feedback visual (loading, errors, success)
|
||||
|
||||
**Go Check**: Login funciona, dashboard mostra dados do usuário logado
|
||||
|
||||
---
|
||||
|
||||
## 🟡 FASE 3: FEATURES CORE (10-14 DIAS)
|
||||
|
||||
**Objetivo**: Cadastro multi-step e CRM básico
|
||||
**Estimativa**: 2 semanas
|
||||
**Dependências**: Fase 2 ✓
|
||||
|
||||
### 3.1 Cadastro Multi-Step (Backend)
|
||||
- [ ] Step 1: Dados Pessoais (nome, email, telefone)
|
||||
- [ ] Step 2: Dados Empresa (nome, CNPJ, ramo)
|
||||
- [ ] Step 3: Localização (CEP, endereço, cidade - integrar ViaCEP)
|
||||
- [ ] Step 4: Logo (upload para MinIO)
|
||||
- [ ] Step 5: Subdomain (agencia-nome.aggios.app)
|
||||
- [ ] Endpoint POST `/api/register/complete` (transação final)
|
||||
|
||||
### 3.2 Cadastro Multi-Step (Frontend)
|
||||
- [ ] Formulário 5 steps no dashboard
|
||||
- [ ] Persistência entre steps (localStorage)
|
||||
- [ ] Validação por step
|
||||
- [ ] Upload de logo
|
||||
- [ ] Confirmação final
|
||||
|
||||
### 3.3 CRM Básico (Backend)
|
||||
- [ ] Endpoints CRUD para clientes (Create, Read, Update, Delete)
|
||||
- [ ] Paginação e filtros
|
||||
- [ ] RLS (Row-Level Security) - clientes isolados por tenant
|
||||
- [ ] Logs de auditoria
|
||||
|
||||
### 3.4 CRM Básico (Frontend)
|
||||
- [ ] Dashboard com gráficos (clientes total, conversão, etc)
|
||||
- [ ] Listagem de clientes
|
||||
- [ ] Página de cliente individual
|
||||
- [ ] Criar/editar cliente
|
||||
|
||||
**Go Check**: Cadastro funciona 100%, agência criada com sucesso, CRM funciona
|
||||
|
||||
---
|
||||
|
||||
## 🟢 FASE 4: DEPLOY & TESTES (7 DIAS)
|
||||
|
||||
**Objetivo**: Tudo em produção e testado
|
||||
**Estimativa**: 1 semana
|
||||
**Dependências**: Fase 3 ✓
|
||||
|
||||
### 4.1 Testes
|
||||
- [ ] Testes unitários backend (auth, handlers)
|
||||
- [ ] Testes de integração (banco + API)
|
||||
- [ ] Testes E2E (fluxo cadastro completo)
|
||||
- [ ] Coverage mínimo 80%
|
||||
|
||||
### 4.2 CI/CD
|
||||
- [ ] GitHub Actions (test na branch)
|
||||
- [ ] Deploy automático (main → produção)
|
||||
- [ ] Lint (golangci-lint)
|
||||
- [ ] Security scan
|
||||
|
||||
### 4.3 Deploy Produção
|
||||
- [ ] Configurar Let's Encrypt (HTTPS)
|
||||
- [ ] Setup banco de dados remoto
|
||||
- [ ] Setup Redis remoto
|
||||
- [ ] Setup MinIO remoto (ou S3 AWS)
|
||||
- [ ] Variáveis de ambiente produção
|
||||
- [ ] Monitoramento (logs, alertas)
|
||||
|
||||
**Go Check**: App funciona em produção, fluxo completo de signup funciona, HTTPS ativo
|
||||
- [ ] Criar endpoint para editar cliente - backend
|
||||
- [ ] Criar endpoint para deletar cliente - backend
|
||||
- [ ] Criar tela de adicionar cliente - frontend
|
||||
- [ ] Criar tela de editar cliente - frontend
|
||||
- [ ] Implementar proteção de rotas (autenticação)
|
||||
- [ ] Criar logout - backend
|
||||
- [ ] Testar fluxo completo (cadastro até CRM)
|
||||
- [ ] Corrigir bugs encontrados
|
||||
- [ ] Deploy final em produção
|
||||
|
||||
**Go Check**: MVP 100% funcional, sem bugs críticos, em produção
|
||||
|
||||
---
|
||||
|
||||
## 📊 Total: 38 Etapas em 5 Semanas
|
||||
|
||||
```
|
||||
Semana 1: 7 etapas (Setup)
|
||||
Semana 2: 7 etapas (Cadastro P1)
|
||||
Semana 3: 9 etapas (Cadastro P2 + Deploy)
|
||||
Semana 4: 5 etapas (CRM P1)
|
||||
Semana 5: 10 etapas (CRM P2 + Testes + Deploy)
|
||||
━━━━━━━━━━━━━━━━━━━━━
|
||||
TOTAL: 38 etapas
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Milestones
|
||||
|
||||
### Fim Semana 1
|
||||
- Ambiente local funcional
|
||||
- Tudo compila
|
||||
|
||||
### Fim Semana 2
|
||||
- Cadastro steps 1-2 funcionando
|
||||
- Landing page ativa
|
||||
|
||||
### Fim Semana 3
|
||||
- Cadastro completo (todos 5 steps)
|
||||
- Deploy em Dokploy
|
||||
- GitHub CI/CD ativo
|
||||
|
||||
### Fim Semana 4
|
||||
- CRM dashboard pronto
|
||||
- Lista de clientes pronto
|
||||
|
||||
### Fim Semana 5
|
||||
- MVP 100% completo
|
||||
- Em produção
|
||||
- Pronto para usuários
|
||||
|
||||
---
|
||||
|
||||
**Versão**: 1.0
|
||||
**Data**: 04/12/2025
|
||||
**Status**: Pronto para execução
|
||||
|
||||
🚀 **Sucesso!**
|
||||
1046
1. docs/old/projeto.md
Normal file
1046
1. docs/old/projeto.md
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user