Dashboard de analytics para o Campeonato Português de Rugby.
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Database: SQLite (via Prisma)
- Charts: Recharts
- Validation: Zod
npm installnpx prisma generate
npx prisma db pushColoca o ficheiro Excel em data/report.xlsx e executa:
npm run ingestO script espera duas sheets:
- Info Clubes: Estatísticas por equipa por jornada
- Info Jogo: Estatísticas por jogo
npm run devAbre http://localhost:3000.
rugby-dashboard/
├── data/
│ └── report.xlsx # Ficheiro Excel com dados
├── prisma/
│ ├── schema.prisma # Schema da BD
│ └── rugby.db # Base de dados SQLite
├── scripts/
│ └── ingest.ts # Script de importação
├── src/
│ ├── app/
│ │ ├── dashboard/ # Dashboard principal
│ │ ├── teams/ # Lista e detalhe de equipas
│ │ └── matches/ # Lista e detalhe de jogos
│ ├── components/
│ │ ├── ui/ # Componentes base (Card, Badge, etc.)
│ │ ├── charts/ # Gráficos (Recharts)
│ │ └── insights/ # Insights determinísticos
│ └── lib/
│ ├── db.ts # Cliente Prisma
│ └── utils.ts # Utilitários
└── package.json
- Visão geral da liga
- Classificação
- Gráficos de tendência por jornada
- Filtro por jornada
- Lista de todas as equipas com stats resumidas
- Clica numa equipa para ver detalhes
- Estatísticas agregadas
- Radar dos "4 Pilares" (Ataque, Defesa, Disciplina, Set-Piece)
- Gráficos de evolução
- Análise de penalidades por tipo
- Histórico de jogos
- Lista de todos os jogos por jornada
- Filtro por jornada
- Resultado e score
- Comparação lado-a-lado
- Insights automáticos (determinísticos)
- Análise de penalidades
- Estatísticas de set-piece
npm run dev # Desenvolvimento
npm run build # Build de produção
npm run start # Servidor de produção
npm run ingest # Importar dados do Excel
npm run db:studio # Prisma Studio (GUI da BD)
npm run db:push # Sincronizar schemaEquipas do campeonato.
Informação de cada jogo (Info Jogo).
Estatísticas por equipa num jogo.
Estatísticas detalhadas por equipa por jornada (Info Clubes).
O sistema gera insights determinísticos baseados em:
- Diferencial de pontos (vitória expressiva vs jogo equilibrado)
- Domínio de rucks
- Diferencial de penalidades
- Tipo de penalidades mais frequente
- Domínio de scrums e alinhamentos
- Ensaios de set-piece
- Tempo útil de jogo
- Eficácia ofensiva
- O "Tempo Útil" é convertido de formato Excel para segundos
- Percentagens são guardadas como float 0-1
- Linhas "TOTAIS" e "MÉDIA" são ignoradas na importação
- Jornadas futuras (sem dados) são saltadas