
Treadmill Pro
Control your treadmill from your iPhone
Native iOS app that controls your Bluetooth treadmill — discover devices, connect, and manage speed and incline from your iPhone.
Overview
Treadmill Pro turns your iPhone into a full-featured treadmill controller over Bluetooth Low Energy. It supports multiple BLE protocols out of the box — FTMS, Gymax, WalkingPad, Impulse, and ISC-BLE — so it works with a wide range of consumer treadmills without any extra hardware.
The app pairs with Apple Watch to display real-time heart rate from HealthKit during workouts. Workout history is stored per-account in Firestore, letting you track progress over time. Speed and incline adjustments happen instantly via CoreBluetooth commands.
Available in six languages (EN, RU, ES, FR, TR, ZH), Treadmill Pro is designed for home fitness enthusiasts who want precise control and data from their equipment.
The problem
Consumer treadmills from different brands use incompatible BLE protocols. Official apps are often locked to one brand or don't exist at all. There was no single iOS app that could control treadmills from multiple manufacturers while also tracking HealthKit data.
What we built
- Multi-protocol BLE support: FTMS, Gymax, WalkingPad, Impulse, ISC-BLE
- Apple Watch integration with real-time HealthKit heart rate
- Workout history stored per-account with Firestore cloud sync
- Instant speed and incline control via CoreBluetooth
- Available in 6 languages: EN, RU, ES, FR, TR, ZH
Tech stack
iOS / watchOS
BLE
Backend
Payments
Under the hood
Firebase without Firebase SDK
Auth and Firestore use Firebase REST APIs directly — no Firebase iOS SDK in the target. This avoids the SDK's significant binary size increase and lets us control exactly which Firebase features are compiled in.
CoreBluetooth multi-protocol layer
Each BLE protocol (FTMS, Gymax, WalkingPad, Impulse, ISC-BLE) is implemented as a separate handler conforming to a common TreadmillProtocol. The discovery phase tries each protocol in order and locks to the first one that responds — no user configuration required.