A trainer marketplace where three taps got you a session.
17 disciplines, 500+ vetted trainers, three emirates. We rebuilt the booking funnel around the question users actually ask: who's free this Saturday near me?




- Client
- Fitlov
- Sector
- Fitness · Booking
- Engagement
- Discovery → Build → Launch · App + Web
- Year
- 2024
✱ § 01 · The brief
What they actually needed.
Fitlov runs an in-home personal training marketplace across Dubai, Abu Dhabi, and Sharjah. Sessions start at AED 199. Disciplines run from boxing and MMA to yoga, pre-natal, post-injury rehab, and reiki — 17 in total. Trainers manage their own availability via the app; clients book through the website or the app.
The old funnel asked the user to choose discipline, then emirate, then language, then date — four screens before a single trainer card showed up. Mobile traffic, the bulk of sessions, dropped 67% before reaching trainer profiles. The trainers were the product, and they were three taps away from being seen.
“We have 500 trainers. Customers should see them before we ask them what they want.”
✱ § 02 · Our approach
Three bets, in order.
Surface trainers first, filter second.
Trainer cards on the landing page. Discipline + emirate as toggle pills above the grid. Filtering refines the visible set — it never blocks the page from rendering.
Three-tap booking on mobile.
Trainer card → date/time slot → confirm. The trainer detail (bio, certifications, reviews) opens as a sheet over the calendar — never a separate page that loses the user's place.
Trainer-side scheduling on a phone.
Trainers update availability from a mobile-native React Native app. Cancel-and-reschedule in two taps. No laptop ever required — Fitlov's trainers don't carry one.
✱ § 03 · Process · 14 weeks
From kickoff to shipped.
Wk 1–2
Discovery + customer interviews
Twelve customer interviews — 8 buyers, 4 trainers. Heatmaps on the existing funnel. Identified the pre-trainer drop-off as the single largest leak.
Wk 3–5
IA + design
Mapped 17 discipline taxonomy down to 6 parent categories with a 'see all' expand. Designed the trainer card pattern, the booking sheet, and the trainer-side scheduler.
Wk 6–10
Build · web + app
Next.js for the public marketplace, React Native for the trainer scheduler, Cal.com for the availability engine, Stripe for payments. Soft-launch in Dubai only at end of week 9.
Wk 11–12
Soft launch + measure
Dubai-only traffic for two weeks. Watched the booking-completion ratio per discipline, noticed that boxing/MMA trainers had 3x the inquiry rate but lower availability — added an 'request a time' fallback.
Wk 13–14
Full UAE cutover + trainer migration
Abu Dhabi and Sharjah live. Migrated 500+ trainer profiles from the old system, stripped duplicate listings, re-ran availability backfill.
✱ § 04 · Gallery · key screens
Selected screens.


✱ § 05 · Results · measured 6 months post-launch
What changed, in numbers.
- +312%
- Bookings
- −73%
- Pre-trainer drop-off
- 38%
- Repeat-trainer bookings
- 4.8★
- Avg post-session rating
YoY, 6 months post-launch
67% mobile drop → 18%
Up from 19% baseline
First 6 months, n=4,200
✱ § 07 · In their words
ChampX rebuilt the funnel around our trainers, not our taxonomy. Customers now see who's free before they're asked what they want.
Founder
Fitlov · Fitlov
✱ § 08 · Tech stack
What's running.
- Marketplace
- Next.js · Tailwind
- Trainer app
- React Native · Expo
- Scheduling
- Cal.com (self-hosted)
- Payments
- Stripe · Apple Pay · Tabby
- Communications
- WhatsApp Business API · Resend
- Hosting
- Vercel · AWS (app backend)
✱ § 09 · Team
Who built it.
- Affan Manzoor
- Project lead
- ChampX design
- Marketplace + app UI
- ChampX engineering
- Web + React Native
- ChampX ops
- Trainer migration + onboarding
✱ § 10 · Honesty section
What we’d do differently.
01 · Trainers don't update availability without a nudge
Assumed trainers would keep calendars current. They don't. Added a daily availability nudge via WhatsApp template — completion went from 31% to 78%.
02 · 40-language filter overwhelmed the picker
Listed every language a trainer spoke. Most users don't speak 38 of them. Collapsed to a search-as-you-type with the user's profile language pre-checked.
03 · Saved-trainer favourites should have shipped in v1
Repeat customers re-searched for the same trainer every week. A 'my trainers' shortcut would have lifted repeat-rate weeks earlier — added in v2.




