# Vacaciones 🌴 Aplicación web sencilla y pensada para el móvil con la que el equipo de un restaurante pide sus días de vacaciones. ## Cómo funciona **Trabajadores** 1. Reciben una URL del tipo `https://tudominio.com/r/AbC123xyz`. 2. Escriben su nombre y eligen su cargo (los que el administrador haya definido al crear la ronda; por defecto Camarero/a, Encargado o Cocina). 3. Marcan en el calendario los días que quieren pedir y guardan. 4. En cada día ven cuántas personas **de su mismo cargo** ya lo han pedido (nunca quiénes). Cada mes muestra una pequeña leyenda cuando tiene días ya pedidos por compañeros. 5. Una cookie les identifica: si vuelven a entrar con el mismo navegador, ven y pueden editar su petición mientras la ronda siga abierta. **Administrador** (`/admin`, protegido por contraseña) - Crea rondas de peticiones por local y año; en cada ronda define los cargos disponibles (separados por comas) y se genera una URL nueva para compartir. - Cierra una ronda (nadie puede pedir ni modificar) y puede reabrirla. - Descarga un Excel con dos hojas: peticiones por persona y recuento por día y cargo. ## Ejecutar en local ```bash npm install npm start # http://localhost:3000 ``` Variables de entorno: | Variable | Por defecto | Descripción | |---|---|---| | `ADMIN_PASSWORD` | `admin` | Contraseña del panel `/admin`. **Cámbiala en producción.** | | `PORT` | `3000` | Puerto HTTP | | `DATA_DIR` | `./data` | Carpeta donde se guarda la base de datos SQLite | ## Desplegar en Coolify 1. Sube este repositorio a Git (GitHub, GitLab…). 2. En Coolify: **New Resource → Application**, conecta el repositorio y elige **Build Pack: Dockerfile**. 3. Puerto expuesto: `3000`. 4. En **Environment Variables** añade `ADMIN_PASSWORD` con una contraseña fuerte. 5. En **Storages** añade un volumen persistente montado en `/app/data` (ahí vive la base de datos SQLite; sin esto perderías los datos en cada deploy). 6. Asigna tu dominio y despliega. Después entra en `https://tudominio.com/admin`, crea la primera ronda y comparte la URL con el equipo. ## Notas técnicas - Node.js + Express + SQLite (`better-sqlite3`): un solo contenedor, sin servicios externos. - Las sesiones de administrador se guardan en memoria: si se reinicia el contenedor solo hay que volver a iniciar sesión. - Excel generado con `exceljs`.