Migrating a Business-Critical eLearning Platform for Continuity, Scale, and a Stronger Foundation

As Strapi v4 approached the end of its long-term support runway, Plume Ltd — a UK-based eLearning technology company running a custom LMS for multiple corporate clients from one shared codebase — set out to secure its platform's architectural foundation for years to come without freezing its commercial roadmap. To lead a migration that could run alongside live, active development, the company partnered with Sensinum, drawing on the team's deep, hands-on Strapi expertise.
The Challenge
Plume's platform runs on a shared-core model: a large body of business logic lives in a central codebase, consumed by an internal reference implementation and by individual client deployments, each with its own layer of customization on top. This architecture let Plume scale its eLearning offering across multiple customers while keeping functionality consistent — but it also concentrated years of highly specific engineering decisions that a standard Strapi v4-to-v5 upgrade path couldn't safely absorb.
At the same time, the platform needed to keep shipping new client-facing features and fixes throughout the transition, with business-critical logic tied directly to Plume's core learning workflows, where even small regressions carried a disproportionate business risk. A conventional "freeze and migrate" approach wasn't an option — every change introduced on the live platform during the migration had to be tracked and carried forward into the new codebase being built at the same time, without slowing either stream down or risking drift between them. Achieving this required more than a version upgrade — it called for a controlled, dual-track engineering migration, run in parallel with an actively evolving production platform.
What stood out was how quickly the Sensinum team got up to speed with a complex codebase. They understood that this wasn't a straightforward Strapi upgrade and planned the migration around our ongoing development work, so it didn't hold up our roadmap. Their developers worked closely with ours throughout, which made a technically complex migration much easier to manage. The quality of their work was consistently in line with the standards we set for our own development team.
The Solution
Sensinum took full ownership of the migration engineering, structured as a dual-track process that kept Plume's live commercial delivery on Strapi v4 running uninterrupted while building out the Strapi v5 platform in parallel.
Discovery, Audit, and Platform Stabilization
The engagement opened with a comprehensive technical audit of the shared core codebase, the internal reference implementation, and a representative production client deployment. Key steps included:
- Reviewing architecture, customizations, data models, integrations, and operational setup to establish a validated migration scope, timeline, and risk register before any migration work began
- Aligning all relevant codebases on the latest stable release of the existing platform version, removing deprecated patterns
- Laying the groundwork for a safe transition ahead of the core migration
This gave both teams a shared, validated view of the platform's real complexity before any code was touched.
Migrating the Shared Core in Lockstep with Live Development
With the scope confirmed, the Sensinum team migrated the shared core while mirroring Plume's active Strapi v4 development stream in parallel. The implementation focused on:
- Refactoring all custom plugins and extensions to the new platform architecture, with tests added for each migrated area to verify behavioral parity
- Migrating the data access layer and underlying identifiers to the new architecture's recommended patterns, validating content relations, permissions, and publishing workflows throughout
- Reviewing and refactoring business-critical logic tied to Plume's core learning workflows so it behaved identically on the new platform
- Modernizing legacy dependencies across authentication and administration, and adjusting the permission model to the new platform's updated behavior
- Building a compatibility layer so existing client applications could keep operating without disruption, enabling a gradual, client-by-client transition rather than a forced cutover
Every feature and fix shipped on the live platform during the migration window was tracked and carried forward into the new codebase, so the two streams never drifted out of sync.
Extending the Migration Beyond the Core Platform
At Plume's request, the scope grew beyond the original shared-core migration to port additional functionality forward. This included:
- Migrating tens of thousands of lines of code, including highly customized business logic and complex relational structures between platform modules
- Preserving existing LMS user journeys and behavior throughout
- Preparing a production-ready foundation on the new platform version for onboarding individual client deployments case by case
This extended scope turned the migration into a reusable reference implementation rather than a one-off upgrade.
The Results
Following the migration, Plume now benefits from a modern, secure platform foundation delivered without any interruption to its business. Key outcomes included:
- Zero disruption to live delivery — the entire migration ran alongside continuous Strapi v4 feature development, with no pause to Plume's commercial roadmap or client commitments
- Tens of thousands of lines of migrated code — including custom business logic and complex cross-module relationships, carried forward with verified functional parity
- A gradual, low-risk transition path for clients — with a purpose-built compatibility layer letting client applications move onto the new platform on their own timeline
- A validated, production-ready Strapi v5 foundation — now serving as a reference implementation for future client upgrades
- A platform kept on Strapi's current — actively supported major version, maintaining the highest available security posture for Plume and every client running on its infrastructure
- A migration scope that grew with the engagement — extending at Plume's request into porting further functionality to the latest Strapi release
Beyond the technical outcome, the engagement strengthened Sensinum's partnership with Plume: the same team that led the audit and migration is positioned to support Plume's client-by-client Strapi v5 rollouts going forward, building on a shared understanding of the platform developed over the course of the project.

