arrow_backAll work

Case study / Aviation

Modernising a 10-year B2B loyalty platform without downtime

B2B loyalty platform rebuilt from the ground up — Angular + Ionic monorepo serving global aviation clients.

Client
Loyalty Plus
Industry
Aviation
Year
2025
Stack
Angular · Ionic
Loyalty Plus cover

01 — The Brief

A real problem.

Loyalty Plus runs the loyalty programmes for a portfolio of aviation clients — airlines, MROs, and ground service providers across three continents. Their platform was ten years old and showing every one of those years. The original Angular 4 codebase had been patched, forked, half-migrated to Angular 8, then frozen. Initial page loads averaged eight seconds on cellular, the iOS Cordova wrapper crashed on long lists, and any new feature took six weeks of cautious archaeology before code could be written. The brief was unambiguous: modernise the front-end without touching the data layer their enterprise customers had built integrations against, and do it without a single minute of customer-facing downtime.

The app took eight seconds to load on a good day and crashed every time someone scrolled the rewards list on iPhone. Our enterprise customers were embarrassed to demo it.

Sarah van Niekerk · Head of Product, Loyalty Plus

02 — The Insight

What we saw.

The temptation when you inherit a legacy front-end is to rewrite the whole stack. We argued against it. The data layer — a stable, well-tested set of REST APIs and a Firestore-backed warehouse — was actually the strongest asset Loyalty Plus owned. Twelve enterprise customers had built integrations against it. Touching it would have triggered a year of contract renegotiations. The right move was a strict perimeter rewrite: replace the front-end and the mobile shell, leave the API surface untouched, and use the rebuild as an excuse to extract a shared services layer that the web and mobile clients could both consume cleanly.

03 — The Build

What we shipped.

We rebuilt the front-end as an Angular 17 + Ionic 7 + Capacitor monorepo, with a shared services package that both the web app and the iOS/Android shells consume. The cutover ran behind a feature flag at the CDN layer — old and new versions served side-by-side for two weeks, with a kill-switch we never needed to use. Page loads dropped from eight seconds to under two on the same network. The Capacitor build replaced the brittle Cordova shell and unlocked native push notifications and biometric login, both of which two of their largest customers had been asking for since 2022. We also took the opportunity to instrument every meaningful interaction with @partnersinbiz/analytics-js so the product team could finally answer "are people actually using the rewards browser?" with a number instead of a guess. Total elapsed time, kickoff to full cutover: nine weeks.

Loyalty Plus build visual 1
Loyalty Plus build visual 2

04 — The Outcome

What changed.

0
minutes downtime
4.1x
faster page loads
12+
enterprise clients
Sarah van Niekerk

They write code like grown-ups. No stubs, no "we will fix it in v2", no surprises in the invoice. The cutover happened on a Wednesday afternoon and nobody noticed except our analytics dashboard.

Sarah van Niekerk · Head of Product, Loyalty Plus

05 — Deliverables

What we shipped.

  • 01Angular 17 + Ionic 7 web application
  • 02iOS and Android apps via Capacitor with native push and biometrics
  • 03Shared services monorepo package consumed by web and mobile
  • 04Feature-flagged CDN cutover with zero customer-facing downtime
  • 05Product analytics instrumentation across all flows
  • 06Performance budget enforced in CI (LCP under 2s)
  • 07Migration runbook + rollback playbook handed to internal team

06 — Stack

The tools.

AngularIonicCapacitorFirebase

Want a case study like this one — with your name on it?

Start a projectarrow_forward