amarorn / docs /frontend.md
beAnalytic's picture
feat: sync main with feature/superbet-live-inplay
16c19b8 verified
|
Raw
History Blame Contribute Delete
3.77 kB
# 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).