Building Aura Pilates: A Mat Workout Studio With a Player That Respects the Session
Aug 2026 · 3 min read

I shipped Aura Pilates — a Flutter fitness app for guided mat workouts: personalized quick sessions, a searchable Movement Library, 28-day plans, and a Journey tab for history, calendar, and body metrics.
After KegalFlow (privacy-first adaptive wellness), Aura is the other side of the same coin: a broader fitness studio with calmer branding (ocean ink / warm sand / coral) and a player built for uninterrupted focus.
The session is the product
Detail screen → player → completion.
The player phases are explicit:
- Get-ready countdown (10s)
- Exercise timer for the current move
- Rest between moves, with +15s when you need it
- Pause / resume, previous / skip, sound toggle
- Exit guard so a mis-tap doesn’t throw away the session
- Completion summary with streak
Final seconds cue sound + haptics when timer sounds are on. Wakelock stays enabled for the life of the player so the screen doesn’t sleep mid-hold.
That’s the difference between a list of exercises and a studio.
28-day journeys and progress that doesn’t lie
Three plan levels (one premium), week grids with rest days, done/next markers, persistent progress. Journey tab: totals, monthly activity calendar, weight journal with trend chart and BMI, session history with empty states.
ProgressService owns sessions, weights, and per-plan day sets. Reset had to clear every plan_progress_* key — otherwise “reset” reloaded old days from disk and looked broken. Small bug, big trust issue.
Placeholder art as an architecture choice
Exercise illustrations are drawn by ExerciseFigure — CustomPainter stick-figure poses on soft rounded backdrops. Every screen uses the same API. Shipping final artwork means replacing that widget’s body with Image/Lottie at the same aspect ratio — not hunting twenty hard-coded asset paths.
The technique/video guide frame is the same idea: a host for a real player later. The guide screen already demonstrates connectivity: offline + retry, because streamed technique content shouldn’t pretend to work in a tunnel.
Product states on purpose
Covered deliberately: loading, empty, error + retry, offline + retry, permission denied (reminders), success/celebration, destructive-action confirmation (reset progress).
Onboarding captures goal, focus areas, level, body metrics, reminders. Me tab edits profile, units, coaching cues, timer sound. Premium paywall with restore; entitlement suppresses ads when granted. Monetization slots are remote-config driven for session start/done and native placements.
What I’d still harden
Wire production-grade reminder scheduling end-to-end if anything is still simulated on a given build. Keep wakelock and audio session behavior tested on OEM Android. Replace placeholder figures and the launcher icon before calling the visual design “final.” Stay honest in store copy: mat fitness studio, not medical advice.
Bet: fitness apps are judged in the player and the empty states — not in the onboarding screenshots.
If you’re building workout products: design the exit guard and the rest +15 before the gradient hero.
- flutter
- fitness
- pilates
- workout-player
- ux
- mobile