The AI Coach Layer
Swap the generic progress bar for a coach that notices what's true about this one user.
Hooked's variable reward of the self ran on the same trick for everyone. Zynga handed out the same level-up fanfare to every player. Todoist handed out the same "inbox zero" badge to every user who cleared their list. That is a broadcast, not a coach, and broadcasts wear out the moment a user notices the pattern repeats for the person next to them too. The 2026 version of that reward reads what actually happened to this one user over the last month and says something that is only true for them.
What to do: Feed each user's own recent activity, not a global average, into a model that generates a short personalized read after key sessions. Compare this user against their own last 30 days, not a leaderboard of everyone else, and surface the one thing that changed for them specifically.
Why it works: A reward calibrated to your own baseline reads as noticed. A reward calibrated to everyone else's average reads as a template, and a template stops working the day a user clocks it.
Example: Strava's Athlete Intelligence reads a subscriber's last 30 days of pace, heart rate, elevation, power, and Relative Effort and turns it into personalized milestones and coaching notes instead of one leaderboard for the whole base. It shipped in beta in October 2024 and moved to full launch in February 2025. Strava's own press release cites the reason: over 80% of users rated the insights "very helpful," a rate that held steady across both runs and rides.
Walk it through
Here is what Strava actually ships, and what it takes to build the same shape into your own product.
1. Look at what one workout actually surfaces.

Three cards, and none of them are generic. The first states the raw numbers next to a plain-language read: "Nice work on a challenging Griffith Park run with Emma. Impressive uphill effort and endurance." The second calls out a PR against that athlete's own history, not a global bar: "You've upped the ante on pace and heart rate zones, proving progress isn't just about more miles but smarter, harder efforts." The third breaks down time in each heart rate zone and hands back a specific nudge: "You're nailing endurance, with most of your effort in Zone 2. Dabbling more in Zone 3 could bring some exciting gains." Every sentence needs that athlete's own last 30 days to be true. None of it survives as a shared template.
2. Build the same shape for your product.
- Pick 3 to 4 metrics you already log per user per session. Strava picked pace, heart rate, elevation, and effort. Yours might be documents shipped, deals closed, words written, workouts logged.
- Store a rolling 30-day baseline per user, not a lifetime average. The baseline is what turns "you did a thing" into "you did more of the thing than you usually do."
- Generate one or two sentences of natural language, not a chart. Strava's cards read like a person talking, not a table of numbers. That is what makes them feel like a coach instead of a report.
- Ask if it landed. Strava's card has a literal "Helpful?" tag. That signal is what tells you which insight types to keep generating and which to kill.
The read
- The comparison point is the whole trick. "Against your own last 30 days" reads as personal. "Against the average user" reads as a stat nobody asked for.
- A sentence beats a chart. Language that names what happened feels noticed. A number sitting in a dashboard feels like reporting.
- Timing is part of the reward. Strava's cards appear the moment the activity uploads, while the user still cares about that specific run. A weekly digest of the same insight lands flat.
Steal it
You do not need a research team to start this. Pull whatever event and usage data you already log per user, most products have more of it sitting in the database than they use, and write rules before you write a model: if this week's count beats the trailing 30-day average by some threshold, generate a sentence that names the specific number and the specific behavior. Ship that first. The natural-language layer on top, the part that makes it read like Strava's copy instead of a formula, is the upgrade you add once the comparison logic is solid.
Defend it by keeping the coach honest. The fastest way to burn the trust this tactic depends on is tuning the model to find a "win" in every session, even the bad ones. Strava's Zone 3 nudge above is not pure praise, it tells the athlete what to change. A coach that only cheers stops being read as a coach and starts being read as marketing copy, and users unsubscribe from marketing copy in their head within a week.
Gotchas
- New users have no history to compare against. A 30-day baseline needs 30 days of data, so the coach goes quiet exactly when a new user needs the most encouragement. Have a generic fallback for the first month and switch to the personal read once you have a real baseline.
- The same insight said twice stops being an insight. If your rule set only has two or three shapes, users will notice the repeats fast. Build more templates than you think you need, or the "personalized" layer reads as scripted by week three.
- Do not let the model invent a number. Every figure in the sentence has to trace back to a real log entry. The moment a user catches an insight claiming a PR that did not happen, they stop trusting every other number the product shows them too.