I built a voice training journal that syncs with intervals.icu, and I'd love your feedback

Hi everyone,

I’m Matteo, and I’ve spent the last while building something called Unpack. It’s a voice-first training journal, and now that it talks to intervals.icu I wanted to introduce it here and ask a few of you to try it.

It started from something I kept noticing in my own training. My watch and intervals.icu capture the numbers beautifully, but the part that actually explains a session lives in my head for about a day and then it’s gone. Honestly, some days it’s gone by the time I’ve finished my shower. How the legs really felt, the niggle that’s been whispering for two weeks, the bad night of sleep that makes today’s pace make sense. That qualitative layer holds a lot of the meaning, and it’s exactly the thing most of us never have the patience to type out after a workout.

So Unpack lets you just talk. You say a sentence or two after training, in your own words, and it turns that into a structured journal entry that’s yours. I think of it like a real diary. If you’re honest and a bit generous when you write, then months later when you read back you actually see the patterns. The more openly you talk to it, the more useful it becomes to you later.

I want to be clear about the AI part, because I know how that word lands. Unpack doesn’t coach you and it doesn’t generate recommendations or tell you what to do. The AI is an invisible layer that handles the boring mechanics, like turning your voice into text and writing a tidy summary of what you said. Everything it writes is grounded in your own words. It isn’t there to invent anything, though I’ll be honest, every now and then the model gets a little creative and slips in something you never quite said. When it does, you just fix it with a tap. And your synced workout data is never sent to any model.

Why I care about the intervals.icu connection specifically: I believe a lot in the value good coaches bring, and this isn’t trying to replace that. It’s the opposite. So much qualitative context never reaches the coach, either because it gets lost or because we don’t have the discipline to write it up. Unpack is meant to make capturing it effortless. You connect your account, your workouts sit alongside your notes, and those notes can land on your intervals.icu activities, so if you work with a coach the context reaches them without any extra work from you. If you’re self-coached, it’s the same gift to your future self. A real thank you to David for giving me access to the API and making this possible.

A big part of what I care about is fitting into wherever you already keep your training, instead of asking you to move somewhere new. intervals.icu was the first integration because this community is exactly who Unpack is for, and it won’t be the last. Strava is on my mind, though I’m still thinking that one through, since notes there can be public and a private journal doesn’t always sit well next to a public feed, even if plenty of people keep their Strava private. I recently got access to TrainingPeaks and Garmin, and a direct channel with Coros is something I’d really like, because their on-device voice recording is genuinely cool and I could automate a lot for the people who use it. These are intentions in the pipeline rather than promises, honestly, because the approval and review process on each platform is a bit of a lottery and mostly out of my hands. If there’s a platform you live in that I haven’t mentioned, tell me. It really helps to know where you’d want this to reach.

On privacy, since this is personal stuff: voice recordings are deleted as soon as they’re processed, your journal is encrypted at rest, and nothing is ever used to train AI models or sold. You can delete your account and everything in it from the app at any time.

Where it’s at: Unpack is in early access and free, and I’m working on it actively. The journal itself will stay private and free. If Unpack ever starts charging for something, it would be on the coaching side or API integrations, not your own diary. Right now I honestly just want to understand whether this is useful and make it better.

It’s live on the App Store, so on iPhone you can download it and start straight away. On Android it’s still in Google Play closed testing. Rather than grabbing random testers just to clear review, I’d much rather have a small group of real athletes using it the way it’s meant to be used. That trusted-tester group also gives me a direct line to the people who care enough to tell me what’s wrong, which matters a lot to me right now, because I’m genuinely trying to validate whether the core idea holds.

If you’d like to try it:

Thanks for reading, and thanks to this community. Happy to answer anything here, or reach me directly at [email protected]. And if you’re a coach who believes in this idea, please get in touch. I’d really like to find a few experts who can help me understand how to shape where this goes next.

Matteo

1 Like

When it syncs with Intervals I assume it is populating the post activity notes field?

My first thought it this would be amazing for multiple platform users. Push one activity note to our various sites.

Also, where do we connect the two as I am not seeing any of that in your settings.

Yes, exactly. When you connect intervals.icu and turn on note publishing, your structured spoken note gets written into the activity’s description. It goes into its own Unpack section, marked off with a delimiter, so anything you’ve already typed in there stays untouched. We only ever write inside our own block. And it stays in sync: if you edit the note in Unpack, that section updates on the activity instead of piling up a second copy.

On top of the per-activity notes, the weekly and monthly summaries get pushed too, as calendar notes. The weekly one docks to the whole week using intervals.icu’s “For week” notes, and since intervals.icu doesn’t have a month object, the monthly summary lands as a note on the first of the month.

Your multi-platform instinct is exactly where I want this to go. The idea is you talk once and the note reaches wherever you keep your training. intervals.icu is the first integration because this community is who it’s for, and TrainingPeaks, Garmin and others are in the pipeline, though I’ll be honest that the approval timelines on each platform are mostly out of my hands.

On not seeing it in settings, that’s on me, not you. The connection lives under Settings > Connections, with a “Publish notes” toggle that’s off by default, but during early access I’m rolling intervals.icu out to testers through an allowlist, so it doesn’t show for everyone yet. If you drop me a line at [email protected], or join the trusted testers, I’ll switch it on for your account and you can try the whole flow.

1 Like

A quick update for anyone following this thread.

You can all use it now. intervals.icu is open to everyone, the early-access allowlist is gone. Android has left Google Play closed testing too, so it’s an ordinary install from the Play Store, the same as the App Store. The connection is under Settings → Connections, with a “Publish notes” toggle that stays off until you turn it on.

It works in your language. Talk to it in German, Spanish, French or Portuguese and your entries and recaps come back in that language. The app’s own buttons and menus are still English and Italian only (that part I translate by hand) but what you say, and what it writes back, isn’t limited to those two. More interface languages are coming.

Garmin connects directly now, alongside intervals.icu, TrainingPeaks and Wahoo. On Strava, since I said in the first post that I was still thinking it through: I built it, and then Strava declined to raise my user limit past ten. It works, it simply stays closed for now, and that one is out of my hands :frowning:

Recaps got more trustworthy. The “5 sessions, 3 rides, 2 runs” line at the top used to be written by the model, and it got it wrong more often than I’d like. Counts and volume are computed in code now, from your actual entries, and withheld entirely if a session is missing its duration. The model writes the prose, not the sums. Your synced numbers still never reach a model.

The write back to intervals.icu got better. A new tidier marker inside the activity description, better bullets in the calendar notes, and a fix for a note that would retry forever against a dead target (thanks for reporting it!).

Still early access, still free, and the journal itself stays private and free. Thanks again to David for the API access.

If you try it and something is off, tell me, here, or [email protected].

Matteo

Downloaded and tried the iPhone app yesterday. I was looking forward to this - seems like it has lots of promise. I connected and synced with Intervals and the app pulled in some past history. I then added voice notes to the last five or six past workouts, updated the morning brief. I was looking forward to having the addition information about my training written to Intervals. Here are my impressions:

  • Transcription is not always accurate, and there is no way I could find to correct the transcript and redo the AI summarization. I really wanted to be able to type in my comments or at least correct the transcript before the AI does its work. I found a delete button, but it turned out that this deleted the entire workout from the log, not just the transcription. I could not find a way to get the workout back to re-comment it.
  • Today’s “Daily Briefing” said, “You slept well and feel recovered and energetic today”. I did not add that. It’s not accurate. Looking at the “Your device data” section, my best guess is that the app pulled sleep hours, quality, HRV, and resting HR from Intervals and Gemini looked at those and decided I was “recovered and energetic”.
  • The app turned short, easy walks into “Cardio” activities in the log, but the walks were super easy, just a way to loosen my legs.
  • The app created a “Ride” in the log when no such thing happened. The AI comment was “You completed a base recovery ride, feeling the effort from the previous day’s gravel ride.” My transcript actually reads “Today was a recovery day from the gravel ride yesterday. Definitely feel like I worked a lot, even though it was a base ride. Went for a walk in the morning to stretch my legs and played an easy round of disc golf.”
  • The “Story” in the log entry often feels like just that - a story that the AI created, and not how I would have summarized my activity transcript.
  • FYI, I found my private notes on Strava. Unpack wrote to Intervals and updated the activity description rather than adding private notes and so Intervals dutifully synced that to Strava. I had to go into Strava and remove all of the private notes that Unpack wrote. Here’s an example: “[unpack.fit] I woke up feeling stiff and tired from the previous day. It was very hard to fall asleep, and I didn’t feel as rested as I had hoped. Body 2/5 · Sentiment negative · Residual fatigue yes [unpack.fit]”

While this is a really interesting idea, it’s not for me.

1 Like

Andy, thanks for writing all this up.

The Strava one first. We were writing into the activity description on Intervals, and that field can carry onward to Strava depending on your sync settings. We can’t see that setting from our side, so we couldn’t warn you. We should have been using the activity’s private notes instead. That’s the change we’re making in the next few days, for accounts connected to Intervals, and we’ll clear our text back out of the descriptions we’ve already written to. Sorry it landed on you.

The rest, briefly, but happy to chat more if anyone has suggestions / comments:

  • Correcting a transcript. You can read it, you can’t edit it. Right now the only fix is a follow-up recording. Typed entries and editable transcripts are both on the list, near the top.
  • Delete. It removes the whole activity rather than just the note, and it leaves the imported workout marked as handled so it doesn’t come back. Both being fixed.
  • Walks as Cardio. Our sport list hasn’t got a walk in it, so Intervals’ Walk and Hike land on Cardio. Adding it.
  • The ride that didn’t happen. You mentioned the previous day’s ride while describing a rest day, and we turned it into a ride you’d done. Models are good at promoting something you referred to into something that happened, and keeping that boundary straight is where most of our work goes. This one got through.
  • The briefing. Two things worth separating. Your device data, sleep and HRV and resting HR, never goes to the model, it’s only displayed. And the part that did go wrong is a habit we’re chasing: it rounds comparatives into absolutes, so “better than yesterday” comes back as “good”. That’s how you end up with a line you wouldn’t put your name to.
  • The Story. Fair. That’s a question about what that screen is for rather than a prompt to tweak, and I’d rather answer it properly.

Fair enough that it isn’t for you. Unpack is early and built by one person, and reports like this are what move it along. Thank you for the time.

Thanks for the commentary, Matteo. As a developer, I appreciate the difficulties getting a model to do what you want, any model. I also appreciate your efforts to look at the issues I noted.

Good luck with your app! I’ll keep an eye on it.