The problem
We inherited a project that had been left half-finished, with a fixed deadline attached. European funding ended in September 2025, so every week spent recovering lost ground took time away from the features the research team actually needed. The budget didn't leave much room either: as public funds, the university had to stay under a threshold that would have triggered a formal public tender process.
The technical starting point was rough. Craft CMS was running an old version (3.7.11), several plugin licenses had expired, and there was no staging environment at all, everything deployed straight to production, so touching anything was a gamble. On top of that, the project had to interoperate with European open-science infrastructure: Nakala for preserving digitized data, HAL for scientific publications, ISIDORE as a public index so other researchers could discover and access the content. That's a fairly standard requirement for EU-funded projects, but not one you see much outside that world.
Solution
We approached the work in two phases: stabilize first, build after.
In the first phase we ran a full technical audit of the inherited project (code, database, plugins, and dependencies) to understand exactly what was there and what risk each piece carried. We claimed the expired licenses, set up the first database backups the project had ever had, and built a staging environment from scratch. With that foundation in place, we migrated Craft CMS from version 3 to 4.
Once the platform was on stable ground, we moved on to building. We worked on user accounts and account management, improved the search engine and filters and developed the content modules that gave the project its purpose: a digitized-works anthology with a high-resolution image viewer (IIIF protocol) and a side-by-side comparison between the original manuscript and its XML/TEI-encoded transcription, a scientific publications section synced with HAL, and an educational outreach section.
We also built and documented a public GraphQL API, designed so other researchers and universities could access the dataset openly. We left the whole architecture documented so the university's team could keep maintaining it without depending on a specific provider.
Results
The platform reached production within the European funding deadline, with a staging environment running for the first time in the project's history and a migrated, documented codebase. The research data stayed preserved and interoperable with European open-science infrastructure, and the university's team received the project with complete technical documentation to carry on maintenance independently.