BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
翻訳待ち
AI-powered fitness tracking and analytics platform
翻訳待ち
Loading the full README.
Read the full README ↗A workout tracker with an AI coach, in English and Traditional Chinese. It has three AI features, and an eval suite decides what ships in each:
Live: gympro.chichi.mom. I log every workout in it.
| Log | One set table for strength and cardio, with 8 log types, from weight × reps to treadmill and rower. Units are per exercise (kg or lb, km or mi). Each lift shows today's target, by the weekly report's own rule. There is also a daily note and body weight. |
| Plan | Routines, and a training cycle of 1 to 28 days that puts one on each day. A month calendar shows what's planned and what was done, and a day ahead can take another routine or become a rest day. |
| Ronnie | A chat coach. "My elbow hurts, what instead of pushdowns?", "What's left today?", "Plan me a 4-day week.", "Will creatine make my hair fall out?" It remembers injuries, likes and dislikes, equipment and schedule across conversations, and answers fitness questions from research notes, with the papers listed under the reply. |
| Coach G | The user answers a few questions and gets a week of routines built from a 190-exercise library, rated for muscles and joint load. |
| Weekly report | Made when the user's week ends, Monday to Sunday in their time zone. It shows the goal's progress, the key numbers and follow-up on last week's advice, then what to do next session on each lift, with the research behind each piece. A week under 10 working sets gets its numbers only, with no model call. |
| Reminder | At 9 PM in the user's time zone, a push notification asks "Did you train today?", except on a rest day. It is turned on in Settings. |
| Layouts | Separate phone and desktop layouts. On iPhone it installs to the home screen. |
The screenshots are from a demo account with made-up training (supabase/seed/demo_account.sql). The report and Ronnie's replies in them are real model output.
flowchart LR
user["Browser / home-screen app"] --> app["Next.js 16 on Vercel"]
app -->|"queries under row-level security"| db[("Supabase Postgres + pgvector")]
app -->|"Ronnie, Coach G"| claude["Claude API"]
app -->|"Vercel OIDC → IAM role"| bedrock["Bedrock: Cohere Embed v4"]
app -->|"Vercel OIDC → IAM role"| sqs["SQS report queue"]
sched["EventBridge Scheduler, hourly"] --> schedfn["Scheduler Lambda"]
schedfn --> sqs
sqs --> worker["Report worker Lambda"]
worker --> db
worker -->|"report text"| claude
schedfn -->|"AI health metrics"| cw["CloudWatch alarms → SNS email"]
daily["EventBridge Scheduler, daily + Monday"] --> reviewfn["Review Lambda"]
reviewfn -->|"each ended day of Ronnie chats"| db
reviewfn -->|"review"| claude
reviewfn -->|"weekly digest"| mail["SNS email"]
hourly["EventBridge Scheduler, hourly"] --> remindfn["Reminder Lambda"]
remindfn --> db
remindfn -->|"Web Push, VAPID"| push["Push services → the user's device"]
infra/terraform.This is the beginning of the README. Read the rest at the original. Read the full README ↗