sdelia/football-analytics
⚽ Soccer Analytics AI - Proyecto Final
Plataforma de analisis tactico para futbol con frontend React, backend FastAPI y core analitico en Python
Resumen Ejecutivo
Este repositorio concentra el estado integrado del proyecto:
front-tip/provee la experiencia visual moderna enReact + TypeScript + ViteparaVertical 1yVertical 2.api/exponeFastAPIcomo backend HTTP principal para el frontend nuevo.src/conserva el dominio analitico reutilizable: servicios, adapters, canonical models, metricas, insights y persistencia local.legacy/streamlit/conserva la UI historica de Streamlit solo como referencia temporal y compatibilidad limitada.
La prioridad actual es sostener una demo sólida con visual moderna, buena UX y compatibilidad con la lógica existente.
En este estado del repo, el despliegue objetivo para publicar la UI moderna quedó alineado con Hugging Face Docker Spaces:
README.mdraíz configurado consdk: docker;Dockerfileraíz multi-stage para compilarfront-tipy levantar FastAPI en7860;- FastAPI sirviendo el build React y resolviendo rutas SPA;
- frontend consumiendo
/api/*en misma origin en producción.
Funcionalidades Principales
Vertical 1:- tracking de jugadores con IDs persistentes
- radar 2D y homografía
- formaciones tácticas
- métricas colectivas, posesión y scouting
Vertical 2:- carga de reportes PDF
- ingesta desde
StatsBomb Open Data - ingesta desde
API-Football - modelo canónico de eventos
- métricas propietarias, visualizaciones e insights
- AI Tactical Coach con contexto estructurado
Infraestructura:- backend FastAPI para React
- persistencia local en SQLite + JSON
- Docker Compose para entorno integrado
- suite de tests backend/frontend/regresión
Arquitectura Principal
React frontend (`front-tip/`)
->
FastAPI endpoints (`api/`)
->
Python services / adapters / canonical models (`src/`)
->
Metrics / insights / persistence
Legacy / soporte:
- Streamlit archivado en `legacy/streamlit/`
- UI legacy residual en `src/verticals/*` y `src/utils/ui/*`
- Docs vivas en `docs/`
- Reglas para agentes en `.trae/`Cómo Levantar el Proyecto
Opción 1: Docker Compose
Desde la raíz del repo:
docker compose up --buildServicios expuestos:
- Frontend React:
http://localhost:5173 - Backend FastAPI:
http://localhost:8000
Nota importante:
VITE_API_BASE_URLdebe resolver ahttp://localhost:8000desde el navegador.- El hostname
backendsirve sólo para la red interna de Docker, no para una app Vite ejecutada en el browser del host.
Opcion 2: Desarrollo local sin Docker
Backend:
pip install -r requirements.txt
uvicorn api.main:app --reload --port 8000Frontend:
cd front-tip
npm install
npm run devRequisito de Node para front-tip:
Node >= 20.19.0- recomendado:
Node 22.12+
Legacy Streamlit opcional:
python -m pip install -r requirements-legacy.txt
streamlit run legacy/streamlit/app.pyOpción 3: Hugging Face Spaces
El repo ya quedó adaptado para publicar la UI moderna del proyecto en Hugging Face usando:
- usar
Docker Space; - construir
front-tipen producción; - servir el build React desde FastAPI;
- exponer todo en el puerto
7860.
Validación local realizada sobre esta configuración:
npm cinpm run buildpython -m compileall api srcdocker build -t sport-analytics-hf-recovery -f Dockerfile .docker run --rm -p 7860:7860 sport-analytics-hf-recovery- verificación de
GET /api/health - verificación de
GET /
La guía paso a paso y los requisitos operativos quedaron documentados en docs/HUGGINGFACE_DEPLOY.md.
Testing
Backend / Python
Instalación de dependencias:
python -m pip install -r requirements.txtComandos oficiales:
python -m pytest tests/test_api_computer_vision.py
python -m pytest tests/test_api_event_data.py
python -m pytest tests/test_computer_vision_repository.py
python -m pytest tests/test_event_data_repository.py
python -m pytest tests/test_frontend_regression.py -k vertical1
python -m pytest tests/test_frontend_regression.py -k vertical2
python -m pytestNotas:
- Los tests
test_frontend_regression.pyson regresiones Python sobre la capa legacy/compatibilidad, no Vitest del frontend React. requirements.txtya no instalastreamlit; si se necesita la UI legacy hay que usarrequirements-legacy.txt.- Si falla un import como
ModuleNotFoundError: fastapi, el problema es del entorno Python local y no del código del test; volver a instalarrequirements.txt.
Frontend
Instalación de dependencias:
cd front-tip
npm installVersión mínima:
Node >= 20.19.0- recomendado:
Node 22.12+
Comandos oficiales:
cd front-tip
npm run test
npm run lint
npm run buildNotas:
- Con
Node 18.20.5,npm installpuede resolver paquetes, peroVitestfalla al arrancar por incompatibilidad real del stackVite/Vitest/rolldown. - El
typecheckconnpx tsc -bpuede seguir funcionando incluso cuando Vitest no arranca. - En Docker ya queda alineado porque el repo usa Node 22 en Dockerfile y front-tip/Dockerfile.
Endpoints principales
GET /api/v1/event-data/competitionsGET /api/v1/event-data/matchesPOST /api/v1/event-data/analyzePOST /api/v1/event-data/pdfGET /api/v1/event-data/historyGET /api/v1/event-data/history/{provider}/{match_id}POST /api/v1/computer-vision/analyzePOST /api/v1/computer-vision/jobsGET /api/v1/computer-vision/jobs/{job_id}GET /api/v1/computer-vision/historyGET /api/v1/computer-vision/history/{processing_id}DELETE /api/v1/computer-vision/history/{processing_id}
Estructura del Proyecto
football-analytics-ai-recovery/
├── api/ # FastAPI y contratos HTTP
├── data/ # fixtures y persistencia local de demo
├── docs/ # documentación viva del producto y arquitectura
├── front-tip/ # frontend React + Vite + Tailwind
├── models/ # referencias/modelos pesados versionados selectivamente
├── legacy/ # superficies archivadas y compatibilidad temporal
├── src/ # dominio analitico y servicios compartidos
├── tests/ # pruebas backend, frontend-compat y soporte legacy
├── .trae/ # contexto para agentes, skills y reglas
├── Dockerfile # runtime final para Hugging Face Docker Space
├── Dockerfile.api
├── docker-compose.yml
├── app.py # launcher de compatibilidad hacia legacy/streamlit
├── requirements.txt
├── requirements-legacy.txt
└── README.mdContexto para agentes y desarrollo
Antes de tocar código, leer:
docs/PRODUCT_CONTEXT.mddocs/ARCHITECTURE.mddocs/EVENT_DATA_VERTICAL.mddocs/LOCAL_PERSISTENCE.mddocs/AGENT_WORKFLOW.md.trae/project_rules.md
Eso asegura que cualquier agente o dev tenga contexto suficiente sobre:
- visión de producto
- límites de la demo
- arquitectura principal React + FastAPI + src
- pipeline canónico de Vertical 2
- reglas de integración entre frontend nuevo y backend existente
Persistencia y fixtures locales
Se restauraron fixtures minimos de persistencia local en el workspace para preservar contexto operativo y pruebas manuales:
data/tip_event_data.sqlitedata/event_data/raw/statsbomb_open_data/3895302.jsondata/event_data/canonical/statsbomb_open_data/3895302.jsondata/event_data/metrics/statsbomb_open_data/3895302.json
Esos archivos quedan como contexto local y data/ sigue ignorado por Git para no subir persistencia ni payloads al repositorio.
Verificación recomendada
python -m pytest
cd front-tip
npx tsc -b
npm run test -- --run
npm run buildPara una validación guiada del estado integrado, ver docs/INTEGRATION_VALIDATION.md.
Para validar específicamente el runtime final de Hugging Face:
docker build -t sport-analytics-hf-recovery -f Dockerfile .
docker run --rm -p 7860:7860 sport-analytics-hf-recoveryCréditos
- Desarrollo: Matías
- Modelo Soccana: Adit-jain/Soccana_Keypoint
- Detección de jugadores: Ultralytics YOLO
- Visualización: Plotly, React, Tailwind
Licencia
Proyecto de código abierto con fines educativos y de demo.
