Web para seguir el mundial de futbol 2026 y darle un poco de emoción entre los amigos.
  • Vue 49.8%
  • JavaScript 31.3%
  • CSS 18.1%
  • Shell 0.5%
  • HTML 0.2%
  • Other 0.1%
Find a file
2026-06-27 21:23:00 +02:00
.agents/skills chore: add agent skills for Vue, Vite, Vitest and PocketBase best practices 2026-05-19 20:02:25 +00:00
.vscode Primera versión con un esqueleto de aplicación 2026-05-12 00:14:11 +02:00
implement feat: marcar equipos eliminados en tabla de apuestas con grayscale y 2026-06-27 20:37:52 +02:00
pb_hooks chore: limpiar trazas debug del hook OIDC 2026-06-23 18:52:47 +00:00
pb_migrations fix: permitir score negativo en apuestas (eliminar min:0 en bets.score) 2026-06-11 21:51:10 +00:00
public Primera versión con un esqueleto de aplicación 2026-05-12 00:14:11 +02:00
specs feat: add OIDC authentication with Authelia SSO integration 2026-06-21 20:21:17 +02:00
src fix: eliminar pseudo-elemento sobre equipos eliminados, solo grayscale + opacidad 2026-06-27 21:23:00 +02:00
.dockerignore Corregir .dockerignore: incluir nginx.conf en build context 2026-05-28 16:41:37 +02:00
.env Primera versión con un esqueleto de aplicación 2026-05-12 00:14:11 +02:00
.gitignore chore: añadir custom-docker-compose.yml al gitignore 2026-05-30 18:57:33 +02:00
AGENTS.md fix: permitir score negativo en apuestas (eliminar min:0 en bets.score) 2026-06-11 21:51:10 +00:00
docker-compose.yml feat: add OIDC authentication with Authelia SSO integration 2026-06-21 20:21:17 +02:00
Dockerfile Corregir Dockerfile: quitar --no-optional para incluir bindings nativos de rolldown 2026-05-28 16:57:44 +02:00
index.html feat: mejoras de accesibilidad y mejores prácticas web moderno 2026-06-02 20:57:27 +02:00
LICENSE Primera versión con un esqueleto de aplicación 2026-05-12 00:14:11 +02:00
nginx.conf fix: cache HTML a no-cache para evitar cargar assets obsoletos tras deploy 2026-06-27 21:08:17 +02:00
package-lock.json fix: upgrade vue-i18n from v10 to v11 (fix Vue 3.5 compatibility) 2026-06-02 22:47:13 +02:00
package.json fix: upgrade vue-i18n from v10 to v11 (fix Vue 3.5 compatibility) 2026-06-02 22:47:13 +02:00
README.md Actualizar versión de PocketBase a v0.38.0 en README.md 2026-05-13 20:50:14 +00:00
README_Docker.md Limpiar debug code; documentar flag --dir /pb_data para superuser upsert 2026-05-28 23:03:32 +02:00
setup.cjs fix: usar e.oAuth2User (con mayusculas) y limpiar mappedFields explicitamente 2026-06-23 18:34:49 +00:00
start.sh Ajustados permisos script de arranque 2026-05-15 20:22:33 +02:00
vite.config.js Añadir configuración Docker para producción (nginx + PocketBase) 2026-05-27 14:51:36 +02:00

Porra Mundial 2026

Aplicación web de gestión de usuarios con autenticación, roles y sistema de solicitudes de acceso. Construida con Vue 3 y PocketBase.

Características

  • Autenticación: Login con username o email + contraseña
  • Roles: Administrador y Usuario
  • Primer login: Obliga a cambiar la contraseña en el primer acceso
  • Panel de administración: Gestión de usuarios (crear, editar, eliminar, activar/desactivar, resetear contraseña)
  • Solicitudes de acceso: Los visitantes pueden solicitar acceso mediante un formulario
  • Protección de rutas: Guardias de navegación basados en autenticación y roles

Tecnologías

Frontend

  • Vue 3 - Framework progresivo con Composition API y <script setup>
  • Vite - Build tool y dev server rápido
  • Vue Router - Enrutamiento con guardias de navegación
  • PocketBase JS SDK - Cliente para la API de PocketBase

Backend

  • PocketBase - Backend open-source en Go con base de datos SQLite embebida

Estructura del proyecto

./
├── src/
│   ├── components/       # Componentes reutilizables
│   ├── composables/      # Composables de Vue (useAuth)
│   ├── router/           # Configuración de rutas
│   ├── services/         # Servicios (PocketBase client)
│   └── views/            # Vistas de la aplicación
│       ├── Login.vue
│       ├── ChangePassword.vue
│       ├── AdminPanel.vue
│       └── UnderConstruction.vue
├── pb_data/              # Datos de PocketBase (generado)
├── setup.cjs             # Script de inicialización
├── start.sh              # Script de arranque
├── .env                  # Variables de entorno
├── vite.config.js        # Configuración de Vite
└── package.json

Colecciones de PocketBase

users

Campo Tipo Descripción
username text Nombre de usuario (único, 3-32 caracteres)
email email Correo electrónico
role select admin o user
firstLogin bool Indica si debe cambiar la contraseña
active bool Estado de la cuenta
name text Nombre completo

access_requests

Campo Tipo Descripción
email email Correo del solicitante
reason text Motivo de la solicitud
status select pending, approved, rejected
approvedBy relation Usuario que aprobó/rechazó

Requisitos

  • Node.js >= 18
  • PocketBase binario descargado en el proyecto

Instalación

  1. Instalar dependencias:

    npm install
    
  2. Descargar PocketBase (si no está presente):

    # Linux
     wget https://github.com/pocketbase/pocketbase/releases/download/v0.38.0/pocketbase_0.38.0_linux_amd64.zip
     unzip pocketbase_0.38.0_linux_amd64.zip
    
     # macOS
     wget https://github.com/pocketbase/pocketbase/releases/download/v0.38.0/pocketbase_0.38.0_darwin_amd64.zip
     unzip pocketbase_0.38.0_darwin_amd64.zip
    

Desarrollo

Arranque completo (recomendado)

Inicia PocketBase + Vue dev server + inicialización automática:

./start.sh          # Conserva datos existentes (modo persistente)
./start.sh --reset  # Borra la BBDD y reinicia desde cero (útil en desarrollo)

Servicios por separado

PocketBase:

pocketbase serve --dir=pb_data --dev

Inicializar datos:

node setup.cjs

Frontend Vue:

npm run dev

Scripts disponibles

Comando Descripción
npm run dev Inicia el dev server de Vite
npm run build Genera build de producción
npm run preview Previsualiza el build de producción

Variables de entorno

Variable Valor por defecto Descripción
VITE_PB_URL http://127.0.0.1:8090 URL de la API de PocketBase

Credenciales por defecto

Acceso a la aplicación (login en /)

Rol Usuario Contraseña
Admin admin admin12345

Acceso a PocketBase Admin UI (:8090/_/)

Rol Email Contraseña
Superuser admin@admin.com admin123

⚠️ Cambia estas credenciales en producción.

Flujo de autenticación

  1. Usuario accede a / → ve el formulario de login
  2. Introduce credenciales → se valida contra PocketBase
  3. Si es primer login (firstLogin: true) → redirige a cambio de contraseña
  4. Si es admin → redirige a /admin
  5. Si es usuario normal → redirige a /inicio

Solicitar acceso

Los visitantes sin cuenta pueden:

  1. Hacer clic en "Solicitar acceso" en el login
  2. Rellenar email y motivo
  3. La solicitud queda registrada para que el admin la revise