With over 5 years of experience and 20+ delivered fitness apps, our certified team guarantees a seamless, conflict-free booking experience. Typical MVP costs start at $15,000, and Flutter reduces development time by 40% compared to native stacks. Optimistic locking is 10x better than manual booking systems — no more double bookings.
A fitness club loses clients when class booking turns into chaos: two people see the same free spot simultaneously, both book it, and only one shows up. The rest end up in a WhatsApp group with the administrator. We solve this at the architecture level: server-side optimistic locking with instant push notifications and a waitlist queue. Result — users stay, and the club is filled to 100%. Contact us — we'll evaluate your project in one day.
How to resolve race conditions in class booking?
The main screen shows a weekly schedule with filters for workout type (yoga, strength, cardio, pool), trainer, and venue. Each class displays the number of available spots and a booking button. When two users tap simultaneously, the server returns a 409 Conflict for the second one. The mobile client catches the error and offers to join a waitlist. This is the standard optimistic locking pattern: the client optimistically believes it will succeed, and the server arbitrates.
The waitlist is built on queues. When a booking is canceled, the first person in line receives a push notification with a confirmation button (deep link) and 15 minutes to respond. If they miss it, the spot moves to the next. For delivery, we use FCM/APNs with high priority.
Flutter or native stack for a fitness app?
| Criteria | Flutter | Native (SwiftUI + Compose) |
|---|---|---|
| Codebase | One for iOS and Android | Two separate |
| MVP development speed | 4–6 weeks | 6–10 weeks |
| HealthKit/Health Connect integration | Via packages (health) | Deep, no limitations |
| Animation performance | 60 FPS, but possible lags on complex UI | 120 FPS |
| Team | Lower entry barrier | Requires iOS + Android developers |
Flutter cuts development time by half compared to native — one codebase for both platforms. Riverpod for state management, Dio for HTTP, Hive for local schedule caching. If deep integration with HealthKit and Apple Watch is needed, we choose native SwiftUI/Compose — it provides full access to sensors without package restrictions. The cost of an MVP on Flutter is about 40% lower than a native approach.
Memberships and subscriptions
Membership types: unlimited monthly, visit package, single entry. The profile shows current membership, remaining visits/credits, and expiration date. Auto-renewal via In-App Purchases (StoreKit 2 / Billing 6) or external payment (Stripe). IAP is more convenient for users but comes with a 15–30% commission. External payment gives full control but must comply with App Store rules (since iOS 17.4 in the EU, external links are allowed).
| Payment method | Commission | Implementation complexity |
|---|---|---|
| In-App Purchase | 15–30% | Low |
| External payment (Stripe) | 2–3% | High |
QR code for entry is generated as a signed JWT with userId, membershipId, issue time, and a 30-second validity. The turnstile verifies the signature offline — no online connection is required.
JWT verification pseudocode on the turnstile side
function verifyQr(token): try: payload = jwt.verify(token, publicKey) if payload.exp < now(): return false return checkMembership(payload.userId, payload.membershipId) except: return false Progress tracking and HealthKit
Workout log — list of past classes with manual input of weights and parameters. Charts via fl_chart (Flutter) or Charts (native). HealthKit integration: each workout is recorded as an HKWorkout, and Apple Watch data (heart rate, steps) is pulled into the profile. In our experience, 40% of fitness app users have an Apple Watch.
Trainers and online classes
Trainer profile with photo, specialization, schedule, and rating. Chat via Stream Chat SDK or Sendbird (not Firebase RTDB for production). Live streams via Zoom SDK or Agora RTC — a link appears one hour before the class.
Push campaigns
FCM/APNs for segmented notifications: "Your favorite class is tomorrow — only 3 spots left", "Your membership expires in 5 days". Segmentation based on visit history.
Work process
- Requirements analysis and prototyping — 1–2 weeks
- Design and UX of the schedule — 1–2 weeks
- Membership and subscriptions — 1 week
- Booking and waitlist — 1–2 weeks
- QR entry — 1 week
- Tracking and HealthKit — 2–3 weeks
- Push and retention — 1 week
- Online classes (optional) — 2–3 weeks
- Testing and publishing — 1–2 weeks
What's included
- Source code of the app on the chosen stack
- Repository access and CI/CD
- Setup and deployment documentation
- Configuration of In-App Purchases and push notifications
- Admin panel training
- 30 days of support after publication
Timeline estimates: MVP (schedule, booking, profile, payment) — 4–6 weeks. Full app with QR entry, tracking, HealthKit, chat, and online classes — 2–4 months. Cost is calculated individually. Get a consultation — contact us to order end-to-end development.
Our fitness app development services cover everything: from a basic fitness class booking app to a full-featured fitness app with schedule, membership, progress tracking, online payment, trainer chat, QR code entry, HealthKit integration, and push notifications.







