Virgin Atlantic
& Holidays
Lead engineer on this massive replatforming project, unifying twelve disparate applications under a new headless architecture with React and Next.js.

Use this page if several brands share systems, but the shared platform design, override rules, content models, or delivery ownership are no longer clear enough to scale comfortably.
Clarify shared and brand‑specific platform boundaries before reuse starts creating friction, duplication, or governance problems.
Lead engineer on this massive replatforming project, unifying twelve disparate applications under a new headless architecture with React and Next.js.

The migration of several individual Group brand e‑commerce websites onto a newly developed, unified, React‑based platform. Enabling shared functionality and customisable components.

A complicated multi‑site, multi‑lingual, e‑commerce platform on top of Episerver using Handlebars and ASP.NET Razor. A bespoke system to offer three disparate branded experiences from a single codebase.

Multi-tenant applications serve multiple customers from a single codebase. Here, I walk through building a scalable multi-tenant web application using Next.js.
Build a headless CMS-powered Next.js site with stronger content modelling, preview support, and data boundaries that scale well.
Parent hub
Choose the right architecture problem when tenancy, shared systems, or App Router complexity are slowing teams down.
Capability
Bring in headless CMS consulting when CMS architecture, SEO controls, preview trust, or revalidation decisions are about to lock in operational pain.
Adjacent scenario
Clarify tenant boundaries before one shared Next.js platform becomes too coupled to scale safely.
Adjacent scenario
Untangle App Router caching and mutation issues when data is not updating, pages feel stale, or behaviour changes unexpectedly between routes.
Related page
Bring in principal‑level engineering support when architecture, delivery quality, and technical judgement need strengthening inside the work, not just from the sidelines.
Send me the affected page or route, point me at the code if that helps, and tell me what you expected to happen versus what is happening now. If this connects to a Next.js migration, technical SEO drop, performance issue, launch, or platform move, include that context too. I'll come back with the clearest next step.