# Croissant Ride: a minimal ERG trainer app in the browser (FIT with laps + RR intervals)

**URL:** <https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601>\
**Category:** External Projects\
**Created:** [11 November 2026 20:29 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601 "2026-11-11T20:29:46Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Croissant](https://forum.intervals.icu/user_avatar/forum.intervals.icu/croissant/32/95970_2.png) [@Croissant](https://forum.intervals.icu/u/Croissant)\
**Post date:** [11 November 2026 20:29 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601/1 "2026-11-11T20:29:46Z")

</div>

Hi all, I’m Arthur, a triathlete in Berlin. I wanted a trainer app with nothing extra: pick the session, the trainer holds the watts, one loop and a small map on screen. So I built Croissant Ride ([croissantride.com](http://croissantride.com), Chrome or Edge).

[https://arthurpfz.com/croissant-ride/night-draft.mp4](https://arthurpfz.com/croissant-ride/night-draft.mp4)

- Ride your coach’s sessions: import the .zwo Intervals or TrainingPeaks exports; coach notes show during each step.
- The .FIT has a lap per step and RR intervals, so Intervals computes HRV / DFA α1.
- ±10 W, ride a step by feel, ERG releases if cadence collapses; ramp FTP test.
- No account, no backend; open source (Apache-2.0): [GitHub - Arthurpfz/croissant-ride: Indoor trainer app in the browser: ERG workouts, Web Bluetooth, 3D worlds, FIT export. No accounts, no backend. · GitHub](http://github.com/Arthurpfz/croissant-ride)

Try it without a trainer: [Croissant Ride: free indoor cycling app for ERG workouts in your browser](http://croissantride.com/?demo=1). Tested on a Van Rysel D100; reports from other trainers are very welcome.

---

<div class="post-metadata">

**Author:** ![Pius\_Gloor](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pius_gloor/32/80072_2.png) [@Pius\_Gloor](https://forum.intervals.icu/u/Pius_Gloor)\
**Post date:** [12 November 2026 09:17 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601/2 "2026-11-12T09:17:40Z")

</div>

Looks nice, I will try because of the “Less is more” design. There’s the option to pair a remote control, can you explain what can be controlled?

 ![Screenshot_20261112-101346_Reddit](https://forum.intervals.icu/uploads/default/original/3X/9/f/9f51a9960bd9c4d645792f09e4100cc632d65006.png)

---

<div class="post-metadata">

**Author:** ![Pius\_Gloor](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pius_gloor/32/80072_2.png) [@Pius\_Gloor](https://forum.intervals.icu/u/Pius_Gloor)\
**Post date:** [12 November 2026 20:03 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601/3 "2026-11-12T20:03:26Z")

</div>

I tried the app today.

And had troubles to pair my Kickr Core.  
After pairing it with [auuki.com](http://auuki.com), your app could also pair. There was no problem pairing the Kickr Core as cadence device.

 ![Screenshot_20261112-202731](https://forum.intervals.icu/uploads/default/original/3X/0/6/06b52e31498a422cc50aaa34bd535b148fdd7b6d.png)

 ![Screenshot_20261112-203014](https://forum.intervals.icu/uploads/default/original/3X/f/9/f928acad6124fd3f88868f27a33951fd48eb5a91.png)

---

<div class="post-metadata">

**Author:** ![system](https://forum.intervals.icu/uploads/default/original/2X/3/32d8cede8be43c6426d605a6fbf0e65788ad51ae.png) [@system](https://forum.intervals.icu/u/system)\
**Post date:** [12 November 2026 21:04 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601/4 "2026-11-12T21:04:40Z")

</div>



---

<div class="post-metadata">

**Author:** ![system](https://forum.intervals.icu/uploads/default/original/2X/3/32d8cede8be43c6426d605a6fbf0e65788ad51ae.png) [@system](https://forum.intervals.icu/u/system)\
**Post date:** [12 November 2026 21:35 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601/5 "2026-11-12T21:35:12Z")

</div>



---

<div class="post-metadata">

**Author:** ![Croissant](https://forum.intervals.icu/user_avatar/forum.intervals.icu/croissant/32/95970_2.png) [@Croissant](https://forum.intervals.icu/u/Croissant)\
**Post date:** [13 November 2026 07:18 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601/6 "2026-11-13T07:18:06Z")

</div>

Thanks a lot for testing and for the screenshots, really helpful. I think I found the cause: on Android the app sent its first commands to the trainer too close together, and Chrome on Android rejects that. A fix is live now. Could you try pairing your Kickr Core again and tell me if it works first time? If it still fails, the exact error text and your Android version would help.

---

<div class="post-metadata">

**Author:** ![Pius\_Gloor](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pius_gloor/32/80072_2.png) [@Pius\_Gloor](https://forum.intervals.icu/u/Pius_Gloor)\
**Post date:** [13 November 2026 08:02 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601/7 "2026-11-13T08:02:22Z")

</div>

Hi, many thanks for the quick fix, Well it’s an older slow Android 11 Smartphone.  
But it’s working perfectly fine now!

 ![Screenshot_20261112-201502](https://forum.intervals.icu/uploads/default/original/3X/3/8/3868f1e420ee43a67ac614ba6149e1716033ecfa.jpeg)

One question regarding target RPM.  
Is this shown, when incl. in the workout?  
Thanks

---

<div class="post-metadata">

**Author:** ![Croissant](https://forum.intervals.icu/user_avatar/forum.intervals.icu/croissant/32/95970_2.png) [@Croissant](https://forum.intervals.icu/u/Croissant)\
**Post date:** [13 November 2026 09:41 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601/8 "2026-11-13T09:41:05Z")

</div>

Great, thanks for confirming, and on an older phone too, that’s the best test.

Target cadence: it wasn’t supported when you asked, but it is now, it’s live. When a step in your workout has a cadence target, you’ll see it next to your live cadence (“82 / 90 rpm”), in the step list, and it’s spoken in the cue before the step starts. It’s a guide only, the app doesn’t nag you if you’re off.

One thing: you need to import your workout file again, since sessions imported before today don’t carry the cadence. Let me know if it shows up correctly with your IntervalCoach workouts, I only had my own files to go by.

---

<div class="post-metadata">

**Author:** ![ohmax](https://forum.intervals.icu/user_avatar/forum.intervals.icu/ohmax/32/50303_2.png) [@ohmax](https://forum.intervals.icu/u/ohmax)\
**Post date:** [13 November 2026 14:22 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601/9 "2026-11-13T14:22:44Z")

</div>

Exactly what I was after. I’m about to purchase my first HT and due to budget constraints I think I’m going for the Decathlon D100 which is entry level but should be fine for recovery virtual rides or just some light endurance to complement my long runs. Could you tell me in practice the setup I need to make? With a D100 outside the box, what are the precise steps to take. I have a Garmin FR955 for watch, I could also use Polar H10 for HR but optionnal, and then my Samsung smartphone for Android screen next to the bike. I’ll have my virtual ride configured in Intervals calendar. If you could also share some print screens it will be helpful for me.

---

<div class="post-metadata">

**Author:** ![Pius\_Gloor](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pius_gloor/32/80072_2.png) [@Pius\_Gloor](https://forum.intervals.icu/u/Pius_Gloor)\
**Post date:** [13 November 2026 15:01 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601/10 "2026-11-13T15:01:16Z")

</div>

Hallo Arthur  
Thanks for the quick reply and fix for the target cadence!  
I have downloaded another workout from IntervalCoach.  
It includes target cadence as well as additional text events.

Both are displayed perfectly in Croissant Ride.  
I’m really impressed!

 ![Screenshot_20261113-153932](https://forum.intervals.icu/uploads/default/original/3X/2/8/28716547546432e658a3186b648aa6c660d54608.jpeg)

If you don’t mind, I’d like to suggest a few ideas that could make the app even better:

- German, or any other language support for cues, selectable via a long press on the icon.
- Option to disable the background animation on smaller smartphone displays, also accessible via a long press on the icon.
- Posting to intervals.icu doesn’t seem to work – only a blank white screen appears.

Thank you and best regards  
Pius

---

<div class="post-metadata">

**Author:** ![Croissant](https://forum.intervals.icu/user_avatar/forum.intervals.icu/croissant/32/95970_2.png) [@Croissant](https://forum.intervals.icu/u/Croissant)\
**Post date:** [13 November 2026 20:36 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601/11 "2026-11-13T20:36:25Z")

</div>

Hey I use a D100, an amazfit on the arm for the heartbeat, and I’ve a 30e fan from Amazon, more than enough in my opinion, I don’t see the need to upgrade 🙂

---

<div class="post-metadata">

**Author:** ![Croissant](https://forum.intervals.icu/user_avatar/forum.intervals.icu/croissant/32/95970_2.png) [@Croissant](https://forum.intervals.icu/u/Croissant)\
**Post date:** [13 November 2026 21:15 UTC](https://forum.intervals.icu/t/croissant-ride-a-minimal-erg-trainer-app-in-the-browser-fit-with-laps-rr-intervals/133601/12 "2026-11-13T21:15:39Z")

</div>

Three updates, all live now:

- Intervals.icu: found it, the app was sending you to a page that doesn’t exist on their site. It now opens the right one. That was broken for everyone, so thanks for flagging it.
- Plain background: press the globe button until you reach “Plain background”. It’s a still picture, the 3D world stops being drawn, so it should be much lighter on your phone. The choice is remembered.
- Coach notes: long ones now wrap instead of being cut off.
- No extra language planned for now, sorry 😃 that would make the app too heavy
