尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Aplicación web (Node.js + Express) para reservar bloques horarios del laboratorio de finanzas y visualizar la ocupación a lo largo de todo el año. Diseño oscuro tipo terminal financiera.
minAdvanceDays;
0 = sin restricción, que es el valor actual). Las reglas se muestran en la barra superior y en el formulario de reserva./admin (o el ícono
⚿) con pestañas Pendientes / Aprobadas / Todas y acciones aprobar · rechazar · eliminar.
Un bloque pendiente aparece rayado en el calendario hasta que se resuelve.maxHoursPerReservation.maxRecurringWeeks, 20 por defecto) y crea el mismo día y horario cada semana de una vez.
Si alguna semana choca no se crea ninguna y se listan las fechas en conflicto. Toda la serie
comparte un código (se puede cancelar una semana o todas) y el administrador la aprueba o
rechaza con un solo clic.minAdvanceDays, el administrador puede reservar sin esa anticipación.npm install
npm run schedule # carga el horario académico del semestre (ver más abajo)
npm start
Luego abre http://localhost:3000. El panel de administración está en http://localhost:3000/admin.
npm start lee el archivo .env (ignorado por git). Define ahí la clave:
ADMIN_PASSWORD="tu-clave-secreta"
Si no hay .env ni variable ADMIN_PASSWORD, se usa bloomberg-admin
(solo para pruebas locales). Para cambiar la clave, edita .env y reinicia.
Para desarrollo con recarga automática:
npm run dev
schedule.js borra todas las reservas y carga el horario recurrente
del semestre (lun 10-ago-2026 → vie 11-dic-2026). Edita la constante WEEKLY para
cambiar bloques, responsables o correos, y vuelve a ejecutar:
npm run schedule
Edita LAB_CONFIG en server.js para ajustar horario, días de apertura,
número de terminales, duración máxima por reserva y el listado de cursos.
Dos backends, elegidos automáticamente:
data/reservations.json, escritura atómica) — por defecto en
local, Render, Railway, etc. La ruta se cambia con DATA_DIR.UPSTASH_REDIS_REST_URL y
UPSTASH_REDIS_REST_TOKEN. Necesario en hostings serverless como Vercel.En ambos casos, si la base arranca vacía se carga solo el horario del semestre.
GitHub guarda el código pero no ejecuta el servidor. Hay que conectar el repo a un hosting que corra Node.
Ambos tienen plan gratuito permanente y no piden tarjeta.
git push -u origin main (el remoto origin ya está configurado).UPSTASH_REDIS_REST_URL y UPSTASH_REDIS_REST_TOKEN.
(O desde Vercel: Storage → Marketplace → Upstash, y las variables se inyectan solas.)vercel.json (funciones + api/index.js).ADMIN_PASSWORD = tu claveUPSTASH_REDIS_REST_URL y UPSTASH_REDIS_REST_TOKEN (del paso 2)render.yaml)Usa el backend de archivo + disco persistente. En Render: New → Blueprint,
define ADMIN_PASSWORD. El disco persistente requiere plan starter (~US$7/mes);
en plan free los datos se reinician en cada despliegue y el servicio se suspende
tras 15 min de inactividad.
| Método | Ruta | Descripción |
|---|---|---|
GET | /api/config | Configuración del laboratorio |
GET | /api/reservations?from=YYYY-MM-DD&to=YYYY-MM-DD | Reservas en el rango |
GET | /api/stats?from=&to= | Métricas de ocupación del rango |
POST | /api/reservations | Crear reserva (queda pending) |
GET | /api/reservations/:id?code= | Consultar estado de una reserva por código |
POST | /api/reservations/:id/cancel | Cancelar reserva (requiere { code }) |
POST | /api/admin/login | Inicia sesión de administrador → { token } |
GET | /api/admin/reservations?status= | Listado completo (Bearer token) |
POST | /api/admin/reservations/:id/approve | Aprobar |
POST | /api/admin/reservations/:id/reject | Rechazar ({ note } opcional) |
DELETE | /api/admin/reservations/:id[?scope=series] | Eliminar una reserva; con scope=series, todas las del mismo bloque semanal |
Para operar sin aprobación (reservas confirmadas al instante), pon
requireApproval: false en LAB_CONFIG.
| Variable | Descripción |
|---|---|
ADMIN_PASSWORD | Clave del panel de administración (obligatoria en producción). |
PORT | Puerto del servidor (por defecto 3000; el hosting suele fijarlo). |
DATA_DIR | Carpeta donde se guarda reservations.json (backend de archivo). |
UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN | Activan el backend Redis (serverless). |
BOOTSTRAP_SCHEDULE | 0 desactiva la carga automática del horario en una base vacía. |