Building

Gym Platform

Memberships, classes, coaches, and the exact spot you'll stand in.

Gym Platform case study cover
What it is
Mobile app · White label
Year
2026
What we ran
Drawing · Building
Built with
React Native · React Query · Zustand · RNEUI · Reanimated · i18next · Odoo · OneSignal

Built through Walnut

A member app for a multi-branch gym chain in the Gulf, built through Walnut, our own software firm. The client is deliberately not named. Members buy and manage memberships, book group classes down to the seat, join a live waiting list, train with a coach and track every lift. It is shown here in Walnut's white-label theme: the same product, ready to carry any gym's brand.

The problem

At any busy gym, the popular classes fill first. A member who misses out has no reason to check back, and a spot freed by a late cancellation can easily go unused.

On top of classes, a multi-branch chain sells memberships, personal-training packages, freezes and upgrades. The brief: put the whole membership in the member's pocket, and make every class spot count.

Booking, down to the seat

Calendar, class, spot, waiting list. A month view shows every class at every branch; the class page shows coach, capacity and remaining spots; the seat map is drawn from the studio's real layout, with pinch-to-zoom for big rooms.

When a class is full, members queue in order:

  • Join. Joining a full class returns a position (#1, #2, #3), shown on the member's calendar.
  • Release. Someone cancels. The backend detects the free spot and offers it to #1. The app never invents queue order.
  • Offer. A push with its own alert sound deep-links to the class, with a countdown to the offer's expiry.
  • Respond. Accept books the spot. Deny or silence passes it to #2 automatically.
  • Fill. The spot is taken by someone who actually wants it.

The whole membership, self-served

Home is server-driven: the API returns an ordered list of sections, so the gym can rearrange it without an app release. Memberships are bought, renewed and upgraded in the app, and a workout log tracks weight, sets and reps per exercise.

  • Every notification lands somewhere. A custom URL scheme and universal links map to memberships, PT packages and individual classes.
  • Arabic that looks designed, not translated. About 910 keys per language, full right-to-left, a dedicated Arabic typeface, and digits kept in one face so stats never jump between scripts.
  • Server state done properly. 17 API service modules and 99 React Query hooks handle caching, retries and invalidation.
  • Rules under test. Waiting-list logic, appointment responses, class eligibility and notification routing are covered by unit tests: the parts that cost members a class if they break.

White label by design

Colour, type, radii and spacing live in one themed design system, with a single primary token driving buttons, active states and highlights. Re-theming is a token change plus one pass over icons and illustrations, not a redesign. That is exactly how these screens were produced: the client's blue swapped for Walnut's ember, their logo for Walnut's.

Also in the app: personal-training packages and trainer booking, freezes, family and friends memberships, contract e-signing, ID upload, InBody results, referrals, partner benefits and active-device management.

Screens are recreated from the app's source in Walnut's white-label theme. Names, branches and prices are representative.