Frontend do sistema de planejamento financeiro desenvolvido com Next.js 14, TypeScript e ShadCN/UI.
- Next.js 14 - Framework React com App Router
- TypeScript - Tipagem estática
- App Router - Roteamento baseado em arquivos
- ShadCN/UI - Componentes de interface com Tailwind CSS
- Tailwind CSS - Framework CSS utilitário
- Dark Mode - Tema escuro como padrão
- Responsive Design - Design adaptável para todos os dispositivos
- TanStack Query - Gerenciamento de estado servidor
- Auto-invalidação - Cache automático após mutações
- Hooks Customizados - Abstração da lógica de API
- Cache Inteligente - Gerenciamento otimizado de dados
- React Hook Form - Gerenciamento de formulários
- Zod v4 - Validação de schemas TypeScript
- @hookform/resolvers - Integração entre React Hook Form e Zod
- Validação Tipada - Schemas de validação com TypeScript
- Axios - Cliente HTTP para chamadas REST
- Interceptors - Interceptação de requisições e respostas
- Configuração Centralizada - Cliente configurado com base URL e timeouts
- Error Handling - Tratamento global de erros
- Recharts - Gráficos e visualizações
- next-themes - Gerenciamento de temas (dark/light mode)
- Lucide React - Ícones SVG
- SonarQube - Análise de qualidade de código
O projeto segue uma arquitetura modular e escalável, organizada em camadas bem definidas:
financial-planner-frontend/
├── 📱 Frontend (Next.js 14 + TypeScript)
├── 🎨 UI Components (ShadCN/UI + Tailwind)
├── 🔄 State Management (TanStack Query)
├── 📝 Forms & Validation (React Hook Form + Zod)
├── 🌐 API Layer (Axios + Custom Hooks)
└── 🧪 Quality Assurance (SonarQube)
app/
├── layout.tsx # Layout principal com sidebar responsiva
├── page.tsx # Página inicial (Alocações)
├── providers.tsx # Providers do React (Query, Theme)
├── globals.css # Estilos globais com tema dark
├── favicon.ico # Ícone do site
├── dashboard/ # Dashboard (redireciona para alocações)
├── projecao/ # Página de projeção patrimonial
├── alocacoes/ # Página de alocações
├── movimentacoes/ # Página de movimentações
├── historico/ # Página de histórico
└── seguros/ # Página de seguros
components/
├── ui/ # Componentes ShadCN/UI
│ ├── badge.tsx # Badge de status
│ ├── button.tsx # Botões customizados
│ ├── card.tsx # Cards de conteúdo
│ ├── dialog.tsx # Modais e diálogos
│ ├── form.tsx # Formulários base
│ ├── input.tsx # Campos de entrada
│ ├── table.tsx # Tabelas de dados
│ └── toast.tsx # Notificações
├── admin-panel/ # Sidebar e painel administrativo
│ ├── sidebar.tsx # Sidebar responsiva (mobile/desktop)
│ └── menu.tsx # Componente de menu
├── layout/ # Componentes de layout
│ ├── app-layout.tsx # Layout principal da aplicação
│ ├── page-container.tsx # Container padrão para páginas
│ └── section.tsx # Componente de seção
├── allocations/ # Componentes de alocações
├── movements/ # Componentes de movimentações
├── insurances/ # Componentes de seguros
└── projections/ # Componentes de projeções
hooks/
├── api/ # Hooks para API
│ └── use-simulations.ts # Hook para simulações
├── use-sidebar.ts # Hook para sidebar
├── use-store.ts # Hook para store global
└── index.ts # Exportações centralizadas
lib/
├── api/ # Serviços de API
│ ├── client.ts # Cliente Axios configurado
│ ├── simulations.ts # API de simulações
│ ├── allocations.ts # API de alocações
│ ├── movements.ts # API de movimentações
│ └── insurance.ts # API de seguros
├── constants/ # Constantes centralizadas
│ ├── ui.ts # Constantes de UI
│ ├── sidebar.ts # Constantes do sidebar
│ ├── pages.ts # Constantes das páginas
│ ├── layout.ts # Constantes de layout
│ ├── api.ts # Constantes da API
│ ├── components.ts # Constantes de componentes
│ └── messages.ts # Mensagens e textos
├── providers/ # Providers do React
│ └── query-provider.tsx # Provider do TanStack Query
├── types/ # Tipos TypeScript
│ └── core.ts # Tipos principais
├── validations/ # Schemas Zod
│ ├── schemas.ts # Schemas de validação
│ └── simulation.ts # Schema de simulação
└── utils.ts # Funções utilitárias
/(Alocações) - Página inicial com dashboard de alocações/dashboard- Redireciona para alocações/projecao- Projeção patrimonial/movimentacoes- Gestão de movimentações/seguros- Gestão de seguros/historico- Histórico de operações
- UI Components - Componentes base do ShadCN/UI
- Layout Components - Estrutura e containers
- Business Components - Componentes específicos do domínio
- Admin Panel - Sidebar e navegação
- TanStack Query - Cache e sincronização de dados
- Custom Hooks - Lógica de negócio reutilizável
- API Layer - Abstração das chamadas HTTP
- Centralized Constants - Valores reutilizáveis
- Type Definitions - Tipos TypeScript
- Validation Schemas - Validação com Zod
- Node.js 18+
- npm ou yarn
# Instalar dependências
npm install
# Executar em modo desenvolvimento
npm run dev
# Build para produção
npm run build
# Executar build de produção
npm start# Build da imagem
docker build -t financial-planner-frontend .
# Executar container
docker run -p 3000:3000 financial-planner-frontendO projeto está configurado com tema escuro como padrão, seguindo o design do Figma. O toggle de tema está disponível na sidebar.
- Provider:
next-themesconfigurado emapp/providers.tsx - Toggle: Componente
ThemeTogglena sidebar - CSS Variables: Definidas em
globals.csspara light/dark mode - Tailwind: Configurado com
darkMode: ["class"]
- Design Responsivo: Sidebar adaptável para mobile, tablet e desktop
- Hamburger Menu: Menu hambúrguer para dispositivos móveis
- Zero Flash: Carregamento suave sem flash de conteúdo
- Constantes Centralizadas: Todas as configurações em
lib/constants/sidebar.ts - Componentes Reutilizáveis: Código modular e reutilizável
- Desktop: Sidebar fixa com logo e menu completo
- Mobile: Header com logo + hambúrguer, sidebar deslizante
- Menu Hierárquico: Suporte a submenus expansíveis
- Ícones SVG: Ícones personalizados com cores consistentes
- Navegação Suave: Transições e animações fluidas
ui.ts: Cores, tamanhos e estilos de UIsidebar.ts: Configurações específicas do sidebarpages.ts: Constantes das páginas e seçõesapi.ts: Configurações da API e cachecomponents.ts: Configurações de componentesmessages.ts: Textos e mensagens centralizadas
- TanStack Query: Gerenciamento de estado servidor
- Hooks Customizados:
use-simulations,use-allocations, etc. - Cliente Axios: Configuração centralizada com interceptors
- Validação Zod: Schemas de validação tipados
PageContainer: Container padrão para páginasSection: Seções com título e conteúdoSidebarIcon: Componente para ícones do sidebarMenuItemComponent: Item de menu reutilizável
- Hidratação Otimizada: Renderização condicional baseada no cliente
- Lazy Loading: Carregamento sob demanda de componentes
- Smooth Scrolling: Scroll suave em toda a aplicação
- Custom Scrollbar: Scrollbar personalizada para o sidebar
- Responsive Design: Adaptação automática para todos os dispositivos
- Dashboard Principal - Visão geral das alocações atuais
- Cards Informativos - Métricas e indicadores importantes
- Interface Responsiva - Adaptável para todos os dispositivos
- Tema Dark - Visual moderno e profissional
- Visualização de Ativos - Lista completa de investimentos
- Métricas de Performance - Rendimento e evolução
- Filtros Avançados - Busca e organização de dados
- Cards Interativos - Informações detalhadas de cada alocação
- Gráficos Dinâmicos - Visualizações interativas
- Cenários Futuros - Projeções baseadas em dados
- Tabelas de Dados - Informações estruturadas
- Exportação - Relatórios em diferentes formatos
- Formulários Inteligentes - Validação em tempo real
- Histórico Completo - Todas as operações registradas
- Categorização - Organização por tipo de movimentação
- Relatórios - Análise detalhada de movimentações
- Cadastro de Apólices - Informações completas
- Controle de Vencimentos - Alertas automáticos
- Cálculo de Cobertura - Análise de proteção
- Relatórios de Seguros - Visão consolidada
- Sidebar Inteligente - Navegação adaptável
- Menu Mobile - Hambúrguer para dispositivos pequenos
- Design Moderno - Interface limpa e profissional
- Navegação Intuitiva - Fácil acesso a todas as funcionalidades
- Validação de Formulários - React Hook Form + Zod
- Gerenciamento de Estado - TanStack Query
- Cache Inteligente - Otimização de performance
- TypeScript - Tipagem estática para maior confiabilidade
A URL da API é configurada através da variável de ambiente:
NEXT_PUBLIC_API_URL=http://localhost:3001Para Docker, a URL é automaticamente configurada para http://backend:3001.
Todos os formulários utilizam:
- React Hook Form para gerenciamento de estado
- Zod para validação de schemas
- @hookform/resolvers para integração
Exemplo de uso:
const form = useForm<CreateSimulation>({
resolver: zodResolver(createSimulationSchema),
defaultValues: { ... }
});- Componentes Funcionais: Uso exclusivo de React Hooks
- TypeScript: Tipagem estática em todos os componentes
- Props Interface: Interfaces definidas para todas as props
- Constantes Centralizadas: Configurações em arquivos separados
- TanStack Query: Para estado servidor e cache
- useState/useEffect: Para estado local dos componentes
- Context API: Para estado global quando necessário
- Tailwind CSS: Classes utilitárias para estilização
- ShadCN/UI: Componentes base com Tailwind
- Constantes CSS: Classes centralizadas em arquivos de constantes
- Responsive Design: Mobile-first com breakpoints específicos
- Axios: Cliente HTTP com interceptors
- Hooks Customizados: Abstração da lógica de API
- Zod Schemas: Validação de dados de entrada e saída
- TypeScript Types: Tipagem para todas as entidades
- Lazy Loading: Carregamento sob demanda
- Memoização: React.memo para componentes pesados
- Hidratação Otimizada: Renderização condicional no cliente
- Bundle Splitting: Divisão automática do código
# Executar testes
npm test
# Testes com coverage
npm run test:coverageO projeto está configurado para análise de qualidade de código usando SonarCloud:
- URL: SonarCloud
- Versão: Gratuita
- Organization: Criada no GitHub para hospedar os repositórios
- Integração: Análise automática de qualidade de código
-
Criar Organization no GitHub:
- Acesse GitHub Organizations
- Crie uma nova organization
- Adicione os repositórios do projeto
-
Configurar SonarCloud:
- Acesse SonarCloud
- Conecte com sua conta GitHub
- Selecione a organization criada
- Configure os repositórios para análise
-
Arquivo de Configuração:
# sonar-project.properties sonar.projectKey=financial-planner-frontend sonar.organization=your-organization sonar.sources=src sonar.exclusions=**/node_modules/**,**/dist/**,**/.next/** sonar.javascript.lcov.reportPaths=coverage/lcov.info
- Code Smells: Problemas de manutenibilidade
- Bugs: Erros potenciais no código
- Vulnerabilities: Problemas de segurança
- Coverage: Cobertura de testes
- Duplications: Código duplicado
- Technical Debt: Dívida técnica estimada
# .github/workflows/sonarcloud.yml
name: SonarCloud
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
sonarcloud:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: SonarCloud Scan
uses: SonarSource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}O projeto está configurado com output: 'standalone' no next.config.js para otimizar builds Docker.
# .env.local
NEXT_PUBLIC_API_URL=http://localhost:3001- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.