Most wellness apps ask you to stop what you're doing. Desk Yoga works around your schedule instead. The goal was to build something that fits into a workday without requiring a mat, a change of clothes, or a break longer than a few minutes.
The app includes a freemium model with in-app purchases (weekly, monthly, yearly subscriptions and a lifetime option) so free users get a curated set of poses while paid users unlock the full catalog of 80+ poses and all presets.
Built with Expo SDK 54 and React Native 0.81 for iOS, Android, and web from a single codebase. Expo Router handles file-based navigation. Styling uses NativeWind v4 (Tailwind for React Native) with Gluestack UI components.
Local-first storage via MMKV for instant, encrypted persistence. Monetization through react-native-iap with StoreKit 2 on iOS and Play Billing on Android. Animations use react-native-reanimated for polished pose transitions with multi-pulse edge glow effects.
Pose selection under constraints. The session engine has to pick poses that match your posture (sitting or standing), whether your camera is on, whether you need your hands free, and your target focus area. It also tracks history to avoid repeats and pairs left/right variants in sequence.
Animation choreography. Pose transitions use react-native-reanimated to coordinate multi-pulse edge glows, full-screen overlay fades, and pose card opacity changes with precise timing. Pausing mid-transition required cancellation logic to prevent stuck states.
Notification scheduling. iOS caps local notifications at 64. The reminder system supports multiple times per day across multiple days of the week, so it needs to validate against that limit. 81 tests cover the scheduling logic.
Constraint-based systems need extensive testing because the edge cases multiply fast. The reminder scheduler alone needed 81 tests to feel reliable. Also learned that local-first with MMKV makes the app feel instant, but migrating storage formats between versions takes real planning.