FitProTracker Β· from "I just bought a membership" to booked & on the floor Β· updated 2026-07-24 Β· reconciled 2026-07-27
β± ~2-min read Β· expand sections for detail + code
The moment a member says "yes"
β Today β where members drop off
Purchaseβ"confirm" emailβset password on iliv.fit (web)βfind + download appβlog in againβbook
web-first Β· a password to invent Β· a confirm token that expires fast (~24h) β and our own top public complaint: branded-portal 404s / login confusion.
β Proposed β one clean path
Purchaseβenter texted code (autofills)βbook 1st classβon the floor <2 min
SMS-first from the gym's own number Β· passwordless Β· goal = native app, web is the no-lose fallback Β· in-app / kiosk-QR check-in. Waiver + any gym to-dos ride along as in-app checklist items (below), never a gate.
The experience we're building
Purchase β in the app, booked β on the floor
π
Purchase
online or at the desk
π
Activate
texted code Β· autofills Β· no password
π
Book 1st class
pick a time
β
Check in
in-app / kiosk-QR
β Cleared for the floor in under 2 minutes β no password, no install wall
Waiver & gym to-dos = an in-app checklist, not a gate. Only if the gym enables it, the Digital Documents waiver (and any other required forms) surface as checklist items in the app β a tappable link, due before the first workout β not a blocking step in activation or booking. Gyms that don't require a waiver never see it. This reuses the onboarding-checklist model rather than wedging a hard stop into the happy path.
How they activate: SMS-first. A code texted from the gym's own number (autofills on the
member's phone) β no password, and the sender is already the gym, so this leg is branded for free. Email is the
fallback + the receipt/agreement. We already send onboarding SMS today, so it's a channel we're using, not new plumbing.
The ask
Greenlight Phase 0 β the web + backend + config changes that retire the old iliv.fit portal and move
clients onto the PWA already deployed at mobile.fitprotracker.com. No app-store release required.
Native hand-off (Phase 1) and the passwordless / deferred-deep-link polish (Phase 2) follow as separate, later steps.
North star: best-in-class, frictionless. Remove every friction we control β password,
the web detour, typing the code (it autofills), fast-expiring confirm tokens (~24h), re-logins, branding leaks, long SMS links. The
frictionless path: a new member is texted a code from the gym's number, it autofills, they're
booked in seconds β zero install, zero password. The goal is the native app (branded, push,
home screen) β fitpro.io/a drives every member to the right one β and we lead hard with it. The
web is the no-lose fallback (runtime-skinned per gym) that catches anyone who doesn't install, so we never
trade a new member away to an install wall. Lead with the app; never hard-gate.
How re-login works (no password to forget). First activation and every later login use the same
move: enter phone or email β get a texted code β in. On a trusted device, biometric (Face ID /
fingerprint) opens the app instantly. There is no password step. Reality check (code, 2026-07-29): today
login is password-based and the code endpoints are reset-only β so this needs a code-based login
endpoint (Phase-2 G1, now promoted), reusing the existing 6-digit recovery plumbing, with biometric unlocking a
refresh token rather than a stored password. This is the exact "get a code β logged in" model the team landed on independently.
β Apple App Store β validated (code review 2026-07-27). The app is login/activation-only
β the account is created at the sale (backend); the app just activates it β so it clears Apple's account-creation
guideline (5.1.1), and it already ships in-app account deletion. No in-app purchase, and the Resources content isn't
purchasable (low 3.1.1 risk). The SMS-OTP redesign preserves this posture β no new Apple risk. Details in the WIP tracker.
Why now
Onboarding is web-first & clunky β confirm + password happen on the iliv.fit website before the app; reads as a detour.
The confirm token expires fast (~24h, ASP.NET Identity default) β miss the window and the link dies (the concern Christian raised; code-validated 2026-07-29 β it is not 10 days, it's tighter).
It's our own top complaint β public reviews cite "branded-portal 404 errors, credential resets, or domain confusion." The fix below targets exactly that. (receipts β Competitor research, footer)
What we ship β 3 phases
Phase 0 Β· Retire iliv.fit β PWAno store release
Web + backend + config. Flip one setting so all client links point at mobile.fitprotracker.com; the PWA (same app codebase) becomes the single client surface. This is the greenlight ask.
Phase 1 Β· Native app hand-off1 store release Γ7 brands
Universal / app links so a tapped link opens the branded native app directly (no browser). Purely an upgrade over Phase 0 β the PWA already works.
Phase 2 Β· Passwordless + deferred deep linkserver-only Β· later
One-tap passwordless activation + "install and the app already knows you." Ships from the server; the app hook rides dark in the Phase 1 release, so no extra store cycle.
Rough effort (1β2 devs, backend + mobile): Phase 0 ~1.5 wk (no store β reaches everyone
instantly) Β· Phase 1 ~1 wk + store review Β· Phase 2 lean ~1.5β2 wk + store review.
Core total β 4β5 dev-weeks β down from ~6β8 after deferring Wallet pass + runtime theming (~2β3 wk parked,
available later). Store review + client-update adoption is a separate calendar tail on Phases 1β2; Phase 0 has none.
The 8-item Phase 0 scope the concrete change list
#
Change
Size
1
Flip ClientAppDomain β mobile.fitprotracker.com + CORS
β£ /r/:code redirect β resolve the full register URL and forward (~15 lines). Email β repoint the one code-driven notice to the existing Cloudinary logo + drop the *.iliv.fit CORS entry.
Every file + before/after β Full build spec (footer).
How activation works β the full flow SMS-first Β· app-first for everyone (smart link routes to the right app)
One codebase ships the default Fit Pro Tracker app, each tenant's branded app (same code, their theme), and the PWA. Every new member gets a text from the gym's own number with a short fitpro.io link + code. Goal: land them in the native app β the web is the no-lose fallback.
π± Primary β the native app
fitpro.io/a/{code} auto-routes to the right app for that gym β their branded app if they bought it, else the default FPT app (device-aware β already built)
Install β open β texted code autofills β in
Branded Β· push Β· home screen β the goal for everyone
π Fallback β the PWA
Didn't install / on desktop β land on the PWA (or the app opens directly if already installed β no flash)
Both paths β book 1st class β in-app / kiosk-QR check-in Β· waiver/to-dos as in-app checklist (if enabled) Β· nudge web users to install
Short links = fewer SMS credits + open tracking. Today the Digital Documents waiver
texts the full doc.fitprotracker.com/document/b/{long-token} (~90 chars β 2β3 SMS segments = 2β3Γ cost
per message). Add a document route to the existing fitpro.io shortener (e.g. fitpro.io/d/{code} β
note /f is the legacy forms route, so this is a new route on the same service) β back to ~1 segment
(~50β66% SMS-cost cut). Bonus: shortener links are tracked β open/click analytics
per member (who tapped the waiver / download link, resend to non-openers, measure activation drop-off), which the raw
doc.fitprotracker.com link doesn't give you.
What's already built β how little is net-new mostly wiring existing parts
/a/{code} β device-aware, per-brand store router
β built Β· already in the Welcome email
Onboarding SMS from the gym's number
β sent today
Mobile OTP / recovery-code flow (GenerateCode / ResetPasswordMobile)
β exists
Branded native apps (per gym)
β built
Digital Documents waiver signing
β built (served from doc.fitprotracker.com)
App first-open "enter your code" screen
β small new bit
Document short-link route (fitpro.io/d/{code}) to shrink SMS
β new route on the existing shortener
SMS leads with fitpro.io/a for everyone (auto-routes to the right app)
β small config
The app-first path is mostly connecting fitpro.io/a + the onboarding SMS + mobile OTP, with the branded apps you already ship. The two β new routes are small additions to services that already exist.
Branded apps + repos touched scope of the blast radius
~7 white-label apps (FPT, Fit Body Boot Camp, EveryBody Boot Camp, Enclave, Ladies Boutique, Uplift Revival, fitprotrackerteam) all share one backend + one confirm domain today β so this stays a one-domain migration. Branding only touches Phase 1: the app-link files list all ~7 app IDs, and each app needs a store release for the entitlement.
3 repos:FitProTracker (backend β config + 1 email + CORS) Β· FitProTracker.Mobile (the app β the real code) Β· FitProTracker.Front-Office (4 iliv.fit links in help text).
Not touched: the database.
Why this wins β competitors & the gold standard what the market left on the table
The whole market (Mindbody, Glofox, Trainerize, Vagaro, Zen Planner, Wodify, Mariana Tek, Walla, Xplorβ¦) ships the same flow β gym creates account β email invite β set a password β install the app β and "clients can't log in" is the universal complaint. Branded apps are now table stakes; not one offers passwordless first access.
Our four wedges:
#
Wedge
Beatsβ¦
1
Passwordless activation that just works
the #1 complaint (password / invite-email trap)
2
Guaranteed session persistence + biometric
the #2 complaint ("keeps logging me out")
3
Instant activation, no install gate
the ~33% signup loss from install-first funnels
4
Waiver as an in-app checklist to-do (Digital Documents, if enabled) + in-app / kiosk-QR check-in
liability handled before the first workout without gating signup; no scanner hardware needed (Wallet deferred)
Three of the four are already on this roadmap; with Wallet check-in deferred, the net-new work is minimal. Full breakdown + sources β Competitor research (footer).