Sprint interval training app with a smartwatch companion and offline-first sync
A native iOS and Android training app that acts as an electronic starter for solo sprint work — a randomised hold before the start signal, per-repetition metrics, and a smartwatch companion that runs its own health session and syncs back — replacing an earlier cross-platform prototype.
Interval training needs two things a phone stopwatch can't give an athlete training alone: a start they can't anticipate, and a record of every individual effort rather than one long undifferentiated session. An athlete who starts themselves knows when the effort begins, which changes the effort, and general fitness apps record a whole session as one continuous activity when the useful data is per-repetition — this rep's duration, distance, speed, peak heart rate, recovery. The phone also isn't on the athlete mid-effort, training happens exactly where connectivity is worst, and the physiological metrics that make the record worth keeping are only reachable through the mobile platform's own health frameworks and wearable workout session.
The product began as a cross-platform prototype that proved the interaction — the countdown, the audio cues, the hold, the signal — but couldn't reach a smartwatch health session, live heart rate, complications or platform in-app purchase, all of which the product needed next. Rather than fighting that boundary, it was rebuilt as two native applications against a shared API contract once the requirements were actually known, so the prototype earned its keep settling the interaction design cheaply before the more expensive rewrite.
Everything timing-sensitive stays entirely local — the countdown, the randomised hold, the audio cues, the effort timing and the metric collection never touch the network, with the server acting only as an account store and history sink consulted before and after training. The watch application is a full peer rather than a remote display: it runs its own start sequence and its own platform health workout session, collecting heart rate, energy and distance as the effort happens, and hands completed repetitions to the handset when the two are in range, with every record tagged by the device that produced it so a merged two-device history stays trustworthy and debuggable.
Repetitions write to an on-device store the moment they complete, each flagged as unsynced, and a reconciliation pass batches everything outstanding and writes server identifiers back onto local rows — so a session recorded with no signal loses nothing. Settings and subscription entitlement live in one shared container read by the app, its extension and the watch, and are mirrored over the device sync channel so a wrist device with no connectivity of its own still knows where it stands.
A solo athlete gets a credible start, with an unpredictable hold before the signal, without needing a second person with a whistle, and training is recorded at the level it actually happens — per repetition rather than as one undifferentiated session. A complete session can be run, timed and recorded from the wearable alone, with the handset left at the side of the field, and training in a dead zone loses nothing because the device records first and reconciles later. The native rebuild that replaced the original cross-platform prototype was scoped against known requirements rather than assumptions, once the prototype had proved the interaction design was worth building on.
Something holding you back?
New build, rebuild, or adding AI to what you already have — I'll take a look and give you an honest perspective.