Inspiration

Most motion games replace buttons with occasional gestures, while fitness apps often struggle to make sustained cardio feel playful. Cardio Chase turns physical effort itself into the core game resource: stop jogging and the world slows down while the pursuer closes in.

What it does

Cardio Chase is a privacy-first native macOS fitness game controlled by the player's body. The Mac's front camera tracks upright play, while an iPhone Continuity Camera placed at the player's side adds a complementary view and is especially important for full push-ups.

Players jog on the spot to move, step between three lanes, make deliberate high jumps over yellow hurdles, and complete full push-ups beneath purple gates. The game adds coins, extra lives, procedural obstacles, escalating difficulty, 500-meter bonus sections, achievements with mastery levels, XP, player levels, streaks, reminders, statistics, original music, optional Apple Music playback, and a guided first-run tutorial.

How me and Codex built it

The app is written in Swift as a native macOS 15 SwiftPM project. SwiftUI provides the app experience and dashboard; SpriteKit renders the 2.5D endless runner. AVFoundation runs two independent camera sessions because AVCaptureMultiCamSession is not available to native macOS apps. Apple Vision extracts body joints locally from both streams. The app normalizes those poses and combines semantic results inside a timestamp window instead of attempting stereo triangulation.

Movement recognition is deterministic and testable. Separate state machines interpret lane position, running cadence, deliberate jumps, and the full standing-to-plank-to-push-up sequence. Camera frames stay transient in memory and are never saved or uploaded. The app has no server; calibration, gameplay progress, achievements, and statistics remain on the Mac.

Challenges

The hardest part was not rendering the game but making body input feel fair. Real testing exposed jogging that looked like jumping, valid jumps that did not clear perspective-correct hurdles, push-up states that could become stale, camera occlusion, and disconnected Continuity Cameras leaving frozen previews. I recorded pose traces from different camera setups and used them to tune algorithms.

The two-camera architecture also needed robust recovery, large hands-free instructions readable from several meters away, calibration reuse, and safe pauses whenever tracking confidence drops.

How I used Codex and GPT-5.6

I used Codex with GPT-5.6 Sol from initial planning through implementation, physical testing, debugging, documentation, packaging, and release preparation. Plan mode helped explore architecture and product trade-offs before I made the final decisions. I varied the effort level by task, kept the project in one main Codex thread for maximum context, utilized Appshots, marked and attached screenshots, assets, folders, and pose traces, and used specialized macOS, Computer Use, GitHub, and Devpost tooling. Codex also delegated bounded investigations to 17 subagents.

Codex built and refined the camera pipelines, pose normalization, movement state machines, gameplay engine, persistence, achievements, progression, MusicKit integration, UI, tests, release scripts, packaging checks, and synthesized gameplay sound effects. I remained responsible for the product vision, movement requirements, visual direction, physical testing, privacy boundary, and final decisions.

Accomplishments

Cardio Chase grew from a camera feasibility spike into a polished, playable macOS experience. It supports a built-in or external front camera, mandatory iPhone side view (via Continuity Camera — no additional iPhone app required), automatic hands-free calibration, live recovery from camera failures, a tutorial, deterministic progression, original assets (images, music, sound effects, player character, badges, …), and a distributable v1.0 release.

What I learned

Reliable physical input is mostly about temporal logic, calibration, confidence-aware fallbacks, and user feedback—not one perfect model prediction. Combining complementary viewpoints at the semantic level was both simpler and more robust than trying to synchronize raw frames.

What's next

The next step is broader testing across more people, rooms, Macs, iPhones, clothing, and lighting conditions, followed by additional environments and exercise variations while preserving the local-first privacy model.

Built With

Share this project:

Updates