El problema
Llegamos a un proyecto a medio abandonar y con fecha límite fija. La financiación europea terminaba en septiembre de 2025, así que cada semana que se fuera en recuperar el terreno perdido restaba tiempo a las funcionalidades que el equipo de investigación necesitaba de verdad. El presupuesto tampoco daba mucho margen: al tratarse de fondos públicos, la universidad tenía que mantenerse por debajo de un umbral que evitara entrar en un proceso de licitación formal.
Técnicamente el punto de partida era duro. Craft CMS estaba en una versión antigua (3.7.11), varias licencias de plugins habían caducado, y no existía ningún entorno de staging: todo se desplegaba directamente a producción, así que tocar cualquier cosa era jugársela. El proyecto además tenía que interoperar con la infraestructura europea de ciencia abierta: Nakala para preservar los datos digitalizados, HAL para las publicaciones científicas, ISIDORE como índice público para que otros investigadores pudieran encontrar y acceder al contenido. Es un nivel de exigencia habitual en proyectos financiados por la UE, pero poco frecuente fuera de ese mundo.
Solución
Planteamos el trabajo en dos fases: primero estabilizar, después construir.
En la primera hicimos una auditoría técnica completa del proyecto heredado (código, base de datos, plugins y dependencias) para saber exactamente qué había y qué riesgos tenía cada pieza. Reclamamos las licencias caducadas, montamos las primeras copias de seguridad de la base de datos, que hasta entonces no existían, y construimos un entorno de staging desde cero. Con esa base ya firme, migramos Craft CMS de la versión 3 a la 4.
Con la plataforma en un estado fiable, pasamos a construir. Trabajamos la gestión de usuarios y cuentas personales, mejoramos el buscador y los filtros y desarrollamos los módulos de contenido que le daban sentido al proyecto: una antología de obras digitalizadas con visor de imágenes en alta resolución (protocolo IIIF) y una vista comparada entre el manuscrito original y su transcripción codificada en XML/TEI, un apartado de publicaciones científicas sincronizado con HAL, y una sección pedagógica de divulgación.
También construimos y documentamos una API pública en GraphQL, pensada para que otros investigadores y universidades pudieran acceder al corpus de datos de forma abierta. Dejamos toda la arquitectura documentada para que el equipo de la universidad pudiera seguir el mantenimiento sin depender de un proveedor concreto.
Resultados
La plataforma llegó a producción dentro del plazo de la financiación europea, con un entorno de staging funcionando por primera vez en la vida del proyecto y una base de código migrada y documentada. Los datos de investigación quedaron preservados e interoperables con la infraestructura europea de ciencia abierta, y el equipo de la universidad recibió el proyecto con documentación técnica completa para continuar el mantenimiento de forma autónoma.