Building Aura Pilates: A Mat Workout Studio With a Player That Respects the Session

Aug 2026 · 3 min read

pilates

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:

  1. Get-ready countdown (10s)
  2. Exercise timer for the current move
  3. Rest between moves, with +15s when you need it
  4. Pause / resume, previous / skip, sound toggle
  5. Exit guard so a mis-tap doesn’t throw away the session
  6. 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