Los datos que todo socio de Independiente tiene que saber.
Portal de datos abiertos del Club Atletico Independiente (Argentina). Transparencia economica, contractual y deportiva.
Números Rojos está diseñado para ser replicable. Si representás a una institución deportiva y querés tener tu propio portal de transparencia, podés clonar este repositorio y adaptarlo.
¿Qué necesitás cambiar?
| Qué | Dónde |
|---|---|
| Nombre e identidad del club | frontend/src/pages/HomePage.jsx, frontend/src/components/layout/Footer.jsx |
| Datos iniciales | backend/database/seeders/ |
| Variables de entorno | .env y backend/.env |
| Integración de estadísticas | backend/app/Services/BeSoccerService.php (opcional) |
Si tenés dudas durante la adaptación, abrí un Issue con la etiqueta adaptacion-club.
| Capa | Tecnologia |
|---|---|
| Backend | Lumen (PHP 8.2) |
| Base datos | MySQL 8.0 |
| Cache | Redis 7 |
| Frontend | React 18 + Vite 5 |
| Estilos | TailwindCSS 3.4 |
| Auth admin | JWT (tymon/jwt-auth) |
| Infra | Docker + docker compose |
numeros-rojos/
├── backend/ # API Lumen
│ ├── app/
│ │ ├── Console/Commands/ # Comandos (export CSV)
│ │ ├── Http/
│ │ │ ├── Controllers/Api/V1/
│ │ │ └── Middleware/
│ │ ├── Models/ # EconomyRecord, Contract, User
│ │ ├── Providers/
│ │ └── Services/ # BeSoccerService
│ ├── config/
│ ├── database/
│ │ ├── migrations/
│ │ └── seeders/
│ └── routes/
├── frontend/ # React + Vite
│ └── src/
│ ├── api/ # Axios client + endpoints
│ ├── components/ # UI components
│ ├── context/ # AuthContext
│ ├── hooks/ # useFilters
│ └── pages/ # Vistas
├── docker/
│ ├── nginx/
│ ├── mysql/
│ ├── php/
│ └── frontend/
├── docker compose.yml
├── Makefile
└── .env.example
git clone https://github.com/glesende/numeros-rojos numeros-rojos
cd numeros-rojos
make setupEditar .env y backend/.env si es necesario.
make build
make upmake migrate
make seed| Servicio | URL |
|---|---|
| Frontend | http://localhost:5173 |
| API | http://localhost:8080/api/v1 |
| API root | http://localhost:8080 |
Email: admin@numerosrojos.ar
Password: password
make help # Ver todos los comandos
make up # Levantar contenedores
make down # Detener contenedores
make build # Rebuild contenedores
make logs # Ver logs
make migrate # Correr migraciones
make seed # Correr seeders
make fresh # Migrate fresh + seed
make test # Correr tests PHPUnit
make db # Abrir MySQL CLI
make redis-cli # Abrir Redis CLI
make shell-api # Shell en el contenedor API
make shell-frontend # Shell en el contenedor frontend
make export-csv TABLE=economy_records # Exportar a CSV
make clean # Eliminar volumenes| Metodo | Ruta | Descripcion |
|---|---|---|
| GET | /api/v1/economy | Listar registros economicos |
| GET | /api/v1/economy/{id} | Detalle de registro |
| GET | /api/v1/contracts | Listar contratos |
| GET | /api/v1/contracts/{id} | Detalle de contrato |
| GET | /api/v1/standings | Posiciones (BeSoccer) |
| GET | /api/v1/player/{id}/stats | Stats de jugador (BeSoccer) |
| GET | /api/v1/league/stats | Stats de liga (BeSoccer) |
type- cobro | pagoofficial- 1 | 0date_from- YYYY-MM-DDdate_to- YYYY-MM-DDsort_dir- asc | descpage- numero de paginaper_page- registros por pagina (max 100)
| Metodo | Ruta | Descripcion |
|---|---|---|
| POST | /api/v1/auth/login | Login (devuelve JWT) |
| GET | /api/v1/admin/me | Usuario actual |
| POST | /api/v1/admin/auth/refresh | Refrescar token |
| POST | /api/v1/admin/auth/logout | Cerrar sesion |
| POST | /api/v1/admin/economy | Crear registro economico |
| PUT | /api/v1/admin/economy/{id} | Actualizar registro |
| DELETE | /api/v1/admin/economy/{id} | Eliminar registro |
| POST | /api/v1/admin/contracts | Crear contrato |
| PUT | /api/v1/admin/contracts/{id} | Actualizar contrato |
| DELETE | /api/v1/admin/contracts/{id} | Eliminar contrato |
Para activar las estadisticas en tiempo real:
- Obtener API key de BeSoccer
- Configurar en
.env:BESOCCER_API_KEY=tu_api_key - Los TTL de cache son configurables via:
CACHE_TTL_STANDINGS=3600 CACHE_TTL_PLAYER_STATS=1800 CACHE_TTL_LEAGUE_STATS=3600
| Campo | Tipo |
|---|---|
| id | bigint (PK) |
| description | text |
| type | enum: cobro, pago |
| amount | decimal(15,2) |
| currency | enum: ARS, USD, EUR |
| record_date | date |
| official | boolean |
| carried_out | boolean |
| links | json (nullable) |
| created_at | timestamp |
| updated_at | timestamp |
| Campo | Tipo |
|---|---|
| id | bigint (PK) |
| external_id | varchar(255) nullable |
| full_name | varchar(255) |
| expiration_date | date |
| club_pass_percentage | decimal(5,2) |
| estimated_salary | decimal(15,2) nullable |
| currency | enum: ARS, USD, EUR (nullable) |
| official | boolean |
| clauses | json (nullable) |
| links | json (nullable) |
| created_at | timestamp |
| updated_at | timestamp |
- Historial de cambios: Estructura preparada para agregar tabla de auditorias (model events)
- Exportacion CSV: Comando
php artisan export:csv {table}implementado - Automatizacion de estadisticas: BeSoccerService con cache Redis, listo para scheduled tasks
- Nuevas secciones: Arquitectura modular para agregar nuevos modelos y controladores
make shell-api
composer install
php artisan migrate
php artisan db:seedmake shell-frontend
npm install
npm run devLas contribuciones son bienvenidas. Leé CONTRIBUTING.md para saber cómo empezar.
Para reportar errores o sugerir mejoras, usá los Issues de GitHub.
MIT License. Ver LICENSE para más detalles.