Coach is a private, iPhone-only fitness accountability app we built for personal use, and our first mobile app. Mainstream fitness apps solve the wrong problem: they add features when what most people lack is follow-through. Coach is deliberately opinionated: three tasks a day, one streak, and verification instead of good intentions.
The problem
Fitness platforms compete on feature count, and the result is decision fatigue: dozens of metrics to track, none of which get you to the gym. There was no real accountability mechanism anywhere, nothing that could tell the difference between going for a walk and saying you did. The brief was a tool that enforces daily discipline with minimal friction, built around one person's actual routine.
Three tasks, one streak

Onboarding takes a few screens in a brutalist, Nike-Run-Club-inspired design: walk reminder time, gym days, gym reminder and a target session duration. From then on every day is the same three tasks: hit the step goal, attend the gym, log the meals. Complete all three and the streak survives. Progress rings and streak counters do the motivating; local notifications do the reminding; a daily share card does the social accountability, generated on-device as an image you can send anywhere.
Verified, not vibes
The gym task is location-locked: pin your gym once and sessions are detected and timed there, not logged from the sofa. Walks are tracked properly, with GPS route recording through a custom Swift plugin and the route drawn on a dark-mode map. Steps sync in from Apple Health automatically, and completed walks are written back to Health as workouts, so Coach plays nicely with the rest of the ecosystem. In the gym, sessions run as guided workouts: exercises logged with sets, reps and weights against customisable routines.
Food logging that does not punish
Meals log in seconds: breakfast, lunch, dinner and snacks with calories and full macros, food search backed by the OpenFoodFacts database, saved presets for the meals you actually repeat, and custom recipes with auto-calculated macros. Weekly weigh-ins add the long view: weight trends over time and progress photos compared side by side.
Private by architecture
Coach has no backend, no accounts, no subscription and no ads, because none of them were needed. Configuration lives in on-device preferences, history and streaks in the phone's local database, progress photos in the app's own filesystem. Nothing leaves the phone unless you share a card or sync a workout to Apple Health. Privacy is not a policy here; it is the architecture.
Under the hood
The app is a web core with native edges: React and strict TypeScript built with Vite, wrapped in Capacitor 8 for iOS. Where the web platform ends, a custom Swift plugin takes over: CoreLocation for background walk tracking and HealthKit for reading steps and writing workouts. Maps are Leaflet, share cards render with html2canvas, and each feature was built from a written spec with its own test suite before the next began.
Stack: React, TypeScript, Vite, Capacitor 8, Swift (native plugin), CoreLocation, HealthKit, Leaflet, IndexedDB
Outcome
Coach proved two things. Simple, opinionated tools outperform feature-bloated platforms when they are designed around real behaviour. And a web-core-with-native-edges architecture lets one small codebase ship a genuinely native-feeling iOS app, the same pattern we now use to keep client app builds fast and maintainable.



