Desk Yoga

Feel better while you work, not before or after it.

Desk Yoga is a cross-platform mobile app that guides you through short, desk-friendly yoga sessions. Unlike traditional yoga apps, it is designed to be done while working: between meetings, during calls, or whenever your body needs a reset.

Choose from 9 problem-driven presets like Posture Corrector, Tech Neck Reset, and Mouse Hand Relief, or let the smart session engine build a flow based on your constraints: sitting vs standing, camera on or off, and whether you need your hands free for typing.

Type

Mobile App

Tech Stack

React Native

Expo

TypeScript

NativeWind

MMKV

Desk Yoga

Project Purpose & Goal

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.

Stack & Explanation

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.

React NativeExpoTypeScript

Problems & Thought Process

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.

Lessons Learned

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.