Polla Mundial 2026 es una aplicación web multiusuario tipo polla / quiniela para predecir la Copa Mundial de la FIFA 2026 (USA · Canadá · México). Los participantes pronostican marcadores de los 104 partidos, arman su bracket de eliminatorias y compiten por el primer puesto del ranking.
Pensada para jugar entre amigos, con un sistema de puntuación transparente y un diseño futbolero centrado en la experiencia del torneo.
- ⚽ Predicciones de marcadores en los 104 partidos (12 grupos de 4 + eliminatorias).
- 🏆 Bracket de eliminatorias generado a partir de tus predicciones (32avos → final).
- 🎖️ Premios individuales: goleador, asistidor, mejor jugador, mejor portero, campeón y subcampeón.
- 📊 Ranking en vivo con sistema de puntuación transparente visible al usuario.
- 🗓️ Calendario oficial con sedes, horarios y zonas horarias.
- 🔐 Autenticación con usuario y contraseña (NextAuth).
- ⚙️ Panel de administración para resultados y premios del torneo.
- 🌎 SEO optimizado (OpenGraph, sitemap, robots, JSON-LD SportsEvent).
- 🎨 Diseño dark-first inspirado en la identidad visual del Mundial 2026.
| Capa | Tecnología |
|---|---|
| Framework | Next.js 16 (App Router) |
| Lenguaje | TypeScript 5 |
| UI | React 19 · Tailwind CSS 4 · shadcn/ui |
| Base de datos | PostgreSQL 17 |
| ORM | Prisma 7 |
| Autenticación | NextAuth v5 + Prisma Adapter |
| Validación | Zod 4 |
| Iconos | lucide-react · flag-icons |
- Node.js 20+
- PostgreSQL 17 en ejecución local o remota
- npm (o
pnpm/yarn/bun)
# 1. Clonar el repositorio
git clone https://github.com/DavidSepulvedaCh/FWC_2026.git
cd FWC_2026
# 2. Instalar dependencias (dispara prisma generate en postinstall)
npm install
# 3. Copiar variables de entorno y ajustarlas
cp .env.example .env
# 4. Aplicar migraciones
npm run db:migrate
# 5. Poblar con datos oficiales FIFA (equipos, grupos, calendario)
npm run db:seed
# 6. Levantar el dev server
npm run devAbre http://localhost:3000 para ver la aplicación.
| Variable | Descripción |
|---|---|
DATABASE_URL |
Cadena de conexión PostgreSQL (Prisma). |
NEXT_PUBLIC_SITE_URL |
URL pública canónica del sitio, sin slash final. Se usa para metadata SEO, sitemap.xml, robots.txt y OpenGraph. |
Ver .env.example como plantilla.
| Script | Descripción |
|---|---|
npm run dev |
Inicia el servidor de desarrollo con hot reload. |
npm run build |
Compila la aplicación para producción. |
npm start |
Sirve la build de producción. |
npm run lint |
Ejecuta ESLint sobre el proyecto. |
npm run db:migrate |
Aplica migraciones de Prisma en desarrollo. |
npm run db:push |
Sincroniza el schema con la BD sin migraciones. |
npm run db:studio |
Abre Prisma Studio para inspeccionar la BD. |
npm run db:seed |
Carga datos oficiales FIFA (equipos, grupos, partidos). |
src/
├── app/ # Rutas (App Router)
│ ├── admin/ # Panel de administración
│ ├── api/ # Route handlers (NextAuth, etc.)
│ ├── fixtures/ # Calendario de partidos
│ ├── predictions/ # Predicciones y bracket del usuario
│ ├── ranking/ # Tabla de posiciones
│ ├── login/ · register/ # Autenticación
│ ├── settings/ # Preferencias del usuario
│ ├── opengraph-image.tsx # OG image dinámica
│ ├── icon.png · apple-icon.png
│ ├── robots.ts · sitemap.ts
│ └── layout.tsx · page.tsx
├── components/ # Componentes UI reutilizables
├── lib/ # Utilidades (prisma, session, datetime, ...)
└── types/ # Tipos compartidos
prisma/
├── schema.prisma # Modelo de datos
├── migrations/ # Migraciones versionadas
├── seed.ts # Script de seed
└── fifa-data.ts # Datos oficiales FIFA 2026
La aplicación está optimizada para Vercel, pero corre en cualquier plataforma que soporte Node.js.
- Provisiona una base de datos PostgreSQL (Neon, Supabase, Railway, etc.).
- Configura
DATABASE_URLyNEXT_PUBLIC_SITE_URLen el entorno de producción. - Ejecuta
prisma migrate deploycomo paso previo al build. npm run build && npm start.
Este es un proyecto personal, pero las sugerencias y reportes de bugs son bienvenidos vía Issues o Pull Request.
Distribuido bajo licencia MIT. Consulta LICENSE para más información.
"FIFA", "Copa Mundial de la FIFA" y las marcas asociadas son propiedad de la FIFA. Este proyecto no está afiliado ni respaldado oficialmente por la FIFA.