MVP de uma plataforma de estatísticas históricas de jogadores do Brasileirão Série A. Exibe médias históricas (chutes, faltas, cartões, gols/assistências) por jogador, com filtro de time e mando de campo.
- Next.js (App Router) + TypeScript + Tailwind CSS
- Supabase (Postgres + Auth), rodando localmente via Docker durante o desenvolvimento
- API pública (não-oficial) do Cartola FC (
api.cartola.globo.com) como fonte de dados — sem chave, sem custo. Ingestão em batch (job diário)
npm install- Copie
.env.local.examplepara.env.local. - Suba o Supabase local (requer Docker rodando):
npx supabase start. Copie aanon key,service_role keye a URL da API impressas no terminal para o.env.local. - Aplique as migrations:
npx supabase db reset(ounpx supabase migration up). - (Opcional) Gere os tipos do banco:
npm run db:types. - Popule o banco com dados mockados do Cartola FC (não precisa de acesso à internet):
npm run seed:mocks. npm run deve acessehttp://localhost:3000.
Fonte: a API pública não-oficial do Cartola FC, que a Globo expõe para o fantasy game do Brasileirão. Sem autenticação, sem cota diária/mensal conhecida — usada por dezenas de projetos open-source há anos, mas sem SLA nem documentação oficial (pode mudar de formato sem aviso).
Endpoints usados (src/features/ingestion/cartola/client.ts):
GET /atletas/mercado— lista mestre de jogadores (nome, time, posição)GET /partidas/{rodada}— partidas de uma rodada (mandante/visitante, placar)GET /atletas/pontuados/{rodada}— estatísticas por jogador daquela rodada (camposcout)
A Cartola não expõe um campo de "chutes" nem "cruzamentos" diretamente — chutes é aproximado somando as finalizações por desfecho (FT+FD+FF+G), e cruzamentos fica indisponível (mesma limitação seria mesma com qualquer fonte gratuita). Ver mapScout em src/features/ingestion/cartola/types.ts para o dicionário completo de scouts.
Por padrão (USE_API_MOCKS=true), o cliente lê fixtures JSON locais (src/features/ingestion/cartola/mocks/) em vez de chamar a API real — isso permite montar e testar o dashboard inteiro sem depender de internet. Para usar dados reais, defina USE_API_MOCKS=false.
O orquestrador (src/features/ingestion/orchestrator.ts) sincroniza times/jogadores uma vez por execução e depois percorre as rodadas do Brasileirão (1 a 38) em ordem, parando na primeira rodada ainda não finalizada. Sem limite de requisições conhecido, o histórico da temporada inteira pode ser reconstruído em uma única execução; a rota /api/cron/ingest (protegida por CRON_SECRET) roda isso diariamente via Vercel Cron — ver vercel.json.
npm test roda os testes de unidade do módulo de ingestão (scouts do Cartola, tracking de rodadas, upserts).