Meltype
눈 녹듯 반각·전각 장벽을 녹여주는 일본어 입력
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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. |