{"type":"use-case","slug":"coach-g-the-fitness-brain","url":"https://buildwithcombo.com/hub/use-cases/coach-g-the-fitness-brain","detail_url":"https://buildwithcombo.com/hub/api/v1/use-cases/coach-g-the-fitness-brain.json","headline":"Coach G Bot","summary":"Morning training brief from Oura and Strava, plus a grocery list that matches the load.","categories":["personal"],"source":{"platform":"x","label":"@mikepat711","url":"https://x.com/mikepat711/status/2093075278956212652"},"template_url":null,"added_at":"2026-08-28T12:32:25.369Z","updated_at":"2026-08-28T23:26:01.344Z","prompt":"Set up a local fitness data feed on my computer that my coaching bot can read.\n\nI want a folder on this machine (not Google Drive) with three files that refresh automatically: latest.md (last night’s Oura sleep plus the last 7 days of Strava), summary.md (a 30-day table), and a daily/ snapshot. Pull Oura sleep, readiness, and activity, and Strava rides with time, watts, heart rate, cadence, elevation, best power (5s / 1 min / 5 min / 20 min / 60 min), and laps as W@HR when a power meter file exists.\n\nDo not ask me to paste API keys into chat. Put secrets in ~/.config/fitness-brain/.env with locked-down permissions. For Strava: I’ll create an API app at strava.com/settings/api with callback domain localhost. You write a one-time local OAuth script on port 8723, scope read,activity:read_all, save the refresh token, and never print tokens. For Oura: I’ll paste a personal access token into that same .env through a secure prompt, not the chat.\n\nWrite a sync script in ~/.config/fitness-brain/ (not inside iCloud) because background jobs can’t read CloudStorage. Cache Strava activity detail so each ride is only fetched once. Stay inside Strava’s 100 requests per 15 minutes. Refresh every 2 hours and again around 6:30 AM local.\n\nThe coach should only read the markdown. It should never log into Strava, Oura, or Garmin. If a pull is late or missing watts, say so. Do not invent numbers.\n\nWhen you’re done, show me the folder path, how to re-auth Strava, and that the first latest.md actually has last night’s sleep and a recent ride.","story":"Mike Pat retired Coach Claude and stood up Coach G inside Grok Bot, with a new teammate, Chef G, for the kitchen.\n\nGrok Bot has no Strava plugin and no Apple Health connection, so he asked the bot for a workaround. The bot wrote a local Python sync on his Mac: secrets in ~/.config/fitness-brain/.env (never pasted into chat), a one-time Strava OAuth on localhost:8723, Oura via a personal access token. Every two hours — and again around 6:30am — it refreshes latest.md, summary.md, and a daily/ snapshot. Coach G only reads the markdown. It never logs into Strava, Oura, or Garmin, and it is not allowed to invent numbers.\n\nPlans and memory live in a Google Drive \"fitness brain\" folder. At 6:45am Coach G sends a daily brief. Before the gym, Mike texts for a workout summary; after, he voice-notes how it went so the next session can be written. The two metrics that actually changed his cycling: W/bpm (watts getting more expensive) and overnight heart-rate floor (recovery).\n\nChef G talks to Coach G so diet tracks training load. When volume spiked, Chef recommended overnight oats, passed the recipe to the shopping bot, and the cart filled — Mike signed in to buy. The catch: the local sync needs the Mac awake. If that is not feasible, he says tell the bot and it will help wire Zapier or IFTTT instead.","images":[{"url":"https://buildwithcombo.com/hub/images/3618853713ad2e7c5eed8b4d.jpg","source_url":"https://pbs.twimg.com/media/HQwXuImW8AAxhi7?format=jpg&name=orig"},{"url":"https://buildwithcombo.com/hub/images/abfac8f7fcac55fa69ed69d0.jpg","source_url":"https://pbs.twimg.com/media/HQwPXYCXAAAfpVl?format=jpg&name=orig"},{"url":"https://buildwithcombo.com/hub/images/8a467f56e6938df15c746de0.jpg","source_url":"https://pbs.twimg.com/media/HQwQqg4WoAAjHSV?format=jpg&name=orig"},{"url":"https://buildwithcombo.com/hub/images/0091e2aeec3dbc6caa571604.jpg","source_url":"https://pbs.twimg.com/media/HQwRiBtXgAAS_Kw?format=jpg&name=orig"},{"url":"https://buildwithcombo.com/hub/images/1093ba8e58b6c099040239cb.jpg","source_url":"https://pbs.twimg.com/media/HQwSwBKWkAApyFV?format=jpg&name=orig"},{"url":"https://buildwithcombo.com/hub/images/c6ad80dd8ce08b9147f9f5f8.jpg","source_url":"https://pbs.twimg.com/media/HQwYVlOXAAACxxH?format=jpg&name=orig"},{"url":"https://buildwithcombo.com/hub/images/c537ec837df83a8e2d4aed5c.jpg","source_url":"https://pbs.twimg.com/media/HQwVCSRWoAAyo2X?format=jpg&name=orig"},{"url":"https://buildwithcombo.com/hub/images/cdd3aa1c3a09bfd0b2556aa2.jpg","source_url":"https://pbs.twimg.com/media/HQwVpXBXUAAMlGl?format=jpg&name=orig"}],"author":{"handle":"@mikepat711","platform":"x","url":"https://x.com/mikepat711/status/2093075278956212652"},"scouted_by":"@Grok_Hub_IO","source_url":"https://x.com/mikepat711/status/2093075278956212652","tag":"personal","avatar_body":null,"avatar_eyes":null,"original_directory_url":"https://www.grokhub.io/use-cases/coach-g-the-fitness-brain","public_share_card":null,"share_status":"not-provided","runtime_tested":false,"full_skills_routines_manifest":"NOT_PUBLICLY_CAPTURED"}