Spaces:
Runtime error
Runtime error
| # Frontend — Bolão AI | |
| Plataforma web em [`frontend/`](../frontend/) consumindo a API FastAPI. | |
| ## Stack | |
| | Tecnologia | Uso | | |
| |------------|-----| | |
| | React 18 + TypeScript | UI | | |
| | Vite 6 | Build e dev server | | |
| | Tailwind CSS | Tema dark neon, glassmorphism | | |
| | ApexCharts | Donut, barras (probabilidades) | | |
| | Framer Motion | Transições e animações | | |
| | TanStack Query | Cache e fetching | | |
| | React Router 7 | Rotas | | |
| ## Rotas | |
| | Rota | Página | Descrição | | |
| |------|--------|-----------| | |
| | `/` | DashboardPage | Rodada WC, cards de jogos, value bets | | |
| | `/news` | NewsFeedPage | Feed de notícias + sync | | |
| | `/predict` | PredictPage | Palpite avulso (times, fase, KXL) | | |
| | `/validate` | HistoricalValidationPage | Backtest por edição/jogo | | |
| | `/brasileirao` | BrasileiraoPage | Rodada Brasileirão | | |
| | `/match/:home/:away` | MatchDetailPage | Análise completa de um jogo | | |
| ## Arquitetura (Clean) | |
| ``` | |
| src/ | |
| ├── domain/ | |
| │ ├── entities/ # WcPrediction, ModelBreakdown, GoalModelFactors... | |
| │ └── repositories/ # Interfaces IWcRepository, IHistoricalValidationRepository... | |
| ├── application/ | |
| │ ├── use-cases/ # PredictWcMatchUseCase, GetValueBetsUseCase... | |
| │ └── container.ts # Injeção de dependências | |
| ├── infrastructure/ | |
| │ ├── api/client.ts # apiFetch (base /api) | |
| │ ├── mappers/ # snake_case API → camelCase domain | |
| │ └── repositories/ # Implementações HTTP | |
| └── presentation/ | |
| ├── pages/ | |
| ├── components/ | |
| │ ├── charts/ # ProbabilityDonut, ModelBreakdownChart | |
| │ ├── predictions/ # MatchCard, ValueBetCard, PoissonFactorsPanel... | |
| │ ├── historical/ # HistoricalMatchPicker | |
| │ └── layout/ # AppLayout, PageTransition | |
| └── theme/ # Cores, formatPercent | |
| ``` | |
| ## Componentes principais | |
| | Componente | Função | | |
| |----------|--------| | |
| | `MatchCard` | Card de jogo na dashboard | | |
| | `ProbabilityDonut` | Gráfico rosca 1/X/2 | | |
| | `ModelBreakdownChart` | Barras Dixon-Coles vs Logística | | |
| | `PoissonFactorsPanel` | λ, ataque/defesa, ρ | | |
| | `ValueBetCard` | Entradas com EV positivo | | |
| | `PitchHeatmap` | Gramado interativo (KXL) | | |
| | `LethalityGkPanel` | Letalidade × goleiro | | |
| | `MatchContextPanel` | Contexto IA parseado | | |
| | `HistoricalMatchPicker` | Seletor edição + jogo | | |
| ## Fluxo de dados | |
| ```mermaid | |
| sequenceDiagram | |
| participant Page | |
| participant UseCase | |
| participant Repo | |
| participant API | |
| Page->>UseCase: execute(params) | |
| UseCase->>Repo: predictMatch(...) | |
| Repo->>API: POST /worldcup/predict | |
| API-->>Repo: JSON | |
| Repo-->>UseCase: WcPrediction mapped | |
| UseCase-->>Page: domain entity | |
| ``` | |
| ## Desenvolvimento | |
| Ver [instalacao-e-configuracao.md](instalacao-e-configuracao.md). | |
| ```bash | |
| cd frontend | |
| npm install | |
| npm run dev | |
| ``` | |
| Banner **API offline** aparece no header se `/health` falhar. | |
| ## Build produção | |
| ```bash | |
| npm run build # tsc + vite → frontend/dist/ | |
| npm run preview | |
| ``` | |
| ## Mapeamento API → UI | |
| | Campo API | Entidade UI | | |
| |-----------|-------------| | |
| | `model_breakdown.dixon_coles` | `modelBreakdown.dixonColes` | | |
| | `model_breakdown.poisson_factors` | `modelBreakdown.poissonFactors` | | |
| | `poisson_score` | `poissonScore` | | |
| | `kxl_collision` | Painéis gramado / letalidade | | |
| Compatibilidade retroativa: mappers aceitam chave `poisson` como alias de `dixon_coles`. | |
| ## Personalização visual | |
| - Cores neon: `tailwind.config.js` (`neon-green`, `neon-blue`, `neon-purple`) | |
| - Classe utilitária `glass-card` para cartões com blur | |
| - Fonte mono para métricas numéricas (λ, ρ, EV) | |
| Mais detalhes: [`frontend/README.md`](../frontend/README.md). | |