Plataforma de predicciones deportivas en tiempo real. Crea grupos, invita amigos, pronostica resultados y compite en rankings dinámicos.
- Multi-Liga — Champions League, Premier League, La Liga, Serie A, Bundesliga, Ligue 1, Copa Libertadores, Liga BetPlay, Brasileirão, Copa América, Eliminatorias y Mundial.
- Grupos Privados — Crea salas con código de invitación para competir con amigos (máx. 20 miembros).
- Pronósticos — Registra tu predicción antes de cada partido. Se bloquean 10 minutos antes del inicio.
- Ranking Dinámico — Tabla de posiciones en tiempo real con cambios de posición entre jornadas.
- Datos en Vivo — Sincronización automática con ESPN para marcadores, cronología, alineaciones y estadísticas.
- Arquitectura Serverless — Backend en Google Cloud Run y base de datos en Firebase Firestore.
- PWA — Instalable en el celular como app nativa con soporte offline.
- Diseño Moderno — Fondos "Mesh Gradient", Dark Mode inteligente y micro-animaciones fluidas.
┌────────────────────┐ ┌──────────────────┐ ┌─────────────┐
│ Frontend PWA │◄───►│ FastAPI Backend │◄───►│ ESPN API │
│ Firebase Hosting │ │ Google Cloud Run│ │ Live Data │
│ Vanilla JS + TW │ │ Firestore DB │ └─────────────┘
└────────────────────┘ └──────────────────┘
| Componente | Tecnología |
|---|---|
| Backend | FastAPI + Uvicorn (Cloud Run) |
| Base de Datos | Firebase Firestore |
| Frontend | Vanilla JS + Tailwind CSS CDN (Firebase Hosting) |
| Datos Deportivos | ESPN API (scoreboard + detalle) |
| Seguridad | bcrypt + JWT tokens + rate limiting |
| PWA | Service Worker + Manifest |
PollaFutbolera/
├── main.py # 🐍 Backend FastAPI (API + Firestore DB)
├── index.html # 🌐 Frontend SPA
├── js/
│ ├── ui.js # Navegación, temas, interceptor de auth
│ ├── auth.js # Login, registro, gestión de tokens
│ ├── grupos.js # Grupos, partidos, pronósticos, detalles
│ ├── ranking.js # Tabla de posiciones del grupo
│ ├── stats.js # Estadísticas personales y logros
│ └── icon-512.png # Ícono de la PWA
├── sw.js # Service Worker (cache + offline)
├── manifest.json # Manifiesto PWA
├── requirements.txt # Dependencias Python
├── Dockerfile # Imagen Docker para Cloud Run
├── firebase.json # Configuración de Firebase Hosting
├── .env # Variables de entorno (NO subir a Git)
├── .gitignore # Exclusiones de Git
├── CONTRIBUTING.md # Guía para contribuidores
└── LICENSE # Licencia MIT
Para despliegue en Cloud Run, debes configurar las siguientes variables de entorno:
| Variable | Descripción | Requerida |
|---|---|---|
POLLA_SECRET |
Clave secreta HMAC para firmar tokens de sesión | Sí |
CORS_ORIGINS |
Orígenes permitidos (separados por coma, ej: https://tu-app.web.app) |
No |
💡 Si
POLLA_SECRETno está definida, se generará una automáticamente y se almacenará en Firestore (system/config) para que las sesiones persistan sin configuración adicional.
| Resultado | Puntos |
|---|---|
| Marcador exacto | 5 puntos |
| Resultado correcto (sin goles exactos) | 3 puntos |
| Sin coincidencia | 0 puntos |
Este proyecto está optimizado para funcionar 100% en la capa gratuita de Google Cloud Run y Firebase.
Instala las Firebase CLI y ejecuta:
firebase login
firebase deploy --only hostingAsegúrate de tener instalado el Google Cloud SDK y ejecuta:
gcloud auth login
gcloud config set project TU_ID_DE_PROYECTO
# Desplegar el contenedor de FastAPI
gcloud run deploy polla-backend \
--source . \
--region us-central1 \
--allow-unauthenticated \
--max-instances 1 \
--memory 512MiNota: Limitar a
--max-instances 1garantiza que te mantengas siempre dentro del Free Tier de Google Cloud.
Este proyecto está bajo la Licencia MIT.
¿Quieres contribuir? Lee nuestra guía de contribución.