Project Eris (nomeado através da Deusa Grega da Discórdia e Conflito) é um projeto científico focado em Phishing e Engenharia Social, onde, a partir de artigos e estudos científicos, seguimos com a ideia de explorar a maior vulnerabilidade de todos os sistemas: o ser humano.
- 🌐 Website: project-eris.com
- 💻 Backend Repository: github.com/project-eris-back
- ⚛️ Frontend Repository: github.com/project-eris-front
Com panfletos e aplicação web estruturados com base em artigos científicos, de forma padronizada, distribuímos pelas duas Universidades da UNIUBE de Uberlândia um website de sorteio falso projetado para medir a suscetibilidade à engenharia social.
O experimento foi conduzido com rigor metodológico:
- Distribuição Física: Panfletos impressos distribuídos nos campi universitários
- Website Isca: Plataforma web simulando um sorteio corporativo
- Design Estratégico: Interface brandless inspirada na estética minimalista da Apple
- Gatilhos Mentais: Frases e elementos visuais baseados em estudos de persuasão
- Coleta de Dados: Monitoramento de comportamento e engajamento dos participantes
O projeto busca responder:
- ✅ Quantas pessoas cairiam neste experimento de phishing?
- ✅ Quanto tempo os usuários ficaram na página?
- ✅ Qual a distribuição por curso e campus?
- ✅ Quantos efetivamente leram os termos de uso?
- ✅ Os termos de uso (que avisam explicitamente tratar-se de sorteio FALSO) foram ignorados?
Transparência Total: Os termos de uso do sistema informam claramente aos participantes que:
- O sorteio é fictício
- Trata-se de um experimento científico
- Os dados são coletados para fins acadêmicos e de pesquisa
O projeto foi desenvolvido seguindo boas práticas do React e arquitetura de componentes modular, garantindo:
- Separação de responsabilidades entre componentes, APIs e utilitários
- Modularidade - componentes reutilizáveis e independentes
- Design Brandless - estética minimalista inspirada na Apple para credibilidade
- Gatilhos Mentais - elementos de interface baseados em estudos de persuasão
- Responsividade - design adaptável para mobile e desktop
- Performance - otimizações com Vite e lazy loading
- Acessibilidade - implementação de práticas de UX/UI inclusivas
- Rastreamento Comportamental - analytics integrado para coleta de dados científicos
┌─────────────────────────────────────┐
│ Presentation Layer │ ← Components, Pages
│ (Interface de usuário) │
├─────────────────────────────────────┤
│ Application Layer │ ← API Clients, Types
│ (Lógica de aplicação) │
├─────────────────────────────────────┤
│ Analytics Layer │ ← Google Analytics, Tracking
│ (Monitoramento de comportamento) │
├─────────────────────────────────────┤
│ Infrastructure Layer │ ← Build tools, Configs
│ (Configurações e build) │
└─────────────────────────────────────┘
- Versão do Projeto: 0.0.0
- Node.js: 18+ (recomendado)
- React: 18.3.1
- TypeScript: 5.5.3
- Vite: 5.4.2 (Build tool)
-
React (18.3.1)
- Biblioteca JavaScript para criação de interfaces de usuário
- Componentes funcionais com hooks
- Gerenciamento de estado com useState e useEffect
-
React DOM (18.3.1)
- Renderização de componentes React no navegador
- Integração com DOM virtual para performance otimizada
-
TypeScript (5.5.3)
- Tipagem estática para JavaScript
- IntelliSense e detecção de erros em tempo de desenvolvimento
- Interfaces e tipos customizados
-
Tailwind CSS (3.4.17)
- Framework CSS utility-first
- Design responsivo e mobile-first
- Customização através de classes utilitárias
-
Framer Motion (11.0.8)
- Biblioteca de animações para React
- Transições fluidas e animações de componentes
- Gestos e interações avançadas
-
Lucide React (0.344.0)
- Biblioteca de ícones SVG otimizados
- Ícones modernos e consistentes
- Totalmente customizáveis
-
React Icons (5.5.0)
- Coleção extensa de ícones populares
- Suporte a múltiplas bibliotecas de ícones
- React Router DOM (7.8.2)
- Roteamento declarativo para React
- Navegação SPA (Single Page Application)
- Roteamento aninhado e proteção de rotas
- Axios (1.9.0)
- Cliente HTTP para requisições à API
- Interceptadores de request/response
- Suporte a TypeScript e cancelamento de requests
- React GA4 (2.1.0)
- Integração com Google Analytics 4
- Rastreamento de eventos e conversões
- Métricas de comportamento do usuário
-
React Hot Toast (2.5.2)
- Notificações toast elegantes e customizáveis
- Animações suaves e posicionamento flexível
-
React Toastify (11.0.5)
- Sistema de notificações toast robusto
- Múltiplos tipos de alerta e configurações
-
Vite (5.4.2)
- Build tool moderno e rápido
- Hot Module Replacement (HMR)
- Otimização automática de bundles
-
@vitejs/plugin-react (4.3.1)
- Plugin oficial do Vite para React
- Suporte a JSX e Fast Refresh
-
ESLint (9.9.1)
- Linter para identificação de problemas no código
- Regras customizadas para React e TypeScript
- Integração com editor
-
TypeScript ESLint (8.3.0)
- Parser ESLint para TypeScript
- Regras específicas para código TypeScript
-
PostCSS (8.5.5)
- Ferramenta para transformação de CSS
- Suporte a plugins e otimizações
-
Autoprefixer (10.4.21)
- Adiciona prefixos CSS automaticamente
- Compatibilidade cross-browser
O projeto requer as seguintes variáveis de ambiente para execução:
VITE_API_BASE_URL=http://localhost:8080/api
VITE_GA4_MEASUREMENT_ID=G-XXXXXXXXXX| Variável | Descrição | Exemplo |
|---|---|---|
VITE_API_BASE_URL |
URL base da API backend | http://localhost:8080/api ou https://api.projeto-eris.com/api |
VITE_GA4_MEASUREMENT_ID |
ID de medição do Google Analytics 4 | G-XXXXXXXXXX |
VITE_API_BASE_URL=http://localhost:8080/api
VITE_GA4_MEASUREMENT_ID=G-XXXXXXXXXXset VITE_API_BASE_URL=http://localhost:8080/api
set VITE_GA4_MEASUREMENT_ID=G-XXXXXXXXXX$env:VITE_API_BASE_URL="http://localhost:8080/api"
$env:VITE_GA4_MEASUREMENT_ID="G-XXXXXXXXXX"export VITE_API_BASE_URL=http://localhost:8080/api
export VITE_GA4_MEASUREMENT_ID=G-XXXXXXXXXXenvironment:
- VITE_API_BASE_URL=http://backend:8080/api
- VITE_GA4_MEASUREMENT_ID=G-XXXXXXXXXXPara configurar o GA4:
- Acesse Google Analytics
- Crie uma nova propriedade GA4
- Obtenha o Measurement ID (formato: G-XXXXXXXXXX)
- Configure as variáveis de ambiente
- A aplicação irá rastrear automaticamente:
- Visualizações de página
- Eventos de formulário
- Tempo de permanência
- Conversões de cadastro
- Node.js 18+ instalado
- npm ou yarn configurado
- Variáveis de ambiente configuradas (.env)
- Backend da aplicação rodando (Project Eris Backend)
npm install
# ou
yarn installnpm run dev
# ou
yarn devA aplicação estará disponível em: http://localhost:5173
npm run build
# ou
yarn buildnpm run preview
# ou
yarn preview# Build da imagem
docker build -t project-eris-front .
# Executar container
docker run -p 3000:3000 \
-e VITE_API_BASE_URL=http://localhost:8080/api \
-e VITE_GA4_MEASUREMENT_ID=G-XXXXXXXXXX \
project-eris-frontdocker-compose up -dnpm run lint
# ou
yarn lint- Estética Brandless: Design minimalista inspirado na Apple para maximizar credibilidade
- Gatilhos Mentais: Implementação de técnicas de persuasão validadas por artigos científicos
- Hierarquia Visual: Elementos organizados para guiar o comportamento do usuário
- Cores e Tipografia: Escolhas baseadas em psicologia das cores e legibilidade
- Layout Responsivo: Otimizado para diferentes tamanhos de tela
- Navegação Intuitiva: Interface touch-friendly para dispositivos móveis
- Urgência: Countdown dinâmico criando senso de escassez temporal
- Autoridade: Design profissional simulando credibilidade corporativa
- Prova Social: Elementos visuais sugerindo participação massiva
- Reciprocidade: Promessa de benefício (sorteio) em troca de dados
- Comprometimento: Formulário progressivo aumentando investimento do usuário
- Rastreamento de Tempo: Mede tempo gasto na página e lendo termos de uso
- Google Analytics 4: Integração completa com eventos personalizados para análise científica
- Métricas de Conversão: Taxa de conversão de cadastros (sucesso do phishing)
- Engajamento com Termos: Monitoramento se usuários leem avisos de sorteio falso
- Dados Demográficos: Coleta de curso, campus e idade para análise estatística
- Debug Mode: Ferramenta de debug para validação de eventos e coleta de dados
- Contador regressivo para data do sorteio
- Atualização automática em tempo real
- Animações visuais atrativas
- Modal interativo para visualização dos termos
- Aviso Explícito: Informa claramente que o sorteio é FALSO
- Transparência Científica: Declara tratar-se de experimento acadêmico
- Contador de tempo de leitura para análise de comportamento
- Rastreamento de engajamento: quantos usuários realmente leem os avisos
- Questão Central da Pesquisa: Usuários ignoram avisos explícitos?
- Toasts informativos para feedback ao usuário
- Notificações de sucesso, erro e carregamento
- Animações suaves de entrada e saída
- Animações fluidas com Framer Motion
- Transições de página elegantes
- Micro-interações para melhor UX
O frontend se comunica com a API backend através de requisições HTTP estruturadas:
POST /api/register
Content-Type: application/json
{
"name": "João Silva",
"email": "joao@kroton.com.br",
"course_id": 1,
"birth_date": "1995-05-15",
"campus": 1,
"viewed_tos": 1,
"page_time_spent": 120, // tempo em segundos
"terms_time_spent": 45 // tempo em segundos (ou null)
}GET /api/courses/get-all
Response: Array<{id: number, course: string}>POST /api/terms/terms_counter // Incrementa contador de leitura
POST /api/terms/page_counter // Incrementa contador de visualizaçãoO frontend possui tratamento robusto de erros da API:
// Exemplo de resposta de erro
{
"success": false,
"message": "Email já cadastrado no sistema"
}Tipos de Erro Tratados:
- ❌ Validação de Campos: Email inválido, campos obrigatórios
- ❌ Duplicação: Email já cadastrado
- ❌ Conectividade: Falhas de rede ou servidor indisponível
- ❌ Timeout: Requisições que excedem tempo limite
Utiliza Axios para comunicação com configurações otimizadas:
// Configuração base do cliente
const apiClient = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL,
timeout: 10000,
headers: {
'Content-Type': 'application/json'
}
});src/
├── api/ # CAMADA DE INTEGRAÇÃO
│ └── ga4.tsx # Google Analytics 4 integration
├── app/ # CAMADA DE APLICAÇÃO
│ ├── api/ # Clientes e tipos da API
│ │ ├── client.ts # Cliente HTTP para cursos
│ │ ├── register_api.ts # Cliente HTTP para registro
│ │ └── types.ts # Interfaces TypeScript
│ └── pages/ # Páginas da aplicação
│ ├── form.tsx # Página principal do formulário
│ ├── error_404.tsx # Página de erro 404
│ └── _components/ # Componentes reutilizáveis
├── App.tsx # Componente raiz da aplicação
├── main.tsx # Ponto de entrada da aplicação
├── index.css # Estilos globais com Tailwind
└── vite-env.d.ts # Definições de tipos para Vite
Arquivos de Configuração:
├── index.html # Template HTML principal
├── package.json # Dependências e scripts
├── vite.config.ts # Configuração do Vite
├── tailwind.config.js # Configuração do Tailwind CSS
├── postcss.config.js # Configuração do PostCSS
├── tsconfig.json # Configuração do TypeScript
├── eslint.config.js # Configuração do ESLint
├── Dockerfile # Configuração do container Docker
└── docker-compose.yml # Orquestração de serviços
- Formulário de cadastro com validações em tempo real
- Integração com Google Analytics 4
- Rastreamento de tempo de permanência
- Animações com Framer Motion
- Gerenciamento de estado com React Hooks
src/app/pages/_components/TextInput.tsx- Input text reutilizável usado para nome e e-mailsrc/app/pages/_components/DateInput.tsx- Componente para entrada de data (texto ou date)src/app/pages/_components/CourseSelect.tsx- Busca e seleção de cursos com dropdownsrc/app/pages/_components/TermsModal.tsx- Modal de termos e condições (conteúdo da política)
- Inicialização do GA4 com tratamento de erros
- Funções de rastreamento de eventos personalizados
- Debug mode para desenvolvimento
- Rastreamento de conversões e métricas
export interface RegisterPayload {
name: string;
email: string;
course_id: number;
birth_date: string;
campus: number;
viewed_tos: number;
page_time_spent: number;
terms_time_spent: number | null;
}- Configuração do Axios
- Métodos para buscar cursos
- Tratamento de erros padronizado
- Cores personalizadas do projeto
- Breakpoints responsivos
- Animações customizadas
vite.config.ts - Configuração do build tool
- Build Tool: Vite 5.4.2 (extremamente rápido)
- Hot Module Replacement: Ativo durante desenvolvimento
- Otimizações: Tree-shaking automático e code splitting
- Target: ES2020 para compatibilidade moderna
- Dev Server: Porta 5173 (padrão do Vite)
- Proxy: Configurável para API backend
- Source Maps: Habilitados para debug
- Output: Pasta
dist/com assets otimizados - Minificação: CSS e JavaScript minificados
- Assets: Versionamento automático para cache busting
tsconfig.json - Configurações de tipagem strict
eslint.config.js - Regras de linting para React/TypeScript
- Console Logs: Disponíveis durante desenvolvimento
- GA4 Debug: Modo debug para validação de eventos
- Error Boundary: Captura de erros React em produção
- Formato: Validação de formato de email válido
- Domínio: Específico para emails universitários (@kroton.com.br)
- Caracteres Especiais: Bloqueio de caracteres inválidos em tempo real
- Feedback Visual: Indicação imediata de erro/sucesso
- Caracteres Especiais: Bloqueio automático de símbolos e números
- Comprimento: Validação de tamanho mínimo e máximo
- Formato: Apenas letras e espaços permitidos
- Formato Dual: Digitação manual (DD/MM/YYYY) ou seleção via calendário
- Validação de Idade: Verificação automática se maior de 18 anos
- Conversão Automática: DD/MM/YYYY ↔ YYYY-MM-DD para backend
- Compatibilidade Mobile: Input apropriado para dispositivos móveis
- Busca Dinâmica: Filtragem em tempo real por nome do curso
- Dropdown Inteligente: Lista suspensa com scroll otimizado
- Validação: Verificação se curso selecionado é válido
- Mobile First: Design otimizado para dispositivos móveis
- Breakpoints: Adaptação fluida para tablet e desktop
- Touch Gestures: Suporte completo a gestos touch
- Contraste: Cores com contraste adequado (WCAG)
- Navegação por Teclado: Suporte completo a tab navigation
- Screen Readers: Atributos ARIA para leitores de tela
- Focus Management: Indicações visuais claras de foco
- Lazy Loading: Carregamento otimizado de componentes
- Debouncing: Pesquisa de cursos com delay para performance
- Memoização: Otimização de re-renders desnecessários
- Input Filtering: Filtragem automática de caracteres maliciosos
- XSS Prevention: Proteção contra Cross-Site Scripting
- Data Validation: Validação rigorosa antes do envio ao backend
- Secure Communications: Preparado para comunicação HTTPS
- Environment Variables: Credenciais sensíveis via variáveis de ambiente
- API Security: Headers de segurança apropriados nas requisições
- Code Splitting: Divisão automática do código em chunks
- Tree Shaking: Remoção de código não utilizado
- Asset Optimization: Compressão de imagens e assets
- Bundle Analysis: Análise de tamanho dos bundles
- Virtual DOM: Otimizações nativas do React
- Memoização: React.memo e useMemo para evitar re-renders
- Debouncing: Otimização de pesquisas e validações
- Lazy Loading: Carregamento sob demanda de componentes
- Core Web Vitals: Otimizado para LCP, FID e CLS
- Time to Interactive: Tempo reduzido para interação
- Bundle Size: Bundles otimizados para carregamento rápido
- Page Views: Visualizações de página automáticas
- Form Interactions: Início de preenchimento, submissão
- User Engagement: Tempo de permanência, scroll depth
- Terms Reading: Tempo gasto lendo termos de uso
- Conversions: Cadastros completados com sucesso
// Exemplos de eventos rastreados
trackEvent('form_start', { page: 'registration' });
trackEvent('terms_opened', { engagement_time: timeSpent });
trackEvent('course_selected', { course_id: selectedCourse });
trackConversion('registration_complete', {
page_time: pageTimeSpent,
terms_time: termsTimeSpent
});- Debug Mode: Validação de eventos em desenvolvimento
- Console Logging: Logs detalhados para troubleshooting
- Event Validation: Verificação de parâmetros de eventos
- Page Time: Tempo total gasto na página de cadastro
- Terms Time: Tempo específico lendo termos de uso
- Precision: Medição em milissegundos convertidos para segundos
- Funnel Analysis: Análise do funil de conversão
- Drop-off Points: Identificação de pontos de abandono
- Engagement Metrics: Métricas de engajamento do usuário
{
page_time_spent: number, // Segundos na página
terms_time_spent: number | null, // Segundos lendo termos
viewed_tos: number // 0 ou 1 (booleano)
}# Build stage
FROM node:18-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
ARG VITE_API_BASE_URL
ARG VITE_GA4_MEASUREMENT_ID
ENV VITE_API_BASE_URL=$VITE_API_BASE_URL
ENV VITE_GA4_MEASUREMENT_ID=$VITE_GA4_MEASUREMENT_ID
RUN npm run build
# Production stage
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]version: '3.8'
services:
frontend:
build:
context: .
dockerfile: Dockerfile
args:
VITE_API_BASE_URL: ${VITE_API_BASE_URL}
VITE_GA4_MEASUREMENT_ID: ${VITE_GA4_MEASUREMENT_ID}
ports:
- "80:3000"
environment:
- NODE_ENV=production# Build local
npm run build
# Build com Docker
docker build -t project-eris-front:latest .
# Push para registry
docker push marceloaaps/project-eris-front:1.0.15- Desenvolvimento:
npm run dev(localhost:5173) - Preview:
npm run preview(build local) - Produção: Docker container com Nginx
- Dockerfile otimizado para builds automatizados
- Suporte a variáveis de ambiente para diferentes ambientes
- Build multi-stage para redução de tamanho da imagem
- React Testing Library: Testes focados no comportamento do usuário
- Jest: Framework de testes integrado ao Vite
- User Event Testing: Simulação de interações reais do usuário
// Exemplo de teste do componente Form
test('should validate email format', () => {
render(<Form pageNumber={1} />);
const emailInput = screen.getByLabelText(/email/i);
fireEvent.change(emailInput, { target: { value: 'invalid-email' } });
expect(screen.getByText(/email inválido/i)).toBeInTheDocument();
});- Fluxo completo de cadastro
- Validações de formulário
- Comunicação com API mock
- Navegação por teclado
- Leitores de tela
- Contraste de cores
npm run lint # ESLint para qualidade de códigonpx tsc --noEmit # Verificação de tipos TypeScript- Lighthouse audits
- Bundle size analysis
- Runtime performance monitoring
- Clean Code: Código limpo e bem documentado
- SOLID Principles: Aplicados na arquitetura de componentes
- DRY: Reutilização de componentes e funções
- Separation of Concerns: Separação clara de responsabilidades
- Augusto Machado - LinkedIn
- Lucas Matias - LinkedIn
- Lucas Mendonça - LinkedIn
- Marcelo Alexandre Alves - LinkedIn
Project Eris - Desenvolvido com ❤️ para estudos de Cibersegurança e Engenharia Social