The story
Three layers on the same ERP data: the member portal in the browser, a phone web app for members and staff, and a Flutter app that wraps the portal with a native card, a biometric lock and secure storage.
Staff tools in the phone app (clock-in, gate scan, member lookup, training attendance) only work inside the club. The server decides from a pin and a radius set on a map, never the phone.
Hard parts cleared
- One rule for a valid card: the app uses the same validation the gate and the front desk use, so a suspended member is suspended everywhere at once.
- Built to pass store review: no money inside the app, in-app account deletion, and review accounts backed by fixtures that never touch real members.
- Bookings made on the phone become real reservations in the ERP, and the phone app keeps working offline through a service worker.
- App accounts stay separate from membership records and are activated with a one-time code that staff issue from the member’s profile.















