case study

Native member app replacing a legacy portal

National fitness club operator

Replacing a legacy member portal with a native app across a national club network

Mobile app·AI-Accelerated Product Engineering·Health & Fitness·June 2024

Client identity and commercially sensitive detail are withheld under the confidentiality terms of this engagement.

Challenge

Our client operated a legacy web portal that members used to manage bookings, access membership details, and interact with their club. As mobile usage grew, the limits of a web-based portal became acute. Members were navigating a non-native browser experience on mobile to book classes, presenting physical membership cards at reception, and managing accounts through an interface that had not kept pace with expectations. The technical challenges were significant. The existing system had no native mobile layer - every interaction on iOS and Android was a web view in a thin shell. Real-time class availability required manual page refreshes. There was no automated waitlist, so members who missed a booking window had no way to claim cancelled spots. Club entry depended on physical cards, creating friction at reception and a persistent member pain point. The rewards program lived entirely outside the app, running on a disconnected third-party system. They needed a ground-up rebuild, not an iteration on what existed: a single native app on iOS and Android unifying every member touchpoint - club entry, class booking, rewards, on-demand workouts, and membership management - in one authenticated session.

Approach

We began with a discovery phase mapping every existing member workflow and identifying the integration points with the client's backend systems. The core infrastructure connecting class schedules, membership data, club entry systems, and payment records was the foundation everything else had to connect to. Understanding those API contracts before writing a line of product code was non-negotiable. We decided early to build native - Swift for iOS, Kotlin for Android - rather than cross-platform. The requirements around digital club entry (QR code generation with offline fallback), biometric authentication, and deep OS integration for push notifications made native the right call. Cross-platform frameworks would have imposed constraints on exactly the features that mattered most to members. The architecture was designed around an event-driven backend. Bookings, cancellations, and waitlist movements had to propagate in real time across every member session: a member cancelling a class needed to immediately trigger waitlist resolution and push a confirmation to the next member in the queue, without polling. We built that on a WebSocket-based notification layer sitting in front of the core booking API. The member portal was rebuilt in parallel - a React web application sharing authentication and API contracts with the native apps, giving a consistent member experience across every surface.

Solution

Native iOS and Android apps - built from scratch in Swift and Kotlin, designed to the client brand and optimised for the interaction patterns of a gym environment: quick access, minimal friction, and offline capability for the moment that matters most, which is getting through the door. Digital club access - QR code entry replacing physical membership cards. The code is generated client-side with a short expiry and refreshes automatically. Critically, it works offline: the code is cached on device so members can enter without a network connection. This was one of the most requested features from the existing member base and a clear operational win for reception staff. Real-time class booking with automated waitlist - members book classes in advance, cancel with a single tap, and join a waitlist for full classes. The waitlist engine resolves automatically on cancellation: the next member in the queue receives a push notification and is booked in without taking any action. The system enforces the operator's strike policy for late cancellations and no-shows entirely in-app. Rewards engine - a tiered points system rewarding class attendance, on-demand workouts, referrals, and milestones. Points accumulate toward tier progression and unlock partner rewards, with state synchronised across both native apps and the web portal in real time. On-demand workout library - a content platform inside the app giving members access to workouts outside scheduled classes. Bookmarkable, filterable by type and duration, with live workout scheduling and calendar reminders. Member portal (web) - a React application for membership management: billing, freeze and cancel, personal trainer bookings, and account settings. It shares the authentication layer with the native apps, so a member authenticated in the app is authenticated on the web portal. Kids club booking - a dedicated flow for parents to book children into supervised sessions, selecting club, date, and time within the same authenticated session as their own bookings. Club occupancy insights - real-time and historical busyness data per club, surfaced in-app so members can plan around peak times.

Results

The app launched to the full member base and replaced the legacy portal entirely, with members migrating across at scale. Digital club access removed the physical card dependency at reception across the club network. The offline QR code resolved the most common member support ticket - not being able to get into the club - which had previously required staff intervention every time. The automated waitlist materially improved class fill rates. Classes that used to run with empty spots after late cancellations now fill automatically, making better use of studio capacity with no operational overhead. The rewards program, now native and integrated, became a meaningful retention driver - members earning and redeeming without leaving the app, with tier progression creating an engagement loop the disconnected third-party system had never achieved. For the client's own engineering team, moving from a legacy web portal to a documented, API-first architecture meant shipping new features without navigating a decade of accumulated technical debt. What this engagement demonstrates: we can retire a business-critical legacy system and replace it with native software that holds up in the physical world - offline entry at the door, real-time booking across every session, and an architecture the internal team can build on.

Technologies

Swift(Mobile)Kotlin(Mobile)React(Frontend)Node.js(Backend)WebSockets(Backend)PostgreSQL(Backend)Redis(Backend)AWS(Infrastructure)Push Notifications (APNs + FCM)(Mobile)

Ready to reach escape velocity?

Let's talk about your product.

Contact us