Etc. · Technology

Odin Gets a Coach

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.

A glowing teal point at the center of a dark field of small white dots joined by faint curved lines, with one bright line winding away from it across the frame and a heartbeat wave traced along part of that line

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.

Phone screenshot of Odin's Coach screen on the Week tab: FTP 224 W and Freedhem Gravel 39 weeks at the top, a finished 2 hour long ride, then Rest, a 75 minute endurance ride, strength, a Zwift 30/15s session and more, with a note at the bottom saying the coach moved the long ride to Friday and rest to Saturday
Week. The plan, with a note at the bottom of what the coach changed.
Phone screenshot of Odin's Coach screen on the Food tab: 2698 of 2850 calories with bars for protein, carbs and fat, a box to type what you ate with camera and photo buttons, a row of usual foods, and the day's logged items below
Food. Today's target is the 2200 base plus 650 for the extra riding.
Phone screenshot of Odin's Coach screen on the Coach tab: a chat where I say my legs got tired on the first 2 hour ride and ask about more sugar, and the coach answers about carbohydrate per hour and whether to log the sugar in my bottles
Coach. The chat, after my first 2 hour ride.

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.

Seven glowing teal dots in a row joined by a thin line, with one amber dot above the row and a curved amber arrow carrying it down into a gap in the row
When the week changes, a workout slides into a different day.

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.

A glowing teal circle like a plate seen from above, with small dots and curved lines inside it, and a soft beam of light running from it across a set of thin vertical lines like a barcode
A plate on one side, a barcode on the other. Two of the ways food gets logged.

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.

A black basket lined with printed paper and piled with tortilla chips, a menu on the table underneath
The chip basket. One photo.
A white plate with three small tacos on corn tortillas, topped with shredded meat, cabbage, chopped onion and cilantro
The tacos. One photo, and it logged these too.

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.

← More Technology