I built my first Android app using Codex without using a traditional IDE workflow.
I really had fun building this app - one that is normally only available through paid subscription services. The total effort was about 5 hours, including 1 hour installing prerequisites and 1 hour testing on the indoor bike.
Summary
I started with very little knowledge of the stack: no practical Android development experience, no Flutter background, and no hands-on BLE/FTMS protocol knowledge.
The process was fully iterative and conversational.
I described what I wanted in plain language, Codex translated that into code and setup steps, and we tested directly on a physical phone and smart trainer after each meaningful change.
This included:
- environment setup
- app scaffolding
- Bluetooth device connections
- control-loop tuning
- repeated UI refinements
The result was an Android app that connects to a heart rate monitor and a smart trainer, then runs a heart-rate-driven ERG control loop with live metrics.
Features
- Connects to a Bluetooth heart rate monitor and a Bluetooth smart trainer
- Allows the rider to set a target heart rate (for example, Zone 2) and start from a chosen power
- Continuously monitors heart rate and adjusts trainer resistance/power automatically to keep heart rate stable around the target
- Supports configurable control timing, allowing adjustments at a rider-chosen loop interval
- Saves paired device selections and attempts to reconnect automatically on app startup
- Shows live ride metrics (heart rate, target heart rate, current power, and drift)
- Includes ride-friendly UX details such as keeping the screen awake and compact connected-device status cards
-
Tech Stack
- Flutter (Dart)
- Android target build/deploy via Flutter toolchain
- Riverpod (flutter_riverpod) for state management
- flutter_blue_plus for BLE communication
- shared_preferences for saved device selection
- equatable for value-style state/model objects
- collection and intl utilities
- Terminal-driven workflow (no IDE-centric development flow)