Help

What the app does, how to set it up, and what to do when it doesn’t.

Last updated 17 September 2026

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
  • 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

  1. Install the app. You’ll get a TestFlight invitation link (apply here). Open it on your iPhone, install TestFlight if prompted, then install Indore.
  2. Sign in. Open the app and sign in with Google. Use the same account for the desktop HUD.
  3. 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.
  4. 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.
  5. Install the desktop HUD. Download the HUD app for your computer from indoreride.com. Sign in with the same Google account. The HUD appears automatically when you start a ride and disappears when you stop.

Google permissions

Signing in only uses your email. Google won’t ask for anything else. No passwords are stored — authentication is handled entirely through Google’s OAuth flow.

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.

SayAlso worksWhat happens
harderhard, more, upIncreases target by resistance increment
easiereasy, less, downDecreases target by resistance increment
resetoriginalClears offset, returns to ride target
skipnext, next intervalJumps to the next interval
cool downend ride, wind down, wrap upStarts 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

ZoneSay% FTP
Recoveryrecovery, z145%
Enduranceendurance, z265%
Tempotempo, z383%
Sweet Spotsweet spot90%
Thresholdthreshold, ftp, z4100%
VO2maxvo2max, vo2, z5112%
Anaerobicanaerobic, z6135%
Sprintsprint, z7160%

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.

RatingElevation gain per kmWhat it means
Easy< 6 m/kmMostly flat or gently rolling
Moderate6–12 m/kmSome climbs mixed in
Hard12–20 m/kmSignificant climbing
Brutal> 20 m/kmMountain 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 Google 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.

Invitations

Indore is currently invite-only. You got access because someone shared their invite link with you, or you were whitelisted directly.

As you ride more, you’ll unlock invite codes of your own — up to 3 total, at 10, 25, and 50 hours of riding. Find them in Settings in the app. Generate a code, share the link, and someone can claim a spot.

When you cross one of those milestones, we’ll email you to let you know a fresh invitation is waiting in Settings.

Your data

  • Ride recordings are stored locally on your phone.
  • Google account — Indore stores your email for sign-in. No passwords are stored — authentication is handled through Google’s OAuth flow.
  • Telemetry — Indore can share anonymous data about how your trainer responds to power changes, to help improve compatibility with different trainers. No personal information is included. You can opt out in Preferences → Data.