2026-08-07 — marvelousdb: migración a API local sin Orchestrate/Marvel
Contexto: reescritura de marvelousdb (demo Express 2014) para correr 100% local sin Orchestrate (DBaaS muerto) ni Marvel API (ya no existe). Decisiones tomadas en sesión con usuario.
Decisiones
- Arquitectura: API REST separada (
api.js, puerto 3001) que lee los JSON dedata/en memoria y los indexa con FlexSearch; sitio (web.js, puerto 5050) que consume la API por HTTP.npm startlevanta ambos con concurrently. - Dataset: conservar los 1402 personajes y ~30180 comics de Marvel como semilla. No filtrar dominio público ahora (criterio legal resbaladizo; Marvel reclama trademark). El esquema sirve para reemplazar con datos propios de dominio público (README de data/ documenta el esquema).
- Thumbnails/URLs muertas: se dejan (i.annihil.us, marvel.com) tal cual; el navegador muestra placeholder de imagen rota. Migración a CDN propio = paso futuro.
- Búsqueda: FlexSearch
@^0.7.43(CJS), tokenize forward, campowiki.real_namebusca también en aliases. Filtros post-search por gender/universe (tags manuales con el Map completo). - Gender: heurística sin dependencias (categoría “Women” → female; si no,
conteo de pronombres en bio) replicando el paquete
genderdel import original. - Stack: Express 4 + express-handlebars 7 + handlebars helpers propios
(paginación reescrita a mano, sin handlebars-paginate). Node >= 20,
--env-file-if-exists=.env(funciona en Node 22+; máquina actual v25). - Eliminado:
functions.js,data/import.js,data/package.json, dependenciaorchestrate,express3-handlebars,q,handlebars-paginate. - Puerto web: 5050 por defecto porque el 5000 lo ocupa el Control Center de macOS en esta máquina (commplex-main).
- Smoke tests:
node:testcontra la API real (12 tests; indexa el dataset completo ~7s).
Cómo correr
npm install
npm start # API :3001 + web :5050
npm test # smoke testsPendientes conocidos
- Diseño/UI (CSS de 2014 con bourbon/neat; el usuario quiere rediseño).
- Migrar thumbnails a CDN propio.
- Dataset de dominio público real (renombrar/reesquemar).