Training block review board for your plan versus actual

By General Input

See every planned session next to what you actually ran, with weekly compliance, ramp rate, and an AI review that drafts next week.

Integrations

  • Google Health
  • Google Sheets

Type

App

Categories

  • Personal Productivity
  • Operations

Build me a training block review board: an app where the plan I wrote and the training I actually did sit side by side. The plan lives in a Google Sheet and the actual side comes from Google Health. Nothing runs on a schedule; I open the app and work in it.

Plan side. Let me pick a spreadsheet and tab, and read the plan with Get Values (use Batch Get Values when the app needs several ranges or tabs in one pass). The sheet has one row per planned session with columns for week, date, session type, target distance and target duration, plus a note column the app writes back into. Read the header row and map columns by name rather than hardcoding positions, so my sheet layout can differ.

Actual side. Pull individual workouts with List Data Points on the Google Health exercise data type across the block's date range, taking start time, activity type, duration, distance and heart rate for each session. Important: the exercise data type defaults and caps at a pageSize of 25, unlike the 1440 default on other types, so page through with nextPageToken until the whole range is covered. For weekly volume, use Daily Roll-Up Data Points on distance and on active-zone-minutes rather than summing sessions by hand, and use Get Data Point when a single session needs a full re-read.

The main view is one row per training week across the block. Each week shows planned volume against actual volume in both distance and time, a compliance percentage (sessions completed against sessions planned, and actual volume against target volume), and the ramp rate, meaning how much volume changed against the previous week. Give me a visible trend of volume across the whole block so the shape of the build is obvious at a glance.

Flag the injury-risk weeks. Any week where volume jumped by more than the ramp threshold while resting heart rate was trending up over the same window gets called out, because that combination is the one that precedes injury. Read recovery signals from the Google Health health-metric types daily-resting-heart-rate and daily-heart-rate-variability using Daily Roll-Up Data Points. The threshold is a setting I can adjust, defaulting to ten percent, and it should be presented as a coaching guideline rather than a hard rule. When a week is flagged, show me exactly which two numbers triggered it.

Clicking a week opens a detail view listing every session in that week. Match each planned row to the actual workout on the same date; show planned sessions with no matching workout as missed, and workouts with no matching plan row as unplanned, so nothing gets quietly smoothed over. Every session row shows planned target next to what actually happened.

Each session row gets two actions. First, a note field: what I type saves back into the note column of that session's row in the plan sheet using Update Values, writing the precise cell for that row so nothing else is touched. Second, a button that pulls that workout down as a file using Export Exercise TCX on the session's data point, so I can send it to a coach.

Add a Review this block button that kicks off a background agent. The agent reads the last four weeks of actual sessions with List Data Points on the exercise data type (paging through, given the 25 cap), reads daily-resting-heart-rate and daily-heart-rate-variability trends over the same window with Daily Roll-Up Data Points, and reads the existing plan rows from the sheet. It compares planned against actual, decides whether next week should hold, back off, or progress, and writes next week's adjusted sessions into the plan sheet with Append Values in the same column shape as the existing rows.

The agent's reasoning has to be visible in the app, not buried in the sheet. Show its run status while it works, then display the written rationale alongside the newly appended week so I can read why it chose those sessions and delete the rows if I disagree. Keep a history of past reviews so I can see how its thinking changed across the block.

Rules throughout: never overwrite an existing plan row, only append new ones and only touch the note column on existing rows. If a health data type returns nothing for part of a range, show it as a data gap rather than treating it as zero volume, since a missing sync and a rest week are not the same thing. Handle rate limiting with backoff on both services.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads