Skip to Content
Living documentation — last reviewed 2026-05-28
OverviewPersonas

Personas

The product is built for four personas: three external (Member, Coach, Studio Owner) and one internal (Platform Admin). Membership role enum is the source of truth — see libs/db/src/lib/schema/enums.ts: membershipRole (owner | admin | coach | member). “Platform Admin” is not a membership role; it’s a FitKit-employee role enforced through the apps/admin console.

Studio Owner and Coach often overlap in small operators — Danny-style PTs are simultaneously owner and coach. Roles are per-membership, not per-user, so the same user can be a member at gym A and an owner at gym B.


Member (gym client)

Membership role: member. Schema: libs/db/src/lib/schema/memberships.ts, libs/db/src/lib/schema/member-profiles.ts.

Profile

Adult fitness consumer: trains 2–5 times a week, follows a program (group classes or 1:1 coaching), pays a monthly subscription or class pack. In Israel, defaults to communicating on WhatsApp and prefers paying with Bit / credit card / horaot keva.

Jobs to be done

JobHow FitKit serves it todayFeature folder
Find a place to trainStudio minisite + lead capturefeatures/minisites/, features/leads-crm/
Buy a plan or class packPublic purchase flow, Israeli payment gatewaysfeatures/payments/, features/subscriptions-plans/
Sign waivers and health declarationsForms engine (FIT-176/158) — Hebrew signed PDFsfeatures/forms/
Book / cancel classesSchedule + bookings; waitlist + auto-promotefeatures/scheduling-bookings/
Get programmed workoutsDaily programming feed; assigned workouts in coaching gridfeatures/daily-programming/, features/workout-assignments/
Log results + PRsWorkout result entry; goal trackingfeatures/workout-results/, features/goals/
Track progressBody metrics, progress photosfeatures/body-metrics/, features/progress-photos/
Talk to coach1:1 messages; class/workout commentsfeatures/messages-comments/
Stay paidSubscription auto-renew; debt management; cancellation flowfeatures/payments/, features/subscriptions-plans/

Day in the life

  • Morning: PWA push notification (“Workout assigned: Wednesday strength”). Opens app, scans the workout, sees coach video for new movement.
  • Midday: Books the 18:00 class from /he/schedule. Already-booked sessions render with a check; full sessions go on a waitlist.
  • Evening: Arrives, coach scans QR check-in. After the session, member logs their score from the member workout view. Coach gets a fist-bump notification.
  • Sunday: Subscription renewal charges via Cardcom. Member gets an email receipt and (when push prefs allow it) a push notification.

Key screens

  • /[lang]/home — member home / dashboard.
  • /[lang]/schedule — week view, book/cancel.
  • /[lang]/program — assigned workouts (when in a coaching program).
  • /[lang]/profile — body metrics, goals, history, progress photos.
  • /[lang]/shop — class packs / drop-ins.

What blocks them today

  • Forms validation gap — signed PDFs work end-to-end but field-level validation lives in the form template, not in the renderer; some edge inputs (date pickers, multi-select) need polish.
  • WhatsApp — currently no WhatsApp notifications; everything is email or web push. The Twilio middleware integration is on the near-term roadmap.
  • Native mobile — PWA only. iOS push has limits compared to a real native client.

Spotter (AI coach) integration

Spotter Phase 1 is coach-only (see features/spotter-agent/). Members do not see it yet. Phase 2 brings a member-facing assistant for FAQ (“what time is open gym tomorrow?”, “what’s my current PR for back squat?”).


Coach (trainer / instructor)

Membership role: coach. Often also owner in small operators (Danny persona).

Profile

Working trainer at a studio or independent coach. Owns the relationship with 10–80 members. Cares about programming quality, attendance, retention, member progress. Doesn’t want to deal with billing or admin but has to.

Jobs to be done

JobHow FitKit serves itFeature folder
Build programs / workoutsWorkout builder, program templates, libraryfeatures/workouts/, features/program-templates/
Post daily WODDaily programming surfacefeatures/daily-programming/
Assign workouts to membersCoaching grid (cells with assignments)features/workout-assignments/
Track classes they teachSchedule, sessions, check-insfeatures/scheduling-bookings/
Review member progressMember profile, body metrics, PRs, historyfeatures/body-metrics/, features/workout-results/
Send check-in formsForms engine — recurring check-ins (FIT-183)features/forms/
Message members1:1 messages, workout comments, announcementsfeatures/messages-comments/, features/announcements/
Use AI to draft programsSpotter (Phase 1, coach-only)features/spotter-agent/

Day in the life

  • Morning: Reviews coaching grid for the week — drags last week’s pattern forward, edits one member’s load down because they reported soreness.
  • Class time: Marks attendance, leaves a comment on a member’s clean & jerk video.
  • Afternoon: Asks Spotter to draft a 4-week strength block for a new member; reviews and applies it as a program-template.
  • Evening: Sees a check-in form came back with concerning answers (“low energy 7 days in a row”) — opens a 1:1 thread.

Key screens

  • /[lang]/dashboard/workouts — workout library + builder.
  • /[lang]/dashboard/coaching-grid — per-member assignment grid.
  • /[lang]/dashboard/programs — program templates.
  • /[lang]/dashboard/schedule — sessions they teach.
  • /[lang]/dashboard/members/[id] — member profile.
  • /[lang]/dashboard/forms — check-in templates and instances.

What blocks them today

  • Coaching grid scale. Works well for 20–30 members; large rosters need virtualization improvements.
  • Spotter rate limits. Tier-based (apps/api/src/ai/agent/rate-limit.service.ts); coaches on Pro can hit the daily ceiling on heavy days.
  • No mobile-native coach app. PWA works; many coaches want a real iOS app at the gym floor.

Studio Owner / Admin

Membership role: owner (one per org) and admin (delegated). Schema: libs/db/src/lib/schema/organizations.ts, libs/db/src/lib/schema/memberships.ts.

Profile

Runs the business. Cares about ARPU, churn, capacity utilization, debt collection, staff payroll, compliance. Will move studios off Arbox only if FitKit demonstrably saves time and money in the first month.

Jobs to be done

JobHow FitKit serves itFeature folder
Onboard the orgOnboarding flow (org → legal acceptance → first members)features/onboarding/
Build plans + pricingPlans + pricing config (subscription, class pack, drop-in, course)features/subscriptions-plans/
Invite staff and membersInvitations (Clerk-backed)features/users-auth/
Configure paymentsPayment provider configs (Cardcom, Morning, iCredit, etc.)features/payments/
Import from ArboxCSV / Arbox importerfeatures/exports-imports/
Manage leadsLead pipeline (minisite + manual)features/leads-crm/
Build minisiteMinisite editor + publishfeatures/minisites/
Run scheduleClass types, sessions, bulk session actions, location configfeatures/class-types/, features/scheduling-bookings/, features/locations/
Watch the businessDashboard overview, insights widgetsfeatures/analytics/, features/insights/
Collect debtDebt status on memberships; cancellation review tasksfeatures/payments/, features/memberships/
Stay compliantCompliance forms — Hebrew signed PDFs (Israeli Sports Promotion Law, FIT-158)features/forms/, features/legal/

Day in the life

  • Morning: Opens dashboard overview. Three new lead notifications from the minisite; two members past-due; one cancellation request to review.
  • Mid-morning: Approves a member-initiated immediate-cancel-with-refund (Cardcom auto-refund, no manual task needed).
  • Afternoon: New class type for “Open Gym Saturday” — 10 instances published in one bulk action.
  • End of day: Reviews coach activity, exports a CSV of members for an SMS campaign.

Key screens

  • /[lang]/dashboard/overview — KPIs, getting-started checklist (new orgs).
  • /[lang]/dashboard/members — full roster.
  • /[lang]/dashboard/plans — pricing config.
  • /[lang]/dashboard/payments — transactions, debt, payouts.
  • /[lang]/dashboard/leads — pipeline.
  • /[lang]/dashboard/minisite — public page editor.
  • /[lang]/dashboard/settings — org config, payment providers, integrations.

What blocks them today

  • No analytics dashboard v1. Insights widgets exist; full reporting (cohort, churn forecast) is on the near-term roadmap.
  • No audit log surfaced in UI. FIT-20 — audit log table exists (auditLogs in libs/db/src/lib/schema/admin.ts) but the UI isn’t wired up. Trust-signal gap for new paying customers.
  • WhatsApp campaigns. Not yet — owner has to export and use an external tool.
  • Manual Arbox migration. Importer exists; full Arbox migration tool with mapping UI is later.

Platform Admin (FitKit team)

Not a membership role. Lives in apps/admin (Vite/React, Clerk-protected, internal). API surface is under apps/api/src/admin/.

Profile

You. Support, billing reconciliation, incident triage, manual data fixes, platform observability.

Jobs to be done

JobHow servedWhere it lives
Look up an org or userAdmin org/user explorerapps/admin/src/pages/
Change a platform tierAdmin tier-management endpointapps/api/src/admin/ + apps/api/src/platform-tiers/
Reconcile a Cardcom paymentPayment investigation toolsapps/admin/, apps/api/src/payments/
Watch system healthBull-Board, Sentry, PostHogapps/api/src/bull-board/, observability stack
Manually retry a failed billing cycleTest/admin endpointapps/api/src/admin/
Audit accessaudit_logs table (FIT-20 — table only, no full UI yet)libs/db/src/lib/schema/admin.ts

Key tools

  • apps/admin — internal-only admin UI (not deployed to customer domains).
  • apps/api/src/bull-board/ — BullMQ job dashboard (gated).
  • Sentry dashboards (one project per app — see architecture/observability.md).
  • PostHog dashboards — funnel + cost dashboards.
  • Drizzle Studio (pnpm db:studio) for direct DB inspection when needed.

What blocks them today

  • Audit log surfacing. Schema exists; admin UI for browsing it isn’t built. Highest-impact next admin work.
  • Cross-org reporting. Admin cost/usage dashboards exist (Neon, Railway, PostHog integrations) but per-org observability is shallow.
  • Impersonation. No first-class “log in as customer” flow — currently relies on Clerk dashboard tooling.

Spotter integration per persona (current state)

PersonaSpotter accessNotes
MemberNonePhase 2 will add a member-facing assistant
CoachYes (Phase 1)Tier-gated; uses aiConversations etc. in libs/db/src/lib/schema/agent.ts
Owner/AdminYes (Phase 1)Same access as Coach today
Platform AdminRead-only observabilityPer-turn cost, cache hit ratio surfaced via PostHog