Quadrivium Library es mi biblioteca personal convertida en una herramienta para aprender. Empezó con una pregunta bastante sencilla —saber qué libros tengo y dónde están— y, con más de mil libros, muchos de ellos de matemáticas y ciencias, dejó pronto de ser un problema de catalogación. Lo que quería saber era qué contienen esos libros, cuáles explican un concepto concreto, cuáles debería leer antes que otros y qué relaciones existen entre ellos.
Un catálogo convencional guarda títulos, autores y categorías, pero no responde a esas preguntas. La aplicación intenta reunir en un solo sitio el catálogo, el seguimiento de lectura, la ubicación física de cada ejemplar y una capa de conocimiento sobre sus contenidos. Está pensada sobre todo para libros técnicos y matemáticos, aunque también contiene libros de otras áreas.
De dónde viene
Antes de construirla, la información estaba repartida entre un catálogo, Notion, los propios libros y decisiones que tomaba de memoria. Ninguna de esas fuentes servía por separado para decidir qué leer: sabía que tenía un libro, pero no siempre recordaba en qué estantería estaba ni si me servía para lo que quería estudiar esa semana. Quadrivium Library intenta convertir esa colección dispersa en un sistema único y consultable desde varias perspectivas: como catálogo, como conjunto de ejemplares físicos, como mapa de conceptos y como base para planificar aprendizajes.
Qué hace hoy
Biblioteca
Mantiene el catálogo con título, subtítulo, autores, categorías, editorial, ISBN, idioma, páginas, fechas, descripción, etiquetas y portada. Puedo incorporar libros manualmente o importarlos desde las exportaciones de Notion, y completar metadatos consultando fuentes bibliográficas externas como Google Books y Open Library. La ficha permite editar los datos principales sin salir de ella, buscar y filtrar por texto, categoría, autor, editorial, estado de lectura, ubicación, favoritos o disponibilidad de edición digital, y ordenar por fechas, título, autor o ubicación. Hay vistas preparadas para preguntas repetidas —libros sin ubicación, sin portada, sin categoría, sin fecha, técnicos, de estudio—, gráficos de distribución por categoría, estado de lectura y año de adquisición, agrupaciones por autor y editorial, detección de posibles duplicados y exportación de los datos.
Lectura y notas
Los libros se marcan como pendientes, en lectura, leídos o abandonados, con página actual, porcentaje, fechas y prioridad. Puedo anotar por qué quiero leer un libro y añadir notas generales, resúmenes, notas de capítulo, ejercicios, citas e ideas. También puedo registrar relaciones entre libros —prerrequisito, complemento, mayor o menor dificultad, mismo tema, misma colección, sustitución— y hacer preguntas sobre el catálogo con Pregunta a tu biblioteca, que devuelve una respuesta junto a los libros relacionados.
Ubicación física
Las ubicaciones son jerárquicas: casas, habitaciones, librerías, estanterías, baldas, cajas. Puedo arrastrar un libro hasta su balda, conservar su posición relativa en la estantería cuando la conozco y generar una tarjeta imprimible con formato de ficha de préstamo. Existe además un flujo para reconocer libros a partir de imágenes de estanterías y proponer ubicaciones.
Ediciones digitales y documentos
Puedo adjuntar ediciones digitales en PDF o EPUB, abrir las compatibles dentro de la aplicación y extraer su estructura. La Extracción de estructura funciona cuando el documento contiene información aprovechable: índices, introducciones y bibliografías. Los PDF se leen con PDF.js buscando texto nativo y marcadores; los EPUB se leen a partir de estructuras como nav.xhtml o toc.ncx. Si el resultado no sirve, puedo volver a procesar el documento o aportar un índice a mano. Una edición digital nueva puede lanzar en segundo plano la extracción y una clasificación matemática, y una extracción fallida no borra un índice anterior válido. Los PDF escaneados sin capa de texto no se procesan mediante OCR: se marcan como no aplicables.
Mapa de conocimiento
Incluye las vistas Conceptos, Itinerarios y Atlas. La Clasificación matemática organiza áreas, subáreas y temas en una taxonomía cerrada contra la que se clasifican los libros, con un perfil por libro (área principal, nivel estimado, tipo de libro, temas cubiertos), una cola de Revisión IA para aceptar, editar, rechazar o volver a analizar clasificaciones de baja confianza, y vistas de matriz y diagnóstico con áreas fuertes, débiles y temas sin cubrir. El Atlas representa áreas, temas y libros como un grafo interactivo. Conviene decirlo claro: el Atlas es una herramienta de exploración y revisión, no una enciclopedia ni una taxonomía validada por expertos.
La búsqueda de conceptos de Conceptos no usa embeddings ni pgvector. Se apoya en texto normalizado, índices de PostgreSQL, índices de contenidos, descripciones, notas y datos extraídos de documentos. Eso hace visible de dónde sale cada coincidencia, pero no equivale a una comprensión semántica completa: una coincidencia textual es evidencia, no prueba de que un libro cubra bien un tema.
Itinerarios
Puedo crear itinerarios manuales con módulos, unidades, lecturas y recursos, o generar una propuesta a partir de un objetivo escrito (entre 10 y 1000 caracteres). El flujo separa el trabajo: la IA propone un plan conceptual con fundamentos, núcleo, ampliaciones y dependencias; el sistema lo valida contra la taxonomía real y comprueba ciclos, conceptos desconocidos y cobertura del objetivo; después se buscan localmente libros y apartados candidatos; y una segunda llamada a la IA organiza módulos, unidades, lecturas, ejercicios y criterios de éxito. El resultado se guarda como vista previa y necesita confirmación explícita para convertirse en itinerario. El pipeline nuevo sigue en desarrollo.
Papers
El esquema y la aplicación contemplan artículos de investigación y sus secciones: extracción de conceptos, análisis, relación con la biblioteca y recomendaciones con distinto grado y tipo de evidencia. Es una línea de trabajo del proyecto, no un módulo en uso: en la copia que manejo ahora mismo no hay papers cargados.
Cómo está hecho
El backend es Node.js (versión mínima documentada 24.18.0) con Express y TypeScript; el frontend, React 18 con Vite, Tailwind CSS, React Router, TanStack Query, Recharts, React Flow, PDF.js, KaTeX y Framer Motion. La base de datos es PostgreSQL con Prisma, la autenticación usa JWT y bcryptjs con roles ADMIN, SUBSCRIBER y VIEWER, y los archivos (portadas, ediciones digitales, documentos, escaneos) se guardan en almacenamiento local. El despliegue está documentado en Railway con PostgreSQL y PM2 para el servidor. El repositorio es un monorepo con dos workspaces npm, server y client: en desarrollo Vite sirve el frontend y redirige API y archivos al servidor Express; en producción Express puede servir el frontend compilado con fallback de SPA.
La IA se llama por HTTP a proveedores configurables —OpenAI, Gemini, DeepSeek— y las respuestas estructuradas se validan antes de guardarse; cada llamada queda registrada. Una decisión de diseño importante es que la IA no recibe siempre la biblioteca completa: primero se intenta resolver con consultas a PostgreSQL, búsqueda de texto, heurísticas, taxonomías y reglas locales, y solo se envía al modelo lo que todavía necesita interpretación. Después las respuestas se validan contra autores, categorías, temas, libros y páginas que existen de verdad en la base de datos.
La IA propone, yo reviso
Las sugerencias de metadatos, categorías, notas o relaciones no modifican el catálogo al generarse: quedan pendientes hasta que las aplico, las edito o las descarto. Lo mismo ocurre con las Relaciones sugeridas y con los itinerarios en vista previa. Este patrón es la parte del proyecto que más me interesa contar, porque es la respuesta a un problema real: reducir invenciones usando listas cerradas, identificadores existentes, reintentos controlados y confirmación humana, en lugar de confiar en que el modelo acierte.
En qué punto está
Quadrivium Library está en desarrollo y la uso para resolver mi propio problema. Tengo una copia de datos restaurada de producción que utilizo para auditorías, y la aplicación arranca y puede consultarse en modo invitado de solo lectura. La rama de trabajo actual es feature/itinerary-pipeline-v2.
Hay partes que siguen dependiendo de procesos por terminal y de revisiones manuales, como la clasificación de dominio y la matemática; la carga masiva de clasificación no se lanza desde la interfaz normal y requiere comandos administrativos. Está prevista la optimización para grandes volúmenes de libros (scroll infinito, más índices, miniaturas, code-splitting), y la wishlist, las series de libros y una nube de etiquetas siguen siendo ideas apuntadas. La cobertura de prerrequisitos pedagógicos está en desarrollo y no debe tomarse como conocimiento validado de forma exhaustiva.
Lo que el proyecto me sirve para explorar
Además de organizar mi biblioteca, Quadrivium Library me deja experimentar con problemas que me interesan: cómo combinar reglas locales con modelos de lenguaje, cómo validar lo que devuelve una IA contra datos reales, cómo extraer estructura de documentos que no la tienen bien definida y cómo representar relaciones entre libros, temas y prerrequisitos sin delegar toda la lógica en el modelo. Cada una de esas partes sigue abierta, y por eso el proyecto continúa en desarrollo.




