
I have always wanted to try making something like this.
You know how pro riders often tape a stem sheet to their bike with a nutrition plan, course profile, and so on? I wanted to imitate that.
Whenever I go on a long ride, I usually estimate the total elapsed time including breaks before deciding when to start. Even while riding, I often try to predict how many hours it will take from where I am to the next pass. On routes I have never ridden before, I also check whether there are convenience stores along the way and think about how much food I should carry.
I had been thinking that if I could make those predictions neatly and tape the plan to my stem, it would be useful. I just was not sure whether an app that could do that already existed.
I could have looked it up, of course, but AI has been advancing at a ridiculous pace lately. Apparently, even without knowing much about programming, you can now make app-like things by saying, “I want to do this.” So I wondered if I might be able to make one myself. That was where this all started.


From there, every step went more or less like that: a long back-and-forth chat.
The goal became to take a route created in STRAVA, predict the gross riding time, and output the predicted distance reached each hour as a PDF small enough to tape to the stem.
I used ChatGPT Plus, thanks to a one-month limited-time free upgrade, and something called Codex. I do not really understand it, except that people say it is “amazing.” My knowledge of AI is about that shallow. I am still the kind of low-IT-literacy person who searches on Google and works down from the top results until I find what I need.
The whole process was confusing and full of trial and error, so I may write about the details another time. Roughly speaking, the flow was this.
1. Understand my own riding tendencies
To make predictions, I first needed to understand myself. I downloaded past ride data from STRAVA and had it analyzed in various ways. When I asked how to do that, ChatGPT explained the steps.
2. Use the analysis results to output a predicted schedule as a PDF
At first, I only wanted a list of the predicted distance reached every hour. But as I kept going, I realized it could do more, so I started asking for things like “show whether there is a convenience store in this section” and “calculate recommended calories.” The amount of information kept growing until it no longer fit on the stem sheet.
3. I got greedy and wanted it displayed on a map too
Once the stem sheet started working, I wanted more. I asked it to output a smartphone map showing hourly predicted points, convenience store availability, and even current location. I had no idea how to handle that part either, and there was plenty of trial and error, but I somehow got it to land.
In short, I kept asking, “I want to do this. How do I do it?” and it kept replying with things like, “Paste this into such-and-such.”

With an input screen like this, I can select a route map made in STRAVA and get the result.

This is the stem sheet when the start time is set to 4:00 a.m.
There are some mysterious abbreviations on it. That is because if the words are written out normally, they exceed the column width, overlap, and become unusable. For example, on the 9h row, “M350” means a Mountain route, in other words a route including serious climbing such as passes, plus the recommended calorie amount. “ONI+GEL/WTR” means to resupply with onigiri, gel, and water. Onigiri is not absolutely required, but ChatGPT kept recommending it, so I went with it.
“CVS NO” means there is no convenience store near that point on the route. This was one of the things I realized I wanted while building the system. If I see that, I can think, “Okay, I need to buy snacks for the next two hours here.” That is useful.
As I kept building it out, I started thinking it would be even better if the convenience stores near each predicted hourly point could be shown on a map. So I ended up making a map that displays convenience-store availability at each point.
Then I added predicted arrival time and current location as well. By that point, it had become a fairly packed specification.
Because it is possible to keep adding things endlessly, I started wanting to cram in “this too, and that too.” But there is no end to that, so I decided to stop at a reasonable point and take it on a test ride.
I printed the PDF using a network print service and taped it to my stem. I splurged a little and printed it in color on glossy paper. 120 yen per sheet. Expensive.
The test route this time was a one-way self-powered ride out to West Izu. On the way, I would stop at Atami to leave my luggage, ride around West Izu, and return to Atami: 220 km with 4,000 m of elevation gain.
The stem sheet and map were generated assuming a 4:00 a.m. start, but in reality I started one hour earlier, at 3:04.
Before dawn, I headed south along Nakahara Kaido. The prediction said I would have covered 18 km after one hour. I rode along the rolling road wondering how close it would be, and almost exactly at the 18 km point, one hour had passed. I surprised myself.
Two hours in, the progress was still almost exactly as predicted. The sun was already up, and I rode on under clear skies toward the Kaname River area.

Mt. Fuji was visible through the haze. I hoped it would stay out from behind the clouds, and checked the map I had made on my phone.

It shows things like current location and estimated arrival time at the final point. “Schedule” says I am 64 minutes ahead because the output was made assuming a 4:00 a.m. start. Since I actually started at 3:04, I was really only about eight minutes ahead. Confusing. I need to improve that part.
Thinking about things like that, I passed Odawara, rode beside the calm Sagami Bay in a very good mood, and arrived at Atami Station. Finally, I could drop off my backpack and become lighter.

From here I would climb Yamabushi Pass from Izu-Taga, but then I had a thought.
On this route, the section from Atami to Shuzenji overlaps between the outbound and return legs. Even if the map can get my current location, if it cannot tell whether I am on the outbound or return leg, it might calculate the ETA as if I were already on the way back, even though I am still in the first half of the ride.
Hmm. I had not considered that at all. With that in mind, I climbed Yamabushi Pass for the first time in a while. It is a steep one, but only about 4 km long, and near the pass there is a wonderful section overlooking Sagami Bay, so I like this climb.

Outbound Yamabushi Pass finished. It was 8:40 at that point. When I checked the prediction map, the ETA was after 9:00 a.m., which meant the system thought I was on the return-side Yamabushi Pass.
I rode down toward Shuzenji thinking I would have to fix that. The map issue aside, the schedule on the stem sheet was still only about 15 minutes behind my actual progress. Even six hours after the start, the prediction accuracy was fairly good.
From Shuzenji I headed to the roadside station at Tsukigase. This time I was riding a standard route: south from Toi to Ugusu, then climbing Nishina Pass and heading north on the West Izu Skyline. The climbing route to Nishina Pass was in a period with partial construction restrictions, but I found out that those only applied on weekdays, so I could include it in the route.
I stopped at the Tsukigase roadside station for a break. I had not planned to stay long, but when I saw a kitchen truck selling “ultimate fresh juice,” I decided to try it.


Mandarin orange! Mandarin orange! So good! I demolished the small size instantly.
I wondered if I should have gone for the large, but if my stomach got too full, the gentle climb toward Funabara Pass afterward might bring it back up. So I think it was the right choice.
After that I restarted and headed toward Toi. I passed through the Funabara Tunnel, enjoyed the descent to Toi, and arrived there at 10:30. At that point I was about 30 minutes ahead of the prediction.
I made a rough calculation: if I rested here and left around 11:00, I would reach Ugusu around 11:30 to 11:45. I could rest and resupply at the convenience store there, then spend about 1 hour 15 minutes climbing to Nishina Pass and arrive around 13:00. I figured I would probably return to Atami by 17:00 at the latest.
In practice, if I became too fixated on the stem sheet prediction, I might end up being controlled by it, which would defeat the purpose. I started thinking it was fine to rest when I wanted to rest, and if I did not need a full break, just stop briefly and eat some food.

The toast in the toast set had a nice milky flavor and was quite tasty.

I stared out at Suruga Bay for a while and let my mind go blank.
At this point I had ridden 140 km, so in terms of distance I was nearly two-thirds done. But Nishina Pass and the West Izu Skyline still lay ahead, so mentally it still felt like I was before the halfway point.
I restarted at 11:00 and headed for Ugusu.

Looking back along the way, I could see Mt. Fuji clearly from the gentle climb. I arrived in Ugusu at 11:30, just as predicted. The prediction system was doing well, but my old-fashioned personal estimate was not bad either.
I topped up drinks and food, and finally headed for Nishina Pass.

The ridge of Nishina Pass rose straight ahead beyond a short flat section. It was not an immediate wall of gradient, but a perfect little prologue to build excitement. Even knowing it would be hard, I felt thrilled.
Once the gradient became serious, the road was still relatively covered by trees, but the strong summer-like sun was beating down. My full 700 ml bottle was disappearing quickly. I got through a curve that apparently has an inside gradient of 30%, reached a short flat section, then returned to double-digit gradients. Eventually the road opened up with Suruga Bay below, and that was Amagi Kogen Farm.

I passed beside a cowshed, and for the first time on this route I saw cattle grazing calmly in the pasture. They all looked at me with somewhat suspicious expressions.

After all that, I reached Nishina Pass. The time was exactly 13:00. My own prediction was perfect. According to the stem sheet, I should already have descended from there and be around the climb after Kazahaya Pass, so I figured I was a few minutes behind, and ate the bite-sized warabi mochi I had bought along the way.
From here, only the climb to Mt. Daruma on the West Izu Skyline and the climb to Yamabushi Pass on the Ohito line remained. It was 60 km to Atami.
I calculated that I could reach Shuzenji in about two hours and restarted toward the West Izu Skyline. Mt. Fuji, which had been hidden by clouds for a while, was visible at key spots, so I expected the classic viewpoints to be good.
Before entering the West Izu Skyline, I descended quite a bit and then climbed for about 30 minutes toward Mt. Daruma. Along the way I could see the road down to Toi far below, the same road I had descended that morning. It made me feel how far I had ridden.
Near the end of the climb, I looked back and could see Nishina Pass far in the distance. From there I descended briefly to the parking area before Mt. Daruma, where you can look down toward Heda.

Then I climbed back a little, rounded Mt. Daruma, and descended again.

I came here entirely under my own power! I used to think this area was impossible unless I started from Numazu, Shuzenji, or maybe Ito. I never expected I would come here by riding all the way myself.
As I descended toward Shuzenji Station, I was thinking I would eat shiitake soba at the attached Izura shop. As I lost elevation, the heat returned, and I started leaning toward cold soba instead.

The large portion was quite generous, but the cool soba felt so good going down that I finished it easily.
After taking a breather, I restarted. Yamabushi Pass has about 7 km of gentle climbing before the serious part begins. After that, it is just under 4 km with sections around 10%, and then it is done. The hard part was almost over.

Before I knew it, I had arrived at Yamabushi Pass with the western sun shining from this side. It was 15:50, only a few minutes behind the planned progress. Thinking I would reach Atami Station around 16:30, I started the final descent.

When it comes to Yamabushi Pass, this bridge view over Sagami Bay is the perfect closing moment for a long ride. A small breath of relief.
I returned to Route 135 and headed for Atami. In the city, I got caught by more traffic lights than expected, but at 16:28 I arrived in front of the station coin lockers and stopped the computer.

The predicted gross ride time was 13 hours 17 minutes, while the actual elapsed time was 13 hours 23 minutes. The prediction system I made turned out pretty well.
What surprised me most was that the accuracy was this good despite including the uncertain elements that are part of any long ride, such as cafe and soba breaks in addition to convenience-store stops. Of course, when building the prediction system, I had designed it to include those factors in the gross ride time and intermediate progress predictions, but it seems more usable than I expected.
Now I want to keep improving the map and reconsider the contents of the stem sheet so that the whole thing becomes easier to use.

Leave a Reply