Uma aplicação Next.js abrangente para gerenciar solicitações de conformidade LGPD (Lei Geral de Proteção de Dados), construída com TypeScript, Tailwind CSS, e seguindo práticas TDD.
- Autenticação de Usuários: Login/registro seguro para titulares de dados e representantes de empresa
- Gestão de Solicitações LGPD: Criar, acompanhar e gerenciar diferentes tipos de solicitações LGPD:
- Solicitações de Acesso a Dados
- Solicitações de Exclusão de Dados
- Solicitações de Correção de Dados
- Solicitações de Portabilidade de Dados
- Integração de Pagamento PIX: Verificação de pagamento segura para processamento de solicitações
- Criptografia Ponta a Ponta: Criptografia do lado do cliente para dados sensíveis
- Histórico de Solicitações: Acompanhar status e progresso de todas as solicitações enviadas
- Suporte Multi-idioma: Localização em português para usuários brasileiros
- Frontend: Next.js 15.4+, React 19, TypeScript 5
- Estilo: Tailwind CSS 4
- Banco de Dados: SQLite3 com interface promisificada
- Autenticação: Tokens JWT com middleware seguro
- Criptografia: libsodium para criptografia ponta a ponta
- Testes: Jest (unidade), Playwright (E2E)
- Qualidade de Código: ESLint, TypeScript modo estrito
- Node.js 18.17 ou posterior
- npm, yarn, ou pnpm
- Git
git clone <repository-url>
cd lgpd-compliance
npm install-
Copie o arquivo de exemplo do ambiente:
cp .env.example .env
-
Atualize o arquivo
.envcom seus valores de configuração.
# Método 1: Com argumentos de linha de comando (recomendado)
npm run create-super-admin -- --email admin@yourplatform.com --password YourSecurePass123!
# Método 2: Modo interativo (solicita entrada)
npm run create-super-admin
# Ver ajuda
npm run create-super-admin -- --helpRequisitos de Senha:
- Mínimo 8 caracteres
- Pelo menos uma letra maiúscula
- Pelo menos uma letra minúscula
- Pelo menos um caractere especial
Recursos de Segurança:
- ✅ Apenas um super admin permitido por sistema
- ✅ Senhas são hasheadas com bcrypt (salt rounds: 12)
- ✅ Validação rigorosa de entrada
- ✅ Credenciais nunca armazenadas permanentemente no script
npm run devAbra http://localhost:3000 para visualizar a aplicação.
npm run build
npm start| Script | Descrição |
|---|---|
npm run create-super-admin |
Criar conta de super administrador inicial |
npm run dev |
Iniciar servidor de desenvolvimento |
npm run build |
Construir a aplicação para produção |
npm run start |
Iniciar o servidor de produção |
npm run lint |
Executar análise de código ESLint |
npm test |
Executar testes unitários com Jest |
npm run test:watch |
Executar testes em modo watch |
npm run test:coverage |
Executar testes com relatório de cobertura |
Maria, operadora da plataforma LGPD, inicia a configuração do sistema executando o comando de criação do super administrador:
npm run create-super-admin -- --email maria@lgpdplatform.com --password SecureAdmin123!O sistema cria sua conta com o mais alto nível de acesso. Agora ela pode fazer login no painel administrativo (/admin) e precisa configurar uma nova empresa na plataforma.
Maria navega para a interface administrativa onde vê um aviso crítico: "Esta página é apenas para operadores da plataforma. Representantes da empresa devem ser criados através desta interface." Ela preenche o formulário de criação de representante da empresa para a TechCorp Ltd, inserindo:
- Email: admin@techcorp.com
- Company ID: techcorp-ltd
- Função: admin
- Seleciona "Gerar senha temporária automaticamente"
Quando ela clica em "Criar Representante da Empresa", o sistema chama /api/admin/company-representatives e gera uma senha temporária automaticamente que deve ser enviada de forma segura para João.
João, o recém-criado administrador da TechCorp Ltd, recebe suas credenciais de login de forma segura. Ele visita a plataforma e faz login em /login usando o sistema de autenticação. Após login bem-sucedido, ele é direcionado para /company-setup.
João vê um aviso crítico de segurança: "Private keys are generated in your browser and NEVER sent to our servers". Ele clica em "Gerar Chaves de Criptografia", que aciona a função de geração de chaves.
O sistema gera um par de chaves de criptografia:
- Chave pública (para receber solicitações LGPD criptografadas)
- Chave privada (para descriptografar solicitações - permanece no navegador)
João salva sua chave privada no gerenciador de senhas, baixa o backup usando "📁 Download Key File", marca "I have saved my private key securely" e clica em "✅ Register Public Key & Continue". O sistema registra a chave pública da empresa no banco de dados.
Ana, uma cidadã comum, visita a página inicial da plataforma (/) e lê sobre conformidade LGPD. Ela aprende sobre seus direitos através dos cartões de funcionalidades:
- 📝 Acesso a Dados ("Visualize todos os dados pessoais armazenados")
- 🗑️ Exclusão de Dados ("Solicite a remoção completa dos seus dados")
- ✏️ Correção de Dados ("Atualize informações incorretas")
- 📤 Portabilidade de Dados ("Exporte seus dados em formato portável")
Impressionada com a abordagem de segurança primeiro descrita, Ana clica em "Criar Conta".
Ana preenche o formulário de registro em /register com seu email e uma senha forte. O sistema valida que sua senha atende aos requisitos: 8+ caracteres, maiúscula, minúscula e caracteres especiais.
Quando ela submete, o endpoint da API /api/auth/register processa sua solicitação:
- Valida formato do email
- Faz hash de sua senha com bcrypt
- Cria sua conta com função 'data_subject'
- Retorna código de sucesso 'REGISTRATION_SUCCESS'
Ana faz login em /login usando suas credenciais. O sistema verifica sua senha, gera um token JWT, e a redireciona para /dashboard.
Em seu dashboard, Ana vê uma mensagem de boas-vindas e três opções principais:
- "Solicitar Dados" (acesso a dados)
- "Excluir Dados" (exclusão de dados)
- "Corrigir Dados" (correção de dados)
Ana clica em "Solicitar Dados" que a leva para /create-request?type=data_access. O sistema primeiro realiza uma verificação de compatibilidade do navegador e mostra "✓ Seu navegador é compatível".
Ana preenche sua solicitação:
- Motivo: "Quero verificar meus dados pessoais"
- Descrição: "Por favor, forneça todos os meus dados pessoais incluindo nome completo, endereço e dados comportamentais coletados sobre mim"
Quando ela preenche o formulário e procede, o sistema automaticamente inicia o processo de verificação de identidade via PIX.
O sistema agora requer verificação de identidade via PIX. Ana vê o formulário onde insere seu CPF: "123.456.789-00".
Ela clica em "🔐 Gerar QR Code PIX (R$ 0,01)", que gera um QR code PIX para pagamento de R$ 0,01. Após simular o pagamento com "✅ Simular Pagamento Realizado", sua identidade é verificada.
Com a identidade verificada, Ana vê a tela de confirmação mostrando "✅ Identidade verificada - Processando solicitação..." e "Sua solicitação está sendo criptografada e enviada automaticamente".
O sistema automaticamente aciona o processo de criptografia em /api/lgpd-requests:
- Verifica autenticação e valida os dados
- Busca a chave pública da TechCorp
- Criptografa os dados sensíveis usando criptografia sealed box
- Armazena apenas metadados e o blob criptografado no banco de dados
O sistema responde com sucesso e confirmação de criptografia:
✅ Solicitação LGPD criada com sucesso!
🔒 DADOS CRIPTOGRAFADOS COM SEGURANÇA
• Apenas a empresa pode descriptografar
• A plataforma NÃO pode ver seus dados pessoais
• Operador com conhecimento zero implementado
João da TechCorp recebe uma notificação sobre a nova solicitação LGPD. Ele faz login em /company-dashboard mas primeiro deve desbloquear o dashboard com sua chave privada.
João insere sua chave privada de seu gerenciador de senhas. O sistema valida o formato da chave e desbloqueia o dashboard, mostrando "Dashboard Desbloqueado".
O dashboard exibe a solicitação de Ana:
- Tipo de Solicitação: "Acesso aos Dados - 1755288038734-b9kyt20gt"
- Status: "PENDING"
- Criada: "15/08/2025 às 20:00"
- Prazo: "30/08/2025 às 20:00" (15 dias)
João clica na solicitação para descriptografá-la. O sistema usa sua chave privada para descriptografar o sealed box, revelando os dados originais de Ana:
- Email: ana@email.com
- CPF: 123.456.789-00
- Motivo: "Quero verificar meus dados pessoais"
- Descrição: "Por favor, forneça todos os meus dados..."
João revisa a solicitação descriptografada de Ana e clica em "Processar Solicitação". Ele coleta os dados de Ana dos sistemas da TechCorp:
- Dados de perfil (nome, email, endereço)
- Dados comportamentais (histórico de compras, preferências)
- Dados técnicos (endereços IP, informações do dispositivo)
João compila uma resposta abrangente e clica em "Marcar como Concluída". O sistema atualiza o status da solicitação para 'COMPLETED' com timestamp de conclusão.
Ana faz login novamente na plataforma e visita o dashboard para verificar o status de sua solicitação. Ela vê que sua solicitação agora está marcada como "COMPLETED" com um indicador de status verde.
A TechCorp envia a Ana sua exportação completa de dados através de um canal seguro (separado da plataforma), cumprindo sua solicitação de acesso LGPD dentro do prazo obrigatório de 15 dias.
O sistema mantém trilha de auditoria completa com metadados e timestamps, garantindo conformidade LGPD:
- Ana exerceu seu direito de acesso a dados
- TechCorp respondeu dentro dos prazos legais
- Plataforma facilitou transferência segura com conhecimento zero
- Super Admin manteve integridade sem acessar dados pessoais
Isso demonstra o fluxo completo de conformidade LGPD com criptografia ponta a ponta, onde dados sensíveis permanecem acessíveis apenas aos representantes da empresa.
- Cobrindo lógica de negócio principal
- Rotas de API, autenticação, criptografia, operações de banco de dados
- Executar com:
npm test - Relatórios de cobertura em
/coverage/
- Cobrindo jornadas do usuário
- Fluxos de autenticação, fluxos de trabalho de solicitação LGPD, pagamentos PIX
- Executar com:
npx playwright test - Requer servidor de desenvolvimento rodando na porta 3000
Testes de Navegador (Playwright)
↓
Testes de Integração (API + DB)
↓
Testes Unitários (Jest)
src/
├── app/ # Next.js App Router
│ ├── api/auth/ # Rotas de API de autenticação
│ ├── api/lgpd-requests/ # API de solicitações LGPD
│ ├── api/admin/ # API administrativa
│ ├── api/pix/ # API de pagamento PIX
│ ├── dashboard/ # Página do dashboard do usuário
│ ├── company-dashboard/ # Dashboard da empresa
│ ├── company-setup/ # Configuração de empresa
│ ├── admin/ # Painel administrativo
│ ├── login/ # Página de login
│ ├── register/ # Página de registro
│ ├── create-request/ # Criação de solicitação LGPD
│ └── logout/ # Página de logout
├── lib/ # Utilitários principais
│ ├── auth-middleware.ts # Autenticação JWT
│ ├── crypto.ts # Criptografia ponta a ponta
│ ├── database-v2.ts # Operações de banco de dados
│ ├── jwt.ts # Gerenciamento de tokens
│ ├── message-constants.ts # Mensagens de erro/sucesso
│ ├── identity-verification.ts # Verificação de identidade
│ ├── auth-client.tsx # Cliente de autenticação
│ ├── auth-fetch.ts # Utilitários de fetch autenticado
│ └── user-storage.ts # Armazenamento de usuário
├── scripts/ # Scripts utilitários
│ └── create-super-admin.ts # Criação de super admin
└── types/ # Definições de tipos TypeScript
features/ # Arquivos de especificação de funcionalidades
coverage/ # Relatórios de cobertura de testes
Este projeto segue práticas de Desenvolvimento Orientado por Testes (TDD):
- Teste Primeiro: Escrever testes que falham, fazer passar, então refatorar
- Código Limpo: Seguindo princípios SOLID e nomenclatura significativa
- Segurança Primeiro: Modelo de segurança zero-trust com configuração baseada em ambiente
- Especificação por Funcionalidades: Funcionalidades são definidas usando arquivos de especificação
- Direitos do Artigo 18: Direito à informação, acesso, correção, anonimização, portabilidade, exclusão
- Gestão de Consentimento: Rastreamento granular de consentimento e mecanismos de retirada
- Registros de Processamento de Dados: Documentação de atividades de processamento do Artigo 37
- Resposta a Incidentes: Fluxos de trabalho de notificação de violação de dados
- Privacidade por Design: Controles de privacidade embutidos e minimização de dados
# Matar processo usando porta 3000
lsof -ti:3000 | xargs kill -9
# Ou usar porta diferente
npm run dev -- -p 3001# Garantir que servidor dev está rodando primeiro
npm run dev
# Aguardar mensagem "Ready", então executar testes
npx playwright test# Garantir que arquivo SQLite é gravável
chmod 644 lgpd_compliance.db
# Ou deletar e recriar
rm lgpd_compliance.db
# Banco de dados será recriado na primeira chamada da API# Instalar navegadores Playwright
npx playwright install chromium
# Ou instalar dependências do sistema
npx playwright install-depsPara solução de problemas mais detalhada, consulte a documentação inline neste README.
- Especificação Primeiro: Funcionalidades devem começar com arquivos de especificação
- Cobertura de Testes: Todo código deve ter testes passando
- Padrões de Código: Seguir convenções estabelecidas e regras de linting
- Segurança Primeiro: Abordagem zero-trust para todas as implementações
# 1. Criar branch de funcionalidade
git checkout -b feature/nome-da-sua-funcionalidade
# 2. Escrever especificações de funcionalidades
# Editar arquivos em features/
# 3. Implementar com TDD
npm run test:watch
# 4. Verificar testes E2E
npx playwright test
# 5. Executar suite completa de testes
npm test && npx playwright test- CLAUDE.md - Regras de desenvolvimento de IA específicas do projeto
- LGPD: Texto da Lei | Diretrizes ANPD
- Stack Tecnológica: Next.js | Tailwind CSS | Jest | Playwright
- Implantação: Guia AWS Amplify para aplicações Next.js full-stack