Under Siege

What inspired me

I saw similar apps that gamify workouts and capture your movement with the camera, but most of them only tracked push-ups.

I wanted a full home workout app that could hit the major muscle groups, not just one exercise. So I built Under Siege around push-ups plus squats, sit-ups, and pull-ups: a fantasy RPG where you defend a mountain outpost from various enemies by doing real bodyweight workouts in front of your phone’s camera.

What I built

Under Siege is an iOS app built with Expo / React Native. You pick a workout, face a monster, and fight with the front camera on. Pose tracking counts your reps; each rep damages the enemy. Win and you earn XP, gold, and levels. Lose or flee, and the enemy captures your outpost.

Core pieces:

  • Camera-based rep counting with QuickPose for push-ups, squats, pull-ups, and sit-ups
  • Battle loop with HP, sets, rest timers, potions, and progression
  • Custom workouts so players can fight their own enemies
  • Onboarding and tips for phone setup and form (lighting, framing, clear background)
  • Victory sharing via a shareable “enemy slain” card

Everything runs on-device. The camera is used for pose tracking only; workouts and progress stay local.

What I learned

  • The hardest part was making sure the rep counter works as intended. One missed pull-up or a false count can ruin the entire workout. The detector also has to handle real rooms.
  • Native bridges matter. Some features needed extending the QuickPose React Native bridge (landmarks for hips/knees) and rebuilding the app. JS alone wasn’t enough.
  • Scope discipline helps. Changing pull-up logic must not silently break push-ups or sit-ups; shared pose code is dangerous if you treat it as one blob.

Challenges

Pull-ups from a floor camera. Elbow-angle rules that look fine in docs failed for back-to-camera hangs. Walking toward the bar and moving the phone also looked like “reps.” I reworked pull-ups around hips and knees rising together, with gates so camera bob and squats don’t count.

Sit-ups cutting off at the bottom. After the first rep, shoulders often leave the frame when the player lies flat. The counter used to freeze mid-rep. Treating sustained missing pose data as “back on the floor” (after arming) fixed multi-rep sets.

Closing

Under Siege is what happens when you take “just do ten more reps” and turn it into “the outpost falls if you don’t.” Personally, as a gamer who also likes to stay active, this works really well. As you get fitter, your character levels up in the game too.

Built With

Share this project:

Updates

Submission history