Help
What the app does, how to set it up, and what to do when it doesn’t.
The Indore iOS app connects to your smart trainer, controls resistance, and records your ride. A desktop HUD floats on top of whatever you’re doing on your computer — metrics visible when you glance, invisible when you don’t. The default ride is open-ended endurance — no plan, no pressure, just pedal.
What you need
- iPhone running iOS 17 or later, or an Android phone running Android 8 or later
- A smart trainer (Wahoo KICKR, Tacx NEO, Elite Direto, most trainers made after 2018)
- Optionally: a separate power meter (pedals or crank-based)
- Your FTP in watts — if you don’t know it, 200W is a reasonable starting point
Getting set up
- Install the app. Everything is on the downloads page. On iPhone, Indore is a beta through TestFlight: install TestFlight, open the beta link, then install Indore. On Android, it’s a file you download straight from us.
- Sign in. Open the app and sign in with Google or Apple. Use the same account for the desktop HUD.
- Enter your FTP. On the Settings screen, tap the FTP field and enter your value. All power targets are based on this number. You can change it anytime.
- Connect your trainer. Tap the Trainer slot on Settings. The app scans for nearby Bluetooth devices — your trainer should appear within a few seconds. Tap it to connect. The slot turns green when connected.
- Install the desktop HUD. Download the HUD app for your computer from the downloads page. Sign in with the same account, Google or Apple. The HUD appears automatically when you start a ride and disappears when you stop.
Signing in
You sign in with Google or Apple. Signing in only uses your email. Neither will ask for anything else. No passwords are stored — authentication is handled entirely by Google or Apple.
The five screens
Swipe left and right on the iPhone to move between them. The dots at the top show where you are.
- Settings (leftmost)
- Devices, FTP, ride zone, warmup and cooldown duration, resistance increment. Most settings are locked while a ride is active to prevent accidental changes.
- Metrics (second)
- Live numbers: elapsed time, interval countdown, current power vs. target, cadence, heart rate, plus running averages for power and heart rate. Small sparkline charts trace your power and heart rate history on the interval graph. These same metrics also appear on the desktop HUD. Power text changes color based on how close you are to the target — green within 5W, yellow within 15W, red if you’re further off.
- Controls (third)
- HARDER and EASIER buttons for manual resistance adjustment, plus pause/resume. Also shows connection details and the 4-digit pairing code for the desktop HUD.
- Routes (fourth)
- Your imported routes. Tap one to see the map preview and ride it. Import routes from GPX files or directly from Strava. Each route shows distance, elevation, and a difficulty rating.
- Sessions (rightmost)
- Your saved sessions. Tap one to expand and see the interval graph, description, and a Ride button. Tap + to create a new one. To delete a session, expand it and tap the trash icon.
Settings reference
- FTP 1–500W
- Functional Threshold Power. The wattage you can sustain for about an hour. All zones and voice interval targets are percentages of this number.
- FTHR 1–250 BPM
- Functional Threshold Heart Rate. The heart rate you can sustain for about an hour. When set, the heart rate line on the ride graph is scaled so that FTHR sits exactly on the FTP line — one reference line for both thresholds. Leave it empty and the heart rate line keeps its own scale.
- Warmup 0–10 minutes
- A gentle ramp from 45% to 55% FTP before the main ride starts. Set to 0 to skip it.
- Default ride zone
- Which power zone to ride in when you start without a structured session. Options are Recovery through VO2max. Default is Endurance (Z2).
- Variance
- When on, power targets vary across the full zone range — small undulations that keep things interesting. When off, power stays at a single steady value within the zone, which you can adjust with the slider that appears.
- Cool down 0–10 minutes
- When you end a ride, you get the option to cool down first — a power ramp down to recovery pace. Set to 0 to remove this option.
- Resistance increment 1–25W
- How much the HARDER / EASIER buttons (and voice commands) change your target power. Default is 10W.
- Powermatch
- When you have both a trainer and a separate power meter connected, Powermatch compensates for the difference between the two. It uses your power meter’s reading as the source of truth and adjusts what it tells the trainer so the numbers line up. Takes about 10 seconds to settle after connecting.
Connecting devices
- Smart trainer (required)
- Most modern trainers work: Wahoo KICKR, Tacx NEO, Elite Direto, Saris H3, etc. The app controls the resistance and reads your power and cadence from the trainer.
- Power meter (optional)
- Optional. If you have power meter pedals or a crank arm, connect it in the Power Meter slot on Settings. Enable Powermatch to use the power meter for accuracy while the app still controls the trainer.
- Heart rate strap (optional)
- Optional. Bluetooth heart rate straps (Garmin, Polar, Wahoo) connect through the heart rate slot. Heart rate appears on the Metrics screen during a ride.
- Treadmill (optional)
- Optional. A Bluetooth (FTMS) treadmill connects through the Treadmill slot and turns the Run page on. Speed, incline, distance and calories come from the treadmill; heart rate still comes from your strap.
The app remembers your devices after the first pairing. Previously connected devices appear at the top of the scan list. To forget a device, go to Preferences → Manage Devices.
Starting and ending a ride
Start
Tap START RIDE at the top of the screen. The app switches to the Metrics screen, keeps the screen on, activates the desktop HUD, and starts controlling your trainer. The default ride runs in your chosen zone for as long as you keep pedaling.
End
Tap END RIDE at the top of any screen. A dialog gives you three options:
- End Ride — stops immediately, saves and uploads the ride
- Cool Down — runs a power ramp down, then stops automatically (only shown if you’ve configured a cooldown duration in settings)
- End Without Saving — stops immediately and discards all ride data. Useful for false starts or test rides you don’t want to keep.
- Cancel — back to riding
After a ride ends, the phone shows a completion screen with a short AI-generated analysis of how the ride went — power consistency, cadence patterns, that kind of thing. The analysis is saved with the ride for future reference.
Interval countdown
During the last 3 seconds of each interval, you’ll hear a 3-2-1 beep and see a full-screen countdown on the phone and desktop HUD — along with the name of the upcoming interval. The next interval starts exactly when the current one ends.
Pause
Tap the pause icon on the Controls screen. The interval timer freezes. Tap play to resume.
Voice commands
On the Metrics or Controls screen, press and hold anywhere to activate the microphone. Speak your command, then release.
Quick commands
These work instantly, even without internet.
| Say | Also works | What happens |
|---|---|---|
| harder | hard, more, up | Increases target by resistance increment |
| easier | easy, less, down | Decreases target by resistance increment |
| reset | original | Clears offset, returns to ride target |
| skip | next, next interval | Jumps to the next interval |
| cool down | end ride, wind down, wrap up | Starts cooldown (or ends ride) |
Interval commands
These require internet.
Anything that isn’t a quick command gets interpreted as an interval. Speak a duration and an intensity:
- “5 minutes at threshold”
- “3 min at 95%”
- “10 at 250 watts”
- “2 minutes sweet spot”
The interval gets injected into your current ride. Once it finishes, the original ride resumes where it left off.
Zone names
| Zone | Say | % FTP |
|---|---|---|
| Recovery | recovery, z1 | 45% |
| Endurance | endurance, z2 | 65% |
| Tempo | tempo, z3 | 83% |
| Sweet Spot | sweet spot | 90% |
| Threshold | threshold, ftp, z4 | 100% |
| VO2max | vo2max, vo2, z5 | 112% |
| Anaerobic | anaerobic, z6 | 135% |
| Sprint | sprint, z7 | 160% |
You can also say a percentage (“95%”) or absolute watts (“250 watts”).
Sessions
By default, Indore runs a simple Zone 2 ride — no intervals, no pressure. If you want structure, you can create sessions.
Creating a session
Go to the Sessions tab on the phone and tap +. Describe what you want in plain language:
- “45 minute endurance ride”
- “4x4 VO2max intervals with 3 min recovery”
- “Easy hour with a few tempo blocks”
- “30 min sweet spot”
Indore builds the intervals from your description. If it’s too vague, it’ll ask a follow-up question. Once you’re happy with the preview, save it.
Importing from other apps
You can import .zwo files (the Zwift format) from the Sessions tab. Tap +, then choose Import to select a file.
Starting a session
On the Sessions tab, expand a session and tap RIDE. Then tap START RIDE. Sessions skip the default Z2 warmup since they typically include their own.
If you start a ride without selecting a session, you get the default Zone 2 ride with your warmup preference applied.
How the connection works
The desktop HUD connects to your phone through the internet — both devices just need to be signed into the same account. No local network pairing required.
When you start a ride on the phone, the HUD appears automatically on your computer. When you stop, it disappears.
Route rides
Instead of a flat power-based ride, you can ride a real-world route. Your trainer simulates the terrain — resistance changes with the grade, so climbs feel like climbs and descents let you spin easy.
Importing routes
On the Routes tab, tap the import button. Two options:
- Import GPX File — pick a .gpx file from your phone. Works with files exported from Strava, Komoot, RideWithGPS, or any other app.
- Import from Strava — browse your saved Strava routes and import directly. Requires Strava to be connected (you’ll be prompted if it isn’t).
Difficulty rating
Each route gets a difficulty rating based on average elevation gain per kilometer — a simple measure of how hilly the route is.
| Rating | Elevation gain per km | What it means |
|---|---|---|
| Easy | < 6 m/km | Mostly flat or gently rolling |
| Moderate | 6–12 m/km | Some climbs mixed in |
| Hard | 12–20 m/km | Significant climbing |
| Brutal | > 20 m/km | Mountain pass territory |
Starting a route ride
On the Routes tab, expand a route and tap RIDE. Then tap START RIDE. The elevation profile appears at the bottom of the Metrics screen with a scrubber showing your position. The desktop HUD shows the same profile and a map of the route with your live position.
Route map
Both the phone and the desktop HUD show an overhead map of the route with your current position as a white dot. Town and city names appear on the map for orientation — pulled from OpenStreetMap when you import the route. Small directional arrows along the line show which way the route goes.
Segments
Some routes have named segments — climbs and sprints from well-known cycling roads. These show up as teal bands on the elevation profile. During the ride, you’ll get a notification when approaching a segment and a progress indicator while riding through it.
Runs
Indore keeps the record on a treadmill too. Connect one in the Treadmill slot on Settings, swipe to the Run page and press Start. The treadmill sets the speed and incline; the app reads them and writes everything down. Any Bluetooth (FTMS) treadmill should work. It was built on the Technogym MyRun.
The run screen shows the whole run across the top (time, distance, calories), the lap in progress in the middle (pace, heart rate, time, distance) and the laps you’ve done below. The square button ends the run. Lap cuts a lap. Hold Lap for two seconds to switch auto-lap on or off mid-run.
Auto-lap cuts a lap every kilometre, or every mile if Distance units in Settings is set to miles. Switch it off on the Run page if you’d rather cut laps yourself.
Heart rate comes from your strap, the same one you ride with. The treadmill sends none. Pace is worked out from belt speed, so it holds steady when you do.
Runs sit in History next to your rides, with distance, pace, laps and a pace chart. With Strava connected they upload as virtual runs.
Graph scrubbing
During a ride, drag the graph at the bottom of the Metrics screen to scrub the timeline. Works on both the interval graph (sessions) and the elevation profile (route rides).
While your finger is down, the scrubber follows your touch without changing anything. When you lift your finger, the ride jumps to that position — the interval or route distance updates accordingly.
Scrubbing is disabled during group rides since the timeline is shared between participants.
Strava
Connect Strava from Settings on the phone (or during onboarding when you first sign in). Once connected, rides upload to Strava automatically when they finish — no extra steps.
With Strava connected, you can also import your saved routes directly into Indore from the Routes tab.
Indore uploads the .fit file directly, so Strava gets your full power, cadence, and heart rate data. Structured rides include interval boundaries so Strava can render the interval details graph. The ride name and description come from the AI-generated analysis.
Group rides include participant names in the Strava title and description automatically.
Desktop HUD
A transparent overlay app for macOS and Windows that shows your ride data on your computer screen — power, cadence, heart rate, interval timer, countdown, and an interval graph. It floats on top of whatever you’re doing — watching something, working, browsing.
The HUD appears automatically when you start a ride and disappears when you stop. It’s click-through — your mouse passes right through it.
The desktop app streams data through the internet, so it doesn’t need to be on the same network as your phone — just signed in with the same account. No pairing code needed.
Troubleshooting
Trainer doesn’t appear when scanning
- Wake the trainer by pedaling a few strokes first
- Check that Bluetooth is on in iPhone Settings
- Make sure the trainer isn’t connected to another app (Wahoo, Zwift, etc.)
- Move the phone closer — Bluetooth range is about 10 meters
- Force-quit Indore and reopen if the scan seems stuck
Desktop HUD doesn’t show ride data
- Make sure you’re signed in with the same account on both devices
- A ride must be active on the phone — the HUD only appears while you’re riding
- Check that both devices have an internet connection
- After an app update, try signing out and back in. Authentication can quietly go stale across versions — on either the iOS app or the desktop HUD. If the HUD still doesn’t appear after a desktop relogin, do the same on iOS. This is the most common cause when everything else looks fine.
Voice command says “Could not understand”
- Quick commands (harder, easier, skip, etc.) work offline. If one of those fails, make sure you’re saying the exact word.
- Interval commands (“5 min at threshold”) need an internet connection. Check that you have cell service or WiFi.
- Speak clearly and wait a beat after pressing and holding before you start talking.
Power reading seems inaccurate
- Smart trainers can drift — especially when cold. Ride for 10 minutes to warm up the resistance unit.
- If you have a separate power meter, enable Powermatch in Settings to use the power meter’s reading instead.
- Make sure your trainer firmware is up to date (use the manufacturer’s app).
Phone screen keeps turning off during a ride
The app keeps the screen on automatically during a ride. If it’s still going dark, check iPhone Settings → Display & Brightness → Auto-Lock. Low Power Mode can sometimes interfere.
Phone died or app crashed during a ride
Your ride data is saved continuously during the ride. When you reopen the app, it automatically detects the interrupted ride, reconstructs it from the saved data, and uploads it. No action needed — just open the app and it handles the rest.
Computer falls asleep during a ride
The desktop HUD prevents your Mac from sleeping while a ride is active. If the screensaver or sleep still triggers, check System Settings → Lock Screen and make sure no energy-saving overrides are active.
History
Your rides and runs are on the phone’s History page (swipe left from Settings). Once you have run, a Rides / Runs switch at the top keeps the two apart. A ride shows duration, average power, normalized power, TSS and the ride analysis. A run shows distance, average pace and heart rate.
Tap an entry to see the chart (power for a ride, pace for a run) and the full breakdown.
To delete an entry, touch and hold it. Deletion removes it and its data permanently.
Getting an account
No invite needed. Install an app or sign in on the website and you have an account, with three ride credits already in it.
Riding earns you credits to give away: one for every ten hours on the bike. Make a gift link from your account page and send it to someone. How credits work is under Ride credits, and what they cost is on the pricing page.
Ride credits
A credit is a ride. There are three ways to get one, and they don’t all work the same.
- Signing up 3, once
- Waiting in the account the moment it exists. You can ride them, you can’t give them away, and they never expire.
- 10 hours on the bike 1 per 10 hours
- Earned by riding, and the one kind you can’t spend on yourself. You can give them away, and they never expire.
- A gift from someone 1 per link
- Somebody handed you one of theirs. Ride it, or hand it on again. It never expires.
Short version: the only credits you can’t ride are the ones you earned by riding. Credits from a pack are yours to ride, and the app always spends the ones you can’t give away first, so nothing giftable disappears under you.
Your data
- Ride recordings are kept on your phone and saved to your Indore account, so they show up on every device you sign in on.
- Sign-in — Indore stores your email for sign-in. Indore doesn’t ask for a password — Google or Apple handles that.
- Telemetry — Indore can collect data about how your trainer responds to power changes, to help it work with more trainers. It’s linked to your account so we can follow up on a specific trainer, and only used internally. You can opt out in Preferences → Data.