Case studies / Inflight Entertainment Platform MigrationFeature · 10 min read · 2024–2025
Feature · Case 01 // IFE × Legacy Migration

Inflight Entertainment Platform Migration.

How we helped an inflight entertainment provider migrate a legacy airline content platform to a cloud-native, multi-tenant architecture — while keeping the product live and extending it with streaming, modern admin workflows, and event-driven sync.

Client
Inflight entertainment provider
Practice
Cloud · Web · IFE platforms
Years
2024–2025
Product
Passenger-facing IFE content platform
Stack
Azure · ASP.NET Core · React · Next.js · Umbraco · SQL Server · MongoDB · Service Bus · Azure Container Apps · Azure DevOps · Terraform · Azure B2C
Status
Live in production · fully migrated · maintained by Coffee Mug
The ultimate <em>viewing experience</em>, always close to you
INFLIGHT ENTERTAINMENT · LIVE

The ultimate viewing experience, always close to you

Add streaming entertainment, customise editorial content, amplify partner activations and deliver exclusives — all from one headless platform.

[ PLATE 01 — HERO PHOTOGRAPH · passenger content website, airline branding, CMS workspace]
A legacy IFE platform migrated step by step into a cloud-native architecture for passenger websites, third-party APIs, admin workflows, sync operations, and streaming.
§ 01 — Brief

The client needed to modernise a legacy IFE platform without stopping the product.

An inflight entertainment provider asked us to rework a legacy platform used by airlines to present IFE content available on board.

The product had grown beyond its original architecture. It served passenger-facing websites, APIs for third-party access, an admin tool, and a sync platform. It could be used before a flight, in flight, on board, and in airport lounge streaming scenarios.

The client wanted to extend the platform with more functions, including streaming, but the old stack was becoming a constraint. The legacy system was built on Umbraco 7.15, a .NET Framework 4.7 API, SQL Server, MongoDB 3.4, and a custom admin application. Page structure was rendered by Umbraco, while a custom rendering engine handled client-side widgets.

The challenge was not only to upgrade technology. The platform had to be migrated while still supporting existing airlines, existing websites, existing content workflows, and existing users.

§ 02 — Challenge

The old architecture made every tenant harder to operate.

The old platform followed a tenant-per-CMS-instance model. Each airline had its own Umbraco instance, its own branded website, and its own operational setup.

That worked for a while, but it became increasingly difficult to maintain. User management, content management, configuration, deployment, and platform updates had to be handled repeatedly across separate instances. At production scale, the client was operating seven airline websites through seven CMS instances.

Each airline had different branding, domains, catalogues, languages, layouts, and features. There was no shared content between airlines, so the platform still needed strong tenant separation. But the operational model around that separation needed to change.

The API layer also had to evolve. The legacy API was split across multiple areas such as movies, audio, games, flights, and supporting services. The old sync process pulled data from client systems, and the growing product requirements made that model harder to extend.

A big-bang rewrite would have been too risky. The old and new systems had to run side by side while functionality was replaced step by step.

● Plate 02 — The numbers
7 → 1
CMS instances
consolidated into one multi-tenant platform
7
airline websites
supported with separate brands, domains, and catalogues
100K+
content records
across movies, audio, games, and flights
3 days
new airline setup
reduced from around one month
§ 03 — Approach

We migrated the platform service by service.

We started by analysing the existing API and its business areas: movies, audio, games, flights, and supporting services.

That analysis showed that we did not need to migrate everything at once. The platform could be modernised incrementally. We could replace one API area at a time, plug new services into the existing sync pipeline, and allow old and new parts of the system to coexist during the transition.

We chose a microservices architecture so each business area could be separated and migrated independently. Azure API Management helped route traffic while old and new APIs were running side by side.

The first services were introduced into the existing flow, starting with flights, then films, and eventually the remaining API areas. In total, six API services were replaced.

This phased approach reduced risk. It allowed the product to keep running while the underlying architecture changed around it.

§ 04 — Sync

Pulling data became an event-driven process.

After the API migration, we moved deeper into the sync and admin parts of the platform.

The old sync process was based on API polling. It pulled data from client systems and synchronised content such as movies, audio, games, and flights. Some data also came through manual upload processes.

We redesigned the sync process to be event-driven. Events coming from the client’s systems triggered downstream processing instead of relying only on repeated API pulling.

The new sync platform also introduced more options for enriching synchronised data before it reached passengers. Teams could add tags to movies, fill missing translations, replace low-quality images, and prepare content more reliably for airline-specific use cases.

Synced and enriched data was stored across the platform: in the CMS, backend databases, and search indexes, depending on how it was used by the passenger website, APIs, admin workflows, and third-party consumers.

§ 05 — Admin

The new admin became a transition layer.

The client also needed a modern admin experience, but replacing every old admin function at once would have created too much disruption for users.

We built the new admin in React and embedded selected legacy admin views through iframes. That gave users one place to work, while old functions were gradually replaced behind the scenes.

The same roles and permissions model was preserved, so users did not have to learn a separate access model during the migration.

Over time, old functions were migrated into the new admin and new required capabilities were introduced. The admin became both a product improvement and a practical bridge between the old and new platform.

§ 06 — CMS

Seven CMS instances became one multi-tenant headless platform.

The CMS migration was one of the most important architectural changes.

The old platform used Umbraco 7.15, with one Umbraco instance per airline. There was no official direct migration path from that version to the modern target version, so the CMS layer had to be redesigned rather than simply upgraded.

We moved to a headless CMS model using modern Umbraco, initially version 14 and now version 17. Instead of running one CMS per airline, the new platform uses one CMS instance capable of handling all tenants.

Each airline still gets its own branded website, domain, catalogue, languages, layout, and feature set. But the operating model is simpler: one CMS platform, multiple tenants, and clearer separation between content management and passenger-facing rendering.

The passenger-facing websites were rebuilt with React and Next.js. This removed the need for custom rendering stitched into old Umbraco pages and avoided many of the previous server-side versus client-side rendering problems.

The result was a cleaner architecture: Umbraco manages content, the frontend renders the passenger experience, and APIs provide structured access for websites, onboard and off-aircraft scenarios, and third parties.

§ 07 — Streaming

The new platform created room for airport lounge streaming.

Streaming was one of the key reasons the old system needed to change.

As part of the migration, the platform was extended with airport lounge streaming. We integrated with a streaming provider and adapted the platform so airline content could be presented and accessed in that context.

This was not just a frontend feature. It required the underlying platform to support richer content workflows, streaming-related metadata, third-party integrations, and tenant-specific behaviour.

The migration therefore did more than replace old technology. It created a foundation for new product capabilities that did not fit naturally into the legacy stack.

§ 08 — Cloud

The platform moved fully into Azure.

The modernisation also changed the hosting and operations model.

The old platform depended partly on virtual machines. The new platform is hosted fully in Azure, with no remaining VM-based application hosting.

The modernised stack includes ASP.NET Core services, React and Next.js applications, Umbraco, SQL Server, MongoDB Atlas, Service Bus, Azure Container Apps, Azure API Management, Azure B2C, Azure DevOps, and Terraform-based infrastructure as code.

This gave the client a more consistent deployment model, clearer infrastructure ownership, and a stronger base for future platform growth.

§ 09 — Result

The migration reduced operational complexity and made new airline launches faster.

The migration is complete, the platform is live in production, and we continue to maintain it.

The client moved from seven airline-specific CMS instances to one multi-tenant headless CMS platform. Seven branded airline websites are now supported through a shared architecture while still preserving separate domains, catalogues, branding, languages, layouts, and feature sets.

Six API services were replaced, the sync process was redesigned around events, and the admin experience was modernised without forcing users through a disruptive cutover.

The platform supports more than 100,000 content records across movies, audio, games, and flights.

One of the clearest operational improvements is onboarding. Setting up a new airline instance now takes around three days. Previously, it could take around a month.

The result is a modern IFE platform that supports passenger-facing websites, third-party APIs, admin workflows, sync operations, onboard and off-board use cases, and airport lounge streaming — without carrying forward the operational weight of the old architecture.

● Plate 03 — Pull quote
"We did not try to replace the entire platform in one move. We let old and new systems run side by side, then moved the product across service by service."
— Coffee Mug project team · compiled 2026
● Plate 04 — System diagram
[ CLIENT SYSTEMS → EVENT-DRIVEN SYNC → ENRICHMENT → CMS / DATABASES / SEARCH → API → PASSENGER WEBSITES / THIRD-PARTY CONSUMERS / STREAMING ][ CLIENT SYSTEMS → EVENT-DRIVEN SYNC → ENRICHMENT → CMS / DATABASES / SEARCH → API → PASSENGER WEBSITES / THIRD-PARTY CONSUMERS / STREAMING ]
A phased migration path: old and new APIs ran side by side through Azure API Management while sync, CMS, admin, and passenger-facing experiences moved to the new platform.
● Plate 05 — Results ledger

What changed, in five lines.

01 · Tenant model
7 CMS instances → 1 multi-tenant CMS
consolidated airline-specific instances into one headless CMS platform
02 · Migration strategy
side-by-side replacement
old and new systems ran together while services were migrated one by one
03 · API layer
6 services replaced
covered flights, films, and other content service areas
04 · Sync model
polling → event-driven sync
introduced event-triggered processing and content enrichment workflows
05 · Airline setup
one month → three days
reduced the effort required to launch a new airline instance
● Colophon

Who, with what.

The Inflight Entertainment Platform Migration modernised a passenger-facing airline content platform used onboard and off-board. The project moved the product from legacy Umbraco, .NET Framework APIs, polling-based sync, and tenant-specific CMS instances to a cloud-native platform with modern APIs, event-driven sync, a React admin, headless multi-tenant Umbraco, and Next.js passenger websites.

Practice
Cloud · Web · IFE platforms
Passenger-facing content platform and internal operations
Application
ASP.NET Core · React · Azure
Modern APIs, admin, and passenger-facing websites
CMS
Umbraco 14 → Umbraco 17
Headless multi-tenant CMS
Platform
Azure · Azure Container Apps · Azure API Management
Cloud hosting, routing, and application runtime
Data
MongoDB Atlas · SQL Server
Structured and document data storage
Messaging
Service Bus
Event-driven sync and platform workflows
Operations
Azure DevOps · Terraform · Infrastructure as code
Build, deployment, and infrastructure automation
Identity
Azure B2C
Authentication and access management
● Last word

Have a legacy IFE product that still needs to fly?

Bring us in before the rewrite becomes the risk. We’ll help you map the old system, identify the safest seams, and replace the highest-risk parts first — while keeping the product, users, and operations running.