Odin Gets a Coach
October 9, 2026
The last Odin post was a little under a month ago. I've changed a lot since then, but most of it went into one thing. Odin is now my cycling coach, and it keeps track of what I eat. This post is mostly about those two. The smaller stuff is at the bottom.
Why a coach
I like having somebody build me a structured program. That's how I grew up in sports. Odin does that, and it also gives me a coach I can chat with whenever I want. I asked it to build the plan and then keep adjusting it as it learns more about me: my rides, how the workouts felt, anything else it can see.
It's an experiment. The race I'm pointing it at is Freedhem Gravel 100, a 100 miler on July 10, 2027, up in Minnesota. I want to see if Odin can get me ready and competitive for that. If it can, I'll dial it up and hire a real coach for Unbound 200 in 2028, where I'm going for the top 20% of my age group.
It started from my own numbers. My FTP is 224 watts, from the Zwift ramp test on October 5. It worked backward from both race dates and split the season into base, build, specific, taper and recovery. Right now I'm in base, which runs through the end of January.
The week is built around my mornings. Five or six days a week. Weekdays are about an hour, because I'm up at 5:00 and the kids are up at 6:30. Weekends are a 2 hour ride, plus one 3 to 5 hour ride a month. Strength is twice a week now, with calf work and upper body in every session since my Achilles tear. The indoor workouts go to Zwift on the Apple TV through intervals.icu. The first five went over and intervals.icu accepted all of them.
The coach lives in its own screen in Odin, with three tabs: Week, Food and Coach. These are the real screens from my phone.
It changes the plan
A plan that never changes isn't coaching, so it has rules for that. A missed workout gets moved, not stacked on top of the next one. After each workout it sends a notification asking how it felt, and the answer changes what comes next. If I can't make a day, I tap that day and say so, and Odin re-plans the week. I don't pick where things go. It tries an easy-day swap first and only stacks workouts when the load still makes sense.
It also counts every ride in a day, not just the main one. Two short intervals aren't the same as riding tempo for the same amount of time, and it scores them that way.
One thing I found along the way. Notifications on my phone had been dead since the app redesign on August 23. Nothing was subscribed, so every reminder since then had gone nowhere. The coach needs them for the check-ins, so I fixed it on October 7, and a test notification went through.
Talking to it
The coach has its own chat. It answers from a sheet of my numbers, and I told it to be honest and go off the data. It runs on GPT using my credits, and the two replies I looked at cost under a tenth of a cent each. In a test run it told me food had been logged on only 1 of 14 days, so it couldn't say whether I was eating enough for the training. That's the kind of answer I asked for.
The chat screenshot up top is from after my first 2 hour ride. I told it my legs got tired but I made it through, and that I could try a little more sugar, 40g, on the next long ride. It read that as 40 g of carbs per hour, so about 80 g total. It also explained why: 40 g for the whole ride would only be 20 g an hour, which isn't an increase from the 60 g I'd already had. Then I asked if I log the sugar I put in my water bottles. It said yes, because it counts as carbs and calories.
What I tell it used to scroll away after about 20 messages. Things like fueling on a ride, how my legs felt, what to try next. Now a reply can save up to three notes, and I can see every one and delete it.
Lifting works the same way. I log the weight on the strength card, tap easy, right or hard, and it suggests what to lift next time. My smallest plate is 5 lb, so a barbell moves in 10 lb steps and it plans around that.
Food logging
The baseline is 2200 calories, which is about what held my weight last year before I tore the Achilles. Big training days get extra. I also told it I don't want to drop below 185 lb, and it watches for that.
I log a meal by typing it or taking a photo. The typing part taught me something about running a local model. Odin's local one is bad at multiplying. I gave it "three boneless, skinless chicken thighs" and it said 234 to 273 calories, six runs out of six. The paid model said 564. So typed meals and saved foods now go to the paid model, about 0.17 of a cent a meal, and the local one is only the backup.
Packaged food gets scanned. The barcode is read on the server and looked up in Open Food Facts, and it remembers the product after that. If the barcode won't read, it doesn't guess. I found that out with a Red Bull on a curved can, photographed sideways. It got logged as "vitamin carbonated beverage, 5 kcal." Now it says it can't read it and asks for a straight-on barcode or a photo of the label. There's a camera button that opens the camera and a second button for a photo I already took.
Today it went the other way. I took a photo of a basket of chips, then a photo of a plate of tacos. It read both correctly and logged them. I didn't type anything or do anything else.
The part I like most is usual foods. I can save my normal coffee, and when I log something close to it, it asks if that's my normal coffee. A yes logs it. Recipes work the same way. It estimates the whole pot once, like a batch of lentil chili that makes 8 cups, and after that I log by the portion.
Today I asked if I could see all the recipes and meals I've saved, so I can fix them. There's a list now where I can edit or delete any of them. Deleting one doesn't change the meals I already logged.
One bug worth mentioning. The database counts days in UTC, so after 7 PM my dinner counted toward tomorrow and dropped out of the day's total. Meals now use Central time.
Everything else
Odin installs updates on the servers overnight, between 1 and 3 AM Central, and only reboots when it's safe to. I can take a photo of a bottle of wine and rate it, or check one while I'm in a store, and Vivino is the only outside score it uses. An Instagram post can be more than one photo now. It can set the thermostat's mode, temperature and fan, and open a streaming app on a TV. Studio, the thing I write these posts in, has a Suggest a post button that looks at my photos, notes, workouts and past posts and comes back with ideas.
A lot of the coach is only a few days old, so the real test is following it for a few weeks. I'll write about how that goes.