尚未偵測到更新。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. |