A complete gym management platform spanning three client surfaces, an admin dashboard, a member web app, and a React Native mobile app, backed by Supabase with PostgreSQL, RLS, RPCs, and views. Memberships, access codes, trainers, and notifications, in one accountable system.
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.

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.

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 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.