Open API · editor deep-link
Drop one of these badges next to any workout your app generates. It links to the Indoor Bike editor with the workout already loaded - the rider tweaks it, sends it to their phone, and rides. No account, no SDK, just a URL. Optional, open source, always welcome.
One mark, three treatments. The filled ember badge is the default - use it wherever it has room to breathe. Reach for the outline when the badge sits in a busy interface, and the chip when space is tight. Every badge carries the chainring mark on its home turf: a dark tile, so it reads on any background.
Standard sits comfortably beside a button or a workout title. Small slots into table rows, cards, and dense lists. Don't scale below small - the mark stops reading.
Four phrasings, same voice - direct, second person, no exclamation marks. Lead with the brand when you want recognition, or with the action when the context already makes the brand obvious.
The filled badge is the safe pick everywhere. The outline comes in two inks - light text for dark UIs, dark text for light pages. Always keep clear space around it equal to the height of the mark.
The badge is just an anchor. Point its href
at the editor and describe the workout entirely in the query string. Everything below is optional except
s, the segments.
https://indoorbike.app/editor/?v=1&name=Sweet+Spot+4x10&ftp=250&s=10m@55,4x(10m@90;5m@60),8m@50
| Param | Req | What it does |
|---|---|---|
s | yes | The segments. DURATION@POWER items, comma-separated. m=minutes, bare/s=seconds, power is % of FTP. Repeats: 3x(8m@100;4m@55). |
name | no | Workout name (≤80 chars). |
desc | no | Description (≤600 chars). |
tags | no | Comma-separated labels, e.g. Threshold,Sweet Spot. |
ftp | no | Rider FTP in watts (50–600) so the watt preview is correct. |
Full contract: indoorbike.app/editor/llms.txt. Encode spaces as +; the
segment characters @ , ; ( ) x are URL-safe and can stay as-is.
These assets are open source and entirely optional - but if you use them, keep them recognisable.
Grab a single SVG, or take the whole set. Each file is self-contained - fonts fall back to a condensed sans when embedded as an image, and render in full Bebas Neue when inlined.