15fc6dac3b
Cargos configurables por ronda (por defecto Camarero/a, Encargado, Cocina), calendario con días recuadrados, recuento de compañeros del mismo cargo por día y minileyenda por mes. Panel de administración con login, rondas y exportación a Excel. Node + Express + SQLite, listo para Docker/Coolify. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.3 KiB
2.3 KiB
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
- Reciben una URL del tipo
https://tudominio.com/r/AbC123xyz. - Escriben su nombre y eligen su cargo (los que el administrador haya definido al crear la ronda; por defecto Camarero/a, Encargado o Cocina).
- Marcan en el calendario los días que quieren pedir y guardan.
- 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.
- 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
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
- Sube este repositorio a Git (GitHub, GitLab…).
- En Coolify: New Resource → Application, conecta el repositorio y elige Build Pack: Dockerfile.
- Puerto expuesto:
3000. - En Environment Variables añade
ADMIN_PASSWORDcon una contraseña fuerte. - 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). - 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.