Member Experience

One membership, any device.

Members sign up, pick a plan, and get an access code that unlocks the gym. The mobile app holds their card, plan status, and history; the web app handles richer profile management. Both pull from the same membership_status view in Postgres.

Ayasumar Gym — member mobile app
— Mobile app · Access code & plan
Admin Dashboard

For the front desk, everything in one screen.

Staff use the admin dashboard to look up members by access code, manage active memberships, generate new codes via the generate_access_code() RPC, and assign trainers. All authorization is enforced at the database with Postgres RLS — not just in the UI.

https://admin.ayasumargym.com
Ayasumar Gym — admin dashboard
— Admin dashboard / Web
The Challenge

One business, three audiences.

Ayasumar needed software that worked for three very different users at once: gym members who care about their access code and renewal dates, staff who need to look up anyone in seconds, and the owner who needs real revenue visibility without becoming a data analyst.

Plan logic — eight tiers ranging from a single-day pass to a one-year membership — had to thread cleanly through every layer of the stack, from the Postgres enum down to mobile UI components, without diverging.

The Build

Database-first, three clients downstream.

The database is the source of truth — not the app. A membership_status view encapsulates the rules for what makes a membership active; the generate_access_code() RPC handles creation atomically; RLS policies enforce who can read what. All three client surfaces read from the same shape, so a change to the model propagates everywhere at once.

Mobile distribution uses a hybrid pipeline: JS-only changes ship over-the-air via eas update --branch production in seconds. Native or config changes go through a signed APK patch workflow (bundle → patch → zipalign → apksigner) with a locally stored keystore.

  • Eight plan tiers, one schema
    Postgres enum + RPC + view + typed config — plans don't drift between surfaces.
  • Three client surfaces
    Admin dashboard, member web app, and Expo + TypeScript mobile app.
  • Row-level security
    Authorization enforced at the database, not just at the UI.
  • Hybrid mobile delivery
    OTA for fast JS updates, signed APK patches for native changes.