← build log

praxis 7 min read

Praxis: one bike, the whole family

I am an ultra-runner. I am also, at the moment, an injured ultra-runner, which is how I have come to spend a great deal more time than I would like on an indoor bike.

We bought a Wattbike Proton, partly for me and partly on the reasoning that a smart bike is a lot easier to justify if the whole household actually uses it. The bike has been excellent. The software was where it fell apart.

Four riders, one bike, and every app assuming otherwise

Every indoor cycling app I tried is built on the same quiet assumption: one bike belongs to one rider. There is an account, there is a subscription, there is a setup process with your weight and your FTP and your sensors, and all of it belongs to whoever signed in.

That is a perfectly good assumption for a bike in a spare room owned by one enthusiast. It is the wrong assumption for a bike in a garage that four people walk past every day. You end up choosing between signing in and out around each other, paying several times over for the same bike, or shrugging and letting everyone's rides accumulate in one person's history.

What we actually wanted was modest:

  • a leaderboard, so we can see how everybody is going
  • a handful of little time trials to compete over, the sort of thing that gets someone off the sofa
  • and above all, for it to be easy to walk up, get on, and ride

The third one turned out to be the whole product.

The Netflix model

The interaction I kept coming back to was Netflix. You do not log in to Netflix. You wake the screen and there is a row of faces, and you tap yours, and you are watching something.

So: an iPad that lives beside the bike permanently and never gets put away. You wake it, you see a row of avatars, you tap yours, you ride, and that is the entire ceremony. Everything else hangs off the profile you picked without ever asking you about it, which is to say your FTP, your preferred sensors, how you like the numbers laid out on screen, your favourite workouts, your connected accounts, and your own history and records and place on the family leaderboard.

Nobody types anything. Nobody signs anybody out. The bike and the screen are shared; everything that should be personal is personal.

Underneath that, it does the things an indoor cycling app has to do. It connects straight to the bike over Bluetooth, reads live power, cadence, speed and distance, and controls resistance in ERG or simulation mode. It plays structured workouts, showing the current target, where you are in the session, what is coming next, and how the last few minutes have gone. When you stop, it records the ride: distance, power, cadence, speed, energy, elevation gain.

The Praxis ride history on an iPad: a list of recent rides down the left, and on the right a finished ride called Tuesday Threshold showing duration, distance, average power, watts per kilo, cadence, heart rate, speed and energy, with charts for power, speed, cadence and heart rate.
A finished ride. Everything except the heart rate came off the bike; the heart rate came off the rider's watch, and the iPad stitched the two together.

The interesting problem: whose Apple Health is this?

Here is the bit that took real thought, and the reason I think this app is worth writing about rather than just building.

An iPad has one Health store, and it belongs to whoever set the device up. There is no notion of switching Health users on an iPad the way you switch profiles in an app. So the obvious implementation, where the iPad saves each finished ride to Apple Health, does something wrong: it files my wife's ride in my health record. That is annoying in a small way, because my Fitness rings get credit for work I did not do. It is wrong in a larger way, because that is her data and it has ended up in my account.

The fix is the Apple Watch companion app, and it works by giving the watch two jobs at once.

For any rider who is not the iPad's Health owner:

  1. The rider starts heart-rate sharing on their own Apple Watch.
  2. The watch opens a temporary workout session, which is what lets it read live heart rate and stay awake for the duration of the ride.
  3. The iPad receives that heart rate and combines it with power, cadence, speed, distance and workout-step data coming from the bike.
  4. The iPad remains the source of truth for the complete ride. The watch is a sensor, not a second recording.
  5. When the ride finishes, Praxis sends the completed workout back to that rider's watch.
  6. The watch saves it into that rider's own Apple Health.
  7. The temporary session the watch used for heart rate is discarded, so you do not end up with a duplicate or a half-finished workout sitting next to the real one.

The result is that the family keeps the convenience of one shared iPad, and everybody keeps their own private Health and Fitness history.

The failure mode is the part I am happiest with. If the watch connection drops mid-ride, you lose heart-rate samples for as long as it is gone and nothing else. The iPad still owns the ride, the ride still saves, and no stray workout appears anywhere. That was a deliberate design goal rather than a happy accident: I wanted the worst case to be a gap in one graph, not a lost session or a workout in the wrong person's account.

I will not pretend this is finished. It is the newest part of the app and the part with the most edge cases left in it, and I expect to be writing about it again.

Strava, per rider

Same principle. Each profile authenticates with its own Strava account, so rides upload to the right person. Automatically after a ride, or later from your history if you would rather. Recent rides are kept on the device so a failed or postponed upload can be retried rather than lost.

Where Workout Writer comes in, and the name

Workout Writer already does the other half of this. You describe a session in plain text, it builds the workout, and it sends it where you want it. Praxis is now one of those destinations, alongside Garmin and Apple Watch, and it is wired into Workout Writer's command line tools and its MCP server.

Which makes the whole loop scriptable. Write a session and schedule it for Thursday, ask what is on the calendar next week, move Saturday's ride to Sunday, all from a prompt and none of it touching the iPad. Praxis takes the cycling workouts; the running ones still go to a watch.

I am using that, right now, to manage the rehab. Not being able to run has turned into a rather more structured programme of turbo sessions than I would otherwise have had the discipline for, and having something that writes the week and puts it on the bike without me opening an app is most of the reason it is actually happening.

A workout loaded in Praxis on an iPad: a twenty minute FTP test shown as a bar chart of coloured effort blocks, above the plain text Workout Writer plan it was built from, listing a fifteen minute warmup, three one minute tempo repeats, and a twenty minute threshold block.
An FTP test that came in from Workout Writer. The plain text underneath is the whole workout, which is what makes it easy to send from a script or an assistant.

Which is where the name came from. Workout Writer is where a workout gets composed. Praxis is where it actually gets done. Praxis is the old Greek word for practice as opposed to theory, for the carrying out of a thing rather than the planning of it, and that division of labour between the two apps is exactly the distinction.

I am not sold on it. It is a good idea explained in a paragraph and a slightly obscure word on an App Store listing, and those are not the same thing. The obvious alternative was Workout Rider, which is so on the nose it makes me wince. If you have a better one, I would like to hear it.

The work-in-progress Praxis app icon: stylised pedals on a diagonal stripe, in near-black on white and mint green.
The icon, as it stands. Stylised pedals on a diagonal stripe. Subject to change.

Where this is up to

Praxis is being built for Shipaton 2026, RevenueCat's hackathon, which runs to the end of September and requires a brand-new app shipped to a store inside that window. So: in development, not on the App Store, and on a deadline. The purchasing side is at least familiar ground, since Workout Writer already runs on RevenueCat.

Still on the list: more time trial formats, smarter leaderboards, workout import from more places, and a lot more testing of the watch bridge with four people actually using it rather than one person testing it four times.

If you have a smart bike and a household that fights over it, and you would like to be in the beta when there is one, write to info@whiskmobile.com and I will add you to the list. There is nothing to try yet, so this is a list rather than an invitation, but the people testing it on hardware I do not own are the ones who will find the interesting problems.

More as it happens.

Common questions

Can more than one person share an indoor cycling app on the same bike?

Not comfortably in most apps. The usual model is one account per rider, which on a shared bike means logging in and out between sessions, or paying several times over, or everyone's rides piling up in one person's history. Praxis is being built the other way round: one install, one screen, a profile each.

How can each rider's workouts end up in their own Apple Health?

An iPad has a single Health store belonging to whoever set the device up, so anything saved from the iPad lands in that person's record. Praxis uses an Apple Watch companion app instead: the rider's own watch supplies heart rate during the ride and then writes the finished workout into that rider's Health database, while the iPad stays the source of truth for everything else.

Do I need an Apple Watch to use it?

Not to ride. You need one if you want your rides in your own Apple Health and you are not the person the iPad belongs to. The iPad's owner can save directly and does not need a watch at all.

Will it work with my smart bike or trainer?

It talks to smart bikes and trainers over Bluetooth, reading power, cadence, speed and distance and controlling resistance in ERG or simulation mode. It is being developed against a Wattbike Proton, so that is the one it is best tested on. No promises about specific other models yet.

When can I get it?

It is still being built. The plan is to have it on the App Store before the end of September 2026, which is the Shipaton deadline, but there is no firm date and nothing is on the store yet.

Can I get beta access?

There is no beta to join yet. Write to info@whiskmobile.com if you would like to be on the list for one, and it helps if you mention which smart bike or trainer you have, since testing on hardware we do not own is exactly what it needs.