Workout Player UX Specification
Reference: Cult.fit workout player (April 2026 screenshots)
Design Philosophy
The workout player is the single most-used screen in the member app. A gym member opens it every session (3-5x/week), stares at it between sets, and judges the entire app by how this screen feels. It must be:
- Immersive — full-screen, dark, distraction-free
- Glanceable — reps, weight, and set count readable at arm’s length (phone on gym bench)
- Minimal taps — log a set in 1 tap, skip to next exercise in 1 swipe
- Content-rich — show HOW to do the exercise (video/animation), not just what to do
Screen 1: Workout Plan Overview
Purpose: Show today’s workout plan, track weekly progress, browse exercises.
Layout
┌─────────────────────────────────────┐
│ ← My Workout Plan ⚙ │
│ Gain Muscle • Advanced • 6 Days │
├─────────────────────────────────────┤
│ 🟢 🟢 🟢 ○ ○ ○ ● │
│ 26 27 28 29 30 31 1 │
│ THU FRI SAT SUN MON TUE WED │
├─────────────────────────────────────┤
│ │
│ Legs COMPLETED │
│ │
│ Warm Up 13 MINS + ∨ │
│ ─────────────────────────────────── │
│ Workout 40 MINS + ∧ │
│ │
│ SUPERSET: Follow sequence │
│ │
│ ┌─────┐ Barbell Deadlift ⋮ │
│ │ img │ 12×50 • 12×80 • 12×110 │
│ └─────┘ │
│ │
│ ┌─────┐ Barbell Glute Bridge ⋮ │
│ │ img │ 12×50 • 12×70 • 12×80 │
│ └─────┘ │
│ │
│ ┌─────┐ Leg Press ⋮ │
│ │ img │ 12×150 • 10×210 • ... │
│ └─────┘ │
│ │
├─────────────────────────────────────┤
│ REDO │ VIEW REPORT │
└─────────────────────────────────────┘
Key Design Details
| Element | Spec |
|---|---|
| Background | Pure black (#000000) or near-black (#0A0A0F) |
| Calendar strip | Horizontal scroll, 7 days visible. Green dot = completed. Current day = bold underline. Dimmed = rest day. |
| Workout title | Bold, large (24-28sp), left-aligned. “Legs”, “Push”, “Pull”, etc. |
| Completion badge | Pill shape, green background (#00C853), white text, “COMPLETED” |
| Section headers | ”Warm Up” / “Workout” — collapsible with duration and + button to add exercise |
| Superset label | Italic, accent color (green/ember), indicates exercises to be done in sequence |
| Exercise card | Thumbnail (80×80dp, rounded 8dp) + exercise name (16sp, bold) + set summary (14sp, subdued). Three-dot menu for options. |
| Set summary | ”12 Reps x 50 Kg • 12 Reps x 80 Kg • 12 Reps x 110 Kg” — comma/bullet separated, light gray |
| Bottom bar | Two buttons: REDO (filled dark gray) and VIEW REPORT (outlined, accent color) |
Interactions
- Tap exercise card → Opens Exercise Active View (Screen 2)
- Long press exercise card → Reorder (drag handle appears)
- Three-dot menu → Replace exercise, Remove, Add note, View history
- Swipe calendar → Navigate to other days
- Tap green dot → View that day’s completed workout
- Tap + on section → Add exercise from library
- Pull to refresh → Sync latest plan from server
Screen 2: Exercise Active View (The Player)
Purpose: Full-screen exercise player. Shows demo video/animation with overlay controls. This is where the member spends most time.
Layout
┌─────────────────────────────────────┐
│ ← │
│ │
│ SET 1 OF 3 │
│ Barbell Deadlift │
│ │
│ │
│ ┌───────────────────────┐ │
│ │ │ │
│ │ VIDEO / ANIMATION │ │
│ │ (full-screen │ │
│ │ background, │ │
│ │ looping) │ │
│ │ │ │
│ │ │ │
│ └───────────────────────┘ │
│ │
│ 12 × 50 │
│ REPS KG │
│ │
│ (✏) (↕) (▶) │
│ Log Replace Tutorial │
│ │
├─────────────────────────────────────┤
│ ┌───┐ Next Up ⏭ │
│ │img│ Barbell Glute Bridge │
│ └───┘ │
└─────────────────────────────────────┘
Key Design Details
| Element | Spec |
|---|---|
| Background | Exercise video/GIF playing full-screen, slightly dimmed (overlay with 20% black gradient at top and bottom for text readability) |
| Set counter | ”SET 1 OF 3” — small caps, accent color (green #00C853), 14sp, centered |
| Exercise name | Large (28-32sp), bold, white, centered, drop shadow for readability over video |
| Reps × Weight | HERO element. Massive font (64-72sp), bold, white. “12 × 50” with “REPS” and “KG” labels below (12sp, gray) |
| Action buttons | Three circular buttons (56dp diameter), frosted glass effect (backdrop-blur, 30% white bg). Icon + label below. |
| Log button | Pencil icon → Opens set logging sheet (weight, reps, RPE) |
| Replace button | Swap icon → Opens exercise search/filter to swap this exercise |
| Tutorial button | Camera/video icon → Opens 3D tutorial view or detailed video |
| Next Up bar | Bottom card, dark gray (#1A1A24), shows thumbnail + “Next Up” label + exercise name + skip (⏭) button |
| Back button | Simple ← arrow, top-left, semi-transparent |
Gestures
| Gesture | Action |
|---|---|
| Tap anywhere on video | Toggle play/pause (subtle pause icon flashes) |
| Swipe left | Skip to next exercise |
| Swipe right | Go to previous exercise |
| Swipe up on “Next Up” bar | Expand to see full exercise queue |
| Tap reps/weight | Edit inline (number picker wheel) |
| Double-tap reps | +1 rep |
| Double-tap weight | +2.5 kg |
| Long press video | Toggle slow motion (0.5x) |
Set Completion Flow
1. Member finishes a set
2. Taps "Log" button
3. Bottom sheet slides up:
┌─────────────────────────────────┐
│ Set 1 of 3 │
│ │
│ Weight: [ 50 ] kg ±2.5 │
│ Reps: [ 12 ] ±1 │
│ RPE: ○○○○○○●○○○ (7/10) │
│ │
│ [ LOG SET ] (green, full-w) │
│ │
│ Rest Timer: 01:30 ▶ │
└─────────────────────────────────┘
4. Tap "LOG SET" → set logged, rest timer auto-starts
5. Rest timer counts down with subtle animation
6. When timer ends, vibrate + show "SET 2 OF 3" with updated weight/reps
7. After all 3 sets logged → auto-advance to next exercise
Screen 3: Muscle Map Overlay
Purpose: Show which muscles are being targeted by the current exercise. Educational + engaging.
Layout
Same as Exercise Active View (Screen 2), but with an anatomical overlay:
┌─────────────────────────────────────┐
│ │
│ SET 1 OF 3 │
│ Barbell Deadlift │
│ │
│ ┌───────────────────────┐ │
│ │ │ │
│ │ VIDEO plays behind │ │
│ │ │ │
│ │ ╔═══════════╗ │ │
│ │ ║ ANATOMY ║ │ │
│ │ ║ OVERLAY ║ │ │
│ │ ║ ║ │ │
│ │ ║ Glutes ██ ║ ← cyan│ │
│ │ ║ Hams ██ ║ ← cyan│ │
│ │ ║ ║ │ │
│ │ ╚═══════════╝ │ │
│ │ │ │
│ └───────────────────────┘ │
│ │
│ 12 × 50 │
│ REPS KG │
└─────────────────────────────────────┘
How to Build This
Approach: SVG-based muscle map with programmatic highlighting
- Create/source two SVG body diagrams: Front view + Back view (posterior)
- Each muscle group is a separate SVG path with an ID:
#trapezius,#deltoid-anterior,#biceps,#quadriceps,#glutes,#hamstrings, etc. - Exercise metadata includes target muscles:
{ primary: ["glutes", "hamstrings"], secondary: ["quadriceps", "lower-back"] } - Rendering: Primary muscles = cyan (#00E5FF) at 80% opacity. Secondary muscles = cyan at 40% opacity.
- Overlay mode: The SVG anatomy figure is rendered semi-transparent (50% opacity) over the exercise video. It aligns to the performer’s body position.
Content source for SVG muscle maps:
- MuscleWiki approach: Create custom SVG body outlines with ~20 muscle group regions
- Free anatomy SVGs: Available from medical/anatomy open source projects (e.g., OpenStax Anatomy, Wikimedia Commons anatomy diagrams)
- Flutter package:
flutter_svgrenders SVG natively. Build aMuscleMapWidgetthat accepts a list of target muscles and highlights them
Data model:
{
"exercise_id": "barbell-deadlift",
"name": "Barbell Deadlift",
"muscles": {
"primary": ["glutes", "hamstrings", "erector-spinae"],
"secondary": ["quadriceps", "trapezius", "forearms"]
},
"view": "posterior" // which body view to show
}
Toggle: User can tap a “Muscles” button to toggle the overlay on/off. It animates in with a fade (300ms).
Screen 4: 3D Tutorial Animation
Purpose: Cinematic 3D animation showing perfect exercise form from multiple angles. The “wow” feature.
What Cult.fit Does
- Pre-rendered 3D character animations for each exercise
- Cinematic gym environment with dramatic lighting
- Character performs the full range of motion
- Camera orbits around the character
- This is essentially a small 3D movie clip per exercise
Cost Reality
Cult.fit likely invested Rs 50L-1Cr+ in producing their 3D exercise library (1,200+ exercises). Each animation requires:
- 3D character rigging
- Motion capture or manual animation
- Environment design
- Rendering
- Estimated cost: Rs 5,000-15,000 per exercise animation at Indian studio rates
This is NOT an MVP feature. It’s a Phase 3 differentiator.
Phased Content Strategy
Phase 1 (MVP): GIF-Based Exercise Demos
Source: ExerciseDB API (https://exercisedb.io)
- 1,300+ exercises with high-quality GIF animations
- Real humans performing exercises (not 3D)
- Searchable by body part, target muscle, equipment
- API access via RapidAPI (free tier: 100 req/day)
- GIF format = auto-looping, no play controls needed
- License: Check ExerciseDB terms for commercial use
Alternative: Wger Exercise Database
- Open source (AGPL-3.0)
- 400+ exercises with descriptions
- Muscle group metadata
- Some images (CC-BY-SA)
- Self-hostable API
How it looks in the app:
- Instead of a video background, show the GIF looping full-screen
- Same overlay UI (set counter, reps, weight, action buttons)
- GIF auto-plays, no buffering, works offline (downloaded during plan sync)
- Slightly lower production value than Cult.fit’s videos, but functional and clean
Download strategy:
- When a workout plan is assigned to a member, pre-download all exercise GIFs
- Store in local app cache (Hive/Isar)
- Total size per workout: ~20-50MB (GIFs are small, ~200-500KB each)
- Lazy-load on first view, then cached permanently
Phase 2: Recorded Video Demos
Create original content at Pro Fitness:
- Film Shubham (head trainer) performing 200-300 key exercises
- Equipment needed: smartphone + ring light + tripod (Rs 5,000 total)
- Film at Pro Fitness gym (authentic setting, your own branding)
- 15-30 second clips per exercise, 2 angles (front + side)
- Edit with CapCut/DaVinci Resolve (free)
- Upload to Cloudflare R2, serve via CDN
- Estimated time: 3-4 full shooting days
- This content is YOUR moat — original, branded, authentic
Video specs:
- Resolution: 1080×1920 (vertical, matches phone)
- Format: MP4 (H.264) for playback, WebM for web
- Duration: 15-30 seconds, seamless loop point
- File size: 2-5MB per video
- Background: clean gym setting, good lighting, no distracting elements
Phase 3: 3D Animations + Muscle Overlays
Options for 3D content:
-
Mixamo (Adobe) — Free 3D character animations
- Provides pre-rigged 3D characters
- Has some exercise/movement animations
- Can be rendered as video clips using Blender (free)
- License: free for commercial use
- Limitation: limited exercise-specific animations (more suited for generic movements)
-
Commission from Indian 3D studios
- Studios in Bangalore, Hyderabad, Mumbai offer animation services
- Budget: Rs 3,000-10,000 per exercise (negotiable for bulk)
- Start with top 50 most-used exercises
- Total: Rs 1.5L-5L for 50 exercises
- Timeline: 2-3 months
-
AI-Generated Exercise Animations (emerging)
- Tools like Move.ai, Rokoko, DeepMotion can generate 3D animations from 2D video
- Film Shubham doing exercises (Phase 2 videos) → convert to 3D animation
- Quality is improving rapidly; by Phase 3 timeline (Month 10-18), this may be viable
- Cost: software subscription ($50-200/month)
-
Partner with a content provider
- Les Mills, ACE, NASM have exercise content libraries
- Licensing deals are possible but expensive
- Better suited for post-Series A when budget allows
Screen 5: Rest Timer
Purpose: Between sets, show a countdown timer with motivational elements.
Layout
┌─────────────────────────────────────┐
│ │
│ REST │
│ │
│ ╔═══════╗ │
│ ║ ║ │
│ ║ 1:24 ║ ← countdown │
│ ║ ║ │
│ ╚═══════╝ │
│ ───────────○────────── │
│ (circular progress ring) │
│ │
│ Set 1 ✓ Set 2 ✓ Set 3 ○ │
│ │
│ +30s SKIP │
│ │
├─────────────────────────────────────┤
│ ┌───┐ Next Up ⏭ │
│ │img│ Barbell Glute Bridge │
│ └───┘ │
└─────────────────────────────────────┘
Details
| Element | Spec |
|---|---|
| Timer display | Large (72sp), monospace font, white on black |
| Progress ring | Circular, accent color (green), animates smoothly |
| Set progress | Dots/checkmarks showing completed sets |
| +30s button | Extends rest time |
| SKIP button | Skips rest, goes to next set immediately |
| Vibration | Haptic feedback when timer hits 0 |
| Sound | Optional subtle chime at 0 (user can disable) |
| Background | Can show fun stats: “You’ve lifted 1,200 kg today!” or tips: “Keep your core tight on the next set” |
Content Sourcing: Summary Decision
| Phase | Content Type | Source | Cost | Quality |
|---|---|---|---|---|
| Phase 1 (MVP) | GIF animations | ExerciseDB API (1,300+ exercises) | Free-$30/mo (API plan) | Good (real humans, clear form) |
| Phase 1 (MVP) | Muscle maps | Custom SVG (20 muscle groups, front+back) | Rs 10K-20K (designer creates once) | Good |
| Phase 1 (MVP) | Exercise text | Wger open-source database (400+ exercises) | Free | Good (descriptions, tips) |
| Phase 2 | Video demos | Film at Pro Fitness with Shubham | Rs 5K (equipment) + time | Great (authentic, branded) |
| Phase 2 | Muscle overlays | SVG overlaid on video (programmatic) | Dev time only | Great |
| Phase 3 | 3D animations | Commission from Indian 3D studio | Rs 1.5-5L for 50 exercises | Premium |
| Phase 3 | AI-generated 3D | Convert Phase 2 videos via Move.ai/DeepMotion | $50-200/mo | Premium (improving rapidly) |
| Long-term | Full video library | Original production (1,000+ exercises) | Rs 10-25L | Cult.fit parity |
Diet Plan Screens
Diet Plan Overview
┌─────────────────────────────────────┐
│ ← My Diet Plan ⚙ │
│ Weight Loss • 1800 kcal/day │
├─────────────────────────────────────┤
│ 🟢 🟢 ● ○ ○ ○ ○ │
│ MON TUE WED THU FRI SAT SUN │
├─────────────────────────────────────┤
│ │
│ Today's Macros 1800 kcal │
│ ████████████░░░░ 72% consumed │
│ │
│ Protein Carbs Fat │
│ 120g 180g 60g │
│ ████░░ ██████░ ████░ │
│ 85/120 145/180 48/60 │
│ │
├─────────────────────────────────────┤
│ │
│ 🌅 Breakfast 7:00 AM │
│ ┌─────────────────────────────────┐ │
│ │ Oats with milk + banana │ │
│ │ 320 kcal • P: 12g C: 55g F: 8g │ │
│ │ ☑ Eaten │ │
│ └─────────────────────────────────┘ │
│ │
│ 🌞 Mid-Morning Snack 10:00 AM │
│ ┌─────────────────────────────────┐ │
│ │ Paneer tikka (100g) + green tea │ │
│ │ 220 kcal • P: 18g C: 5g F: 15g │ │
│ │ ☐ Log │ │
│ └─────────────────────────────────┘ │
│ │
│ 🍛 Lunch 1:00 PM │
│ ┌─────────────────────────────────┐ │
│ │ Dal + 2 Roti + Sabzi + Salad │ │
│ │ 480 kcal • P: 22g C: 65g F: 12g│ │
│ │ ☐ Log │ │
│ └─────────────────────────────────┘ │
│ │
│ 🌅 Evening Snack 5:00 PM │
│ │ Sprouts chaat + buttermilk │ │
│ │
│ 🌙 Dinner 8:00 PM │
│ │ Grilled chicken + rice + raita │ │
│ │
│ 🥛 Post-Dinner 9:30 PM │
│ │ Warm milk with turmeric │ │
│ │
└─────────────────────────────────────┘
Key Diet Features
- Indian cuisine focus: Dal-roti, poha, idli, upma, paneer, chicken curry — NOT Western foods
- Macro tracking: Simple progress bars for protein/carbs/fat
- Meal check-off: Tap to mark as eaten (simple accountability)
- Calorie budget: Clear daily target with progress ring
- Meal timing: Shows suggested times
- Swap meals: Tap to see alternatives (e.g., swap paneer tikka for boiled eggs)
- Vegetarian/non-veg toggle: Trainer sets this per member
Diet Content for MVP
Pre-built templates (20-30 plans):
| Category | Plans | Example |
|---|---|---|
| Weight loss (veg) | 3 calorie levels (1200, 1500, 1800 kcal) | Dal-roti based, high protein |
| Weight loss (non-veg) | 3 calorie levels | Chicken/fish/egg based |
| Muscle gain (veg) | 3 calorie levels (2200, 2500, 2800 kcal) | Paneer, soy, whey focused |
| Muscle gain (non-veg) | 3 calorie levels | Chicken breast, eggs, fish |
| Maintenance (veg/non-veg) | 4 plans | Balanced macros |
| Diabetic-friendly | 2 plans | Low GI, controlled carbs |
| PCOS-friendly | 2 plans | Anti-inflammatory, hormone-balancing |
| Post-pregnancy | 2 plans | Nutrient-dense, recovery-focused |
Data source: Build manually with a certified nutritionist. Cost: Rs 15,000-25,000 for a nutritionist to create 20-30 detailed plans with 7-day meal schedules, grocery lists, and macro breakdowns. This is a one-time cost.
Phase 2: AI-generated diet plans using Claude API — input member’s goals, weight, dietary preferences, regional cuisine preference → generate personalized 7-day plan. Cost: ~Rs 2-3 per plan generation (API cost).
Flutter Widget Architecture
Workout Player Widget Tree
WorkoutPlayerScreen
├── Stack (full-screen)
│ ├── ExerciseMediaBackground
│ │ ├── CachedNetworkImage (for GIFs) — Phase 1
│ │ ├── VideoPlayer (for mp4) — Phase 2
│ │ └── Three3DViewer (for 3D) — Phase 3
│ ├── GradientOverlay (top + bottom fade to black)
│ ├── Positioned (top)
│ │ ├── BackButton
│ │ ├── SetCounter ("SET 1 OF 3")
│ │ └── ExerciseName
│ ├── Positioned (center-bottom)
│ │ ├── RepsWeightDisplay (hero text)
│ │ └── ActionButtons (Log, Replace, Tutorial)
│ ├── MuscleMapOverlay (conditional, SVG-based)
│ │ ├── SvgPicture.asset('body_front.svg')
│ │ └── Highlighted muscle paths (cyan)
│ └── Positioned (bottom)
│ └── NextUpBar (thumbnail + name + skip)
├── AnimatedSwitcher (for exercise transitions)
└── SetLogBottomSheet (slides up on "Log" tap)
├── WeightPicker (scrollable number picker)
├── RepsPicker
├── RPESlider
├── LogSetButton
└── RestTimerWidget (auto-starts after logging)
Key Flutter Packages for Workout Player
| Package | Purpose |
|---|---|
cached_network_image | Load/cache exercise GIFs from CDN |
video_player + chewie | Play exercise video demos (Phase 2) |
flutter_svg | Render muscle map SVG overlays |
lottie | Animated micro-interactions (set completion, streak) |
numberpicker or flutter_spinbox | Weight and reps selection |
circular_countdown_timer | Rest timer between sets |
haptic_feedback (built-in) | Vibrate on timer completion, set logging |
audioplayers | Optional chime sounds |
shimmer | Loading state for images/GIFs |
smooth_page_indicator | Set progress dots |
Design System for Workout Screens
Colors (Dark Theme)
| Token | Value | Usage |
|---|---|---|
background | #000000 | Full-screen player background |
surface | #0A0A0F | Cards, bottom sheets |
surface-elevated | #1A1A24 | Next Up bar, action buttons |
text-primary | #FFFFFF | Exercise name, reps, weight |
text-secondary | #8A8A9A | Labels (“REPS”, “KG”), timestamps |
accent | #00C853 | Set counter, completion badges, progress |
accent-cyan | #00E5FF | Muscle map highlights (primary muscles) |
accent-cyan-dim | #00E5FF66 | Muscle map (secondary muscles, 40% opacity) |
danger | #FF4D2A | Warnings, overdue items |
glass | #FFFFFF1A | Frosted glass buttons (10% white) |
glass-border | #FFFFFF33 | Button borders (20% white) |
Typography
| Style | Font | Size | Weight | Usage |
|---|---|---|---|---|
| Hero | System/DM Sans | 64-72sp | ExtraBold | Reps × Weight display |
| Title | Oswald | 28-32sp | Bold | Exercise name |
| Subtitle | DM Sans | 14sp | SemiBold | Set counter, section headers |
| Body | DM Sans | 16sp | Regular | Descriptions, set summaries |
| Caption | DM Sans | 12sp | Regular | Labels (“REPS”, “KG”, timestamps) |
| Button | Oswald | 14sp | SemiBold | Action button labels |
Animations
| Animation | Duration | Curve | Trigger |
|---|---|---|---|
| Exercise transition | 400ms | easeInOutCubic | Swipe left/right |
| Set completion | 600ms | bounceOut | Log set tapped |
| Muscle map fade-in | 300ms | easeOut | Toggle muscles |
| Rest timer pulse | 1000ms | linear | Every second (subtle scale pulse) |
| Next Up bar slide | 300ms | easeOutCubic | New exercise queued |
| Bottom sheet | 350ms | easeOutQuart | Log button tapped |
| Reps/weight change | 200ms | easeInOut | Number picker scroll |
Summary: What to Build When
MVP (Month 1-5)
- Workout Plan Overview screen (exercise list, calendar, sections)
- Exercise Active View with GIF background (ExerciseDB)
- Set logging bottom sheet (weight, reps, log button)
- Rest timer (countdown, +30s, skip)
- No muscle map overlay
- No 3D animations
- No video — GIFs only
Phase 2 (Month 6-9)
- Add original video demos (filmed at Pro Fitness)
- Add SVG muscle map overlay (toggle on/off)
- Add diet plan screens with macro tracking
- Improve animations and transitions
Phase 3 (Month 10-18)
- Commission 3D exercise animations (top 50 exercises)
- AI-generated diet plans (Claude API)
- Wearable integration (heart rate during sets via Terra API)
- Community challenges and leaderboards
Additional Core Screens
Reference: Cult.fit app screenshots (April 2026)
Screen 6: Home Screen
Purpose: App landing page. Quick actions, streaks, engagement hooks.
┌─────────────────────────────────────┐
│ (avatar) 🔥 12 day streak 🔔 │
├─────────────────────────────────────┤
│ │
│ ┌──────────────┬──────────────┐ │
│ │ Hero Banner │ Banner 2 │ │
│ │ (carousel) │ (promo) │ │
│ │ │ │ │
│ │ "We're │ "Launching │ │
│ │ waiting │ new..." │ │
│ │ for you" │ │ │
│ └──────────────┴──────────────┘ │
│ ● ○ ○ (indicators) │
│ │
│ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │
│ │ 🏋 │ │ 📱 │ │ 🏠 │ │ 📍 │ │
│ │book │ │chk │ │wrk │ │view│ │
│ │class│ │ in │ │home│ │gyms│ │
│ └────┘ └────┘ └────┘ └────┘ │
│ │
│ ⚡ 3/6 This Week Activity BOOK │
│ │
├─────────────────────────────────────┤
│ 🏠 🏋 🔍 🛒 ✨ │
│ Home Fitness Search Store Transform│
└─────────────────────────────────────┘
Key Elements
| Element | Spec |
|---|---|
| Streak counter | Top center, pill badge with fire emoji. “12 day streak”. Accent color background. Gamification hook — drives daily engagement. |
| Avatar | Top-left, circular profile photo (32dp), tappable → profile screen |
| Notification bell | Top-right, with red dot badge for unread |
| Hero carousel | 2-3 promotional/motivational banners. Auto-scroll every 5s. Gym-specific content (white-label: each gym can set their own banners). |
| Quick action grid | 4 icon buttons in a row: Book a Class, Check-in at Gym, Workout at Home, View All Gyms. Each has icon (custom, not generic) + label. |
| Weekly activity tracker | Shows X/6 sessions this week. Progress bar. “BOOK” CTA to schedule next session. |
| Bottom navigation | 5 tabs: Home, Fitness, Search, Store, Transform. Center tab (Search) is elevated/highlighted. |
GymStack Adaptation
For white-labeled GymStack, the home screen adapts:
- Streak → tracks gym check-in streak (not class bookings)
- Quick actions → “My Workout”, “Check In”, “My Diet”, “My Progress”
- Hero banners → gym owner can upload promotions (new batch, festival offer, referral program)
- Activity tracker → “3/5 workouts completed this week” (based on workout plan)
- Bottom nav → Home, Workouts, Check In, Diet, Profile (5 tabs, simpler than Cult.fit’s)
- Gym branding → logo, colors, name all from white-label config
Screen 7: QR Check-In
Purpose: Member shows this QR code at the gym front desk to check in. Staff scans it with the admin app or a dedicated scanner.
┌─────────────────────────────────────┐
│ │
│ (blurred home screen behind) │
│ │
│ ┌─────────────────────────────────┐ │
│ │ ── (handle) ── │ │
│ │ │ │
│ │ Check-in │ │
│ │ │ │
│ │ ┌─────────────────────┐ │ │
│ │ │ │ │ │
│ │ │ ██▀▀██▀▀██ │ │ │
│ │ │ ██ ██ ██ │ │ │
│ │ │ ▀▀██▀▀██▀▀ │ │ │
│ │ │ QR CODE │ │ │
│ │ │ ██▀▀██▀▀██ │ │ │
│ │ │ ██ ██ ██ │ │ │
│ │ │ │ │ │
│ │ └─────────────────────┘ │ │
│ │ │ │
│ │ To check-in to a gym, │ │
│ │ scan this QR code │ │
│ │ │ │
│ │ ✅ Valid until 11:59 PM today │ │
│ │ │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────┘
Key Details
| Element | Spec |
|---|---|
| Presentation | Bottom sheet sliding up over current screen (blurred background) |
| QR code | Large (280×280dp), high contrast (black on white), contains encrypted member ID + timestamp |
| QR data format | gymstack://checkin/{member_id}/{timestamp}/{hmac} — HMAC prevents forgery |
| Validity | QR regenerates every 60 seconds (security). Shows countdown: “Valid until…” |
| Brightness | Auto-maximize screen brightness when QR is displayed (Flutter: screen_brightness package) |
| Offline | QR can be generated offline (uses pre-shared secret with gym’s scanner) |
| Admin side | Admin app has a QR scanner (camera) that reads and validates the check-in |
GymStack Enhancements Over Cult.fit
- Streak display on check-in screen: “Day 12! Keep it going!”
- Last check-in timestamp: “Last: Yesterday at 6:32 PM”
- Auto check-in option: when member’s phone is near gym’s Bluetooth beacon (Phase 2)
Screen 8: Class Schedule
Purpose: Browse and book group classes at the gym.
┌─────────────────────────────────────┐
│ ← 📍 Gym Name (location picker) ∨ │
├─────────────────────────────────────┤
│ 2 3 4 5 6 7 8 │
│ THU FRI SAT SUN MON TUE WED │
│ ▬ │
├─────────────────────────────────────┤
│ Dance+ Strength+ Burn+ Yoga+ HI... │
│ (scrollable filter chips) │
├─────────────────────────────────────┤
│ │
│ 6:00 AM Pro Fitness Kankarbagh │
│ ┌──────────┐ │
│ │ YOGA │ │
│ └──────────┘ │
│ │
│ 7:00 AM Pro Fitness Kankarbagh │
│ ┌──────────┐ │
│ │ HIIT │ │
│ └──────────┘ │
│ │
│ 8:00 AM Pro Fitness Kankarbagh │
│ ┌──────────────────┐ │
│ │ ZUMBA & DANCE │ │
│ └──────────────────┘ │
│ │
│ 5:00 PM Pro Fitness Kankarbagh │
│ ┌──────────┐ │
│ │ CROSSFIT │ │
│ └──────────┘ │
│ │
│ 5:30 PM Pro Fitness Kankarbagh │
│ ┌──────────────────┐ │
│ │ ZUMBA & DANCE │ │
│ └──────────────────┘ │
│ │
│ 6:00 PM Pro Fitness Kankarbagh │
│ ┌──────────┐ │
│ │ YOGA │ │
│ └──────────┘ │
│ │
└─────────────────────────────────────┘
Key Details
| Element | Spec |
|---|---|
| Background | Gradient dark (deep navy/teal, similar to Cult.fit’s class schedule) |
| Location picker | Top bar with gym name and location. For multi-branch gyms, dropdown to switch. |
| Date strip | Horizontal scroll, 7 days. Current day highlighted with underline. |
| Category filters | Horizontal scroll chips: Dance, Strength, Burn, Yoga, HIIT, CrossFit, Zumba. Tappable to filter. + icon to add filter. |
| Class cards | Time (left-aligned, bold, 18sp) + gym name (small text) + class type pill (rounded rect, gray bg, white text, all-caps) |
| Tap class | Opens class detail: trainer name, capacity (12/20 spots), duration, description, BOOK button |
| Booked indicator | Green checkmark + “BOOKED” replaces the pill for already-booked classes |
| Waitlist | If class is full: “JOIN WAITLIST” button, shows position (e.g., “#3 on waitlist”) |
Screen 9: Gym Discovery / Detail
Purpose: Browse and discover gym locations (relevant for multi-branch gyms or future corporate wellness aggregation).
┌─────────────────────────────────────┐
│ ← 📍 Location ∨ │
├─────────────────────────────────────┤
│ 🔍 Search for a gym/center near you│
├─────────────────────────────────────┤
│ [Gym ×] [Store +] [Group classes +] │
├─────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────┐ │
│ │ │ │
│ │ 📸 GYM PHOTO │ │
│ │ (full-width hero image) │ │
│ │ │ │
│ │ GROUP CLASSES & GYM │ │
│ │ ELITE │ │
│ └─────────────────────────────────┘ │
│ │
│ Pro Fitness Kankarbagh │
│ 📍 Bhootnath Road, Kankarbagh │
│ ⭐ 4.0 (297 reviews) • 1.2 km │
│ │
│ ┌─────────────────────────────────┐ │
│ │ BOOK NOW │ │
│ └─────────────────────────────────┘ │
│ │
│ ── Facilities ── │
│ 🏋 Free Weights ❄ Ice Bath │
│ 🚿 Hot Showers 🅿 Free Parking │
│ ❄ AC 🔒 Lockers │
│ │
│ ── Trainers ── │
│ Shubham (Strength) | Priya (Yoga) │
│ │
│ ── Programs ── │
│ Strength • HIIT • Yoga • Zumba │
│ CrossFit • Personal Training │
│ │
│ ── Pricing ── │
│ Silver: ₹14,000/yr │
│ Gold: ₹25,000/yr │
│ Platinum: ₹35,000/yr │
│ │
└─────────────────────────────────────┘
For GymStack’s MVP
This screen is more relevant for:
- Multi-branch gyms (member can see all branches and book at any)
- Corporate wellness (Phase 2 — employees browse partner gyms near them)
For single-branch gyms (majority of initial customers), this screen shows just THEIR gym info — essentially a mini-version of the gym’s profile page within the app.
Screen 10: Workout Plan Structure
Additional patterns observed from Cult.fit screenshots:
Exercise Grouping Types
| Type | Label | Behavior |
|---|---|---|
| Standard | (no label) | Individual exercise, do all sets before moving on |
| Superset | ”SUPERSET: Follow sequence” | 2-3 exercises done back-to-back with no rest between them, rest after completing the group |
| Circuit Set | ”CIRCUIT SET: Follow sequence” | 3+ exercises done in sequence as a circuit, multiple rounds |
| Unilateral | ”Unilateral: Follow alternatively” | Left/right side variants — do left, then right, alternating |
| Drop Set | ”DROP SET” | Same exercise, decreasing weight each set |
These grouping types must be supported in the workout plan data model:
{
"sections": [
{
"name": "Warm Up",
"duration_mins": 12,
"groups": [
{
"type": "circuit",
"label": "CIRCUIT SET: Follow sequence",
"exercises": [
{ "name": "Treadmill", "duration": "10 Mins" },
{ "name": "Kettlebell Halo", "reps": 15 },
{ "name": "Inch Worm", "reps": 15 },
{ "name": "Cobra To Mountain", "reps": 15 }
]
}
]
},
{
"name": "Workout",
"duration_mins": 55,
"groups": [
{
"type": "standard",
"exercises": [
{
"name": "Dumbbell Seated Overhead Press",
"sets": [
{ "reps": 12, "weight_kg": 30 },
{ "reps": 10, "weight_kg": 40 },
{ "reps": 8, "weight_kg": 45 },
{ "reps": 6, "weight_kg": 45 }
],
"is_new": true
}
]
},
{
"type": "unilateral",
"label": "Unilateral: Follow alternatively",
"exercises": [
{ "name": "Single Arm Dumbbell Chest Press: Left", "sets": [{"reps": 12}, {"reps": 10}, {"reps": 8}, {"reps": 6}], "is_new": true },
{ "name": "Single Arm Dumbbell Chest Press: Right", "sets": [{"reps": 12}, {"reps": 10}, {"reps": 8}, {"reps": 6}], "is_new": true }
]
}
]
},
{
"name": "Stretch",
"duration_mins": 4,
"groups": [
{
"type": "circuit",
"label": "CIRCUIT SET: Follow sequence",
"exercises": [
{ "name": "Sphinx Stretch", "duration": "40 Secs" },
{ "name": "Kneeling Shoulder Extension Pec Stretch", "duration": "40 Secs" }
]
}
]
}
]
}
Additional UI Patterns
| Pattern | Detail |
|---|---|
| ”NEW” badge | Red pill on exercise thumbnail when a recently added exercise appears in the plan. Draws attention to plan changes. |
| ”SWAP WITH TODAY” button | Bottom CTA (outlined, red text) allowing member to swap one day’s workout with another. Useful when member missed a day. |
| Three-section structure | Warm Up → Workout → Stretch (standard for every day). Each collapsible independently. Duration shown per section. |
| Exercise thumbnails | Square (80×80dp), rounded corners (8dp), showing the starting position of the exercise. Consistent white/light background in Cult.fit’s content. |
| Sets display | Compact: “12 Reps x 30 Kg • 10 Reps x 40 Kg • 8 Reps x 45 Kg • 6 Reps x 45 Kg” — all on 1-2 lines, bullet-separated |
| Reps-only exercises | For bodyweight/warm-up: just “15 Reps” without weight |
| Duration exercises | For stretches/treadmill: “10 Mins” or “40 Secs” instead of reps |