Selected work / TrainerDay
Recommendation
What the founder said
“He's russian, he stole all my money... 🙂 But his wife is cute and talented... this is the important detail 🙂 Grigory is a great developer if you could ever get him to work...”
Store ratings
Where it stood when I handed off
Snapshot taken in March 2026.
App Store (US)
4.7 / 5
2.9k ratings
Google Play
4.6 / 5
2.1k reviews
What users said
Reviews from the stores
Everything you need, nothing you don't
“This app is everything any serious cyclist needs without any of the flashy distractions of other platforms.”
Relative simplicity
“It is simple, straightforward and very pleasant to look at even though it is static relative to the others.”
Amazing app
“The app is amazing… the ux is better than some other apps I've tested. Plus, an apple watch app too!”
About the work
I joined the TrainerDay startup in 2020 and worked directly on the development of the mobile app for iOS and Android until March 2026.
The goal was simple to describe, but much harder to execute: build a cycling training app that could compete with TrainerRoad and Zwift in terms of functionality, while remaining lighter, faster to launch, and significantly more affordable.
Team and ownership
For most of my time at TrainerDay, I was the primary mobile developer and owned the iOS and Android apps end to end. In a small startup environment, that meant being responsible not only for feature development, but also for architecture, native integrations, App Store and Google Play releases, maintenance, and production reliability.
When additional mobile help was brought in, I led the mobile development process: breaking roadmap items down into actionable tasks, assigning work, reviewing pull requests, and validating the final implementation before release.
What I built
I developed the TrainerDay mobile app for iOS and Android from the ground up. Most of the product was built with React Native, while native development was used where it truly mattered: Bluetooth, ANT+, background workout execution, Apple Watch, and integrations with system services.
One of the key parts of the app was the workout runtime — a system that controls the workout in real time. It guides the rider through interval workouts, applies ERG, resistance, and slope modes, and adapts to live power and heart rate data.
I implemented Bluetooth integration with most of the popular smart trainers on the market, including Wahoo Kickr, Core, and Snap; Tacx Neo, Flux, Flow, Vortex, and Bushido; Elite Direto and Suito; Saris H2 and H3; Concept2 BikeErg; JetBlack Victory; and Zwift Hub.
For React Native, I also wrote an open-source native library for connecting ANT+ devices, which expanded support for sensors and trainers beyond standard Bluetooth scenarios.
Another important part of the work was the Apple Watch app, with real-time heart rate streaming and Apple Health sync. This allowed completed workouts to be added to the user’s activity and counted toward their Apple Fitness rings.
I also worked on integrations with external services: sending workouts to Garmin and Wahoo head units, syncing the calendar with Zwift, and uploading completed workouts to Strava and TrainingPeaks.
In addition, I implemented the subscription and in-app purchase system for iOS and Android, including support for both the free and Pro versions of the app.
What mattered most in this work
The main priority was reliability. For a training app, it is not enough to simply display a nice interval screen — it has to keep working at the exact moment the user is already riding.
A workout that fails halfway through is worse than one that never starts. That is why I paid close attention to recovery after accidental app closures, background execution, reconnection logic for unreliable Bluetooth devices, handling system interruptions, and saving workout data locally.
Even if the network dropped during a session or the app was closed, the completed workout had to be stored locally and uploaded later. This reliability became one of the most important parts of the TrainerDay mobile app.