OpenTrailPaper
LilyGO T5S3 4.7" E-Paper PRO용 오픈소스 자전거 컴퓨터 펌웨어, 오프라인 지도·GPX 경로·FIT 기록·블루투스 센서 지원
루틴을 계획하고 세트를 기록하며 실제 운동을 확인해 주는 AI 코치 Ronnie
Plan routines, log every set, and ask Ronnie, an AI coach that checks your actual workouts before it answers. In English and Traditional Chinese.
스포츠·피트니스TypeScript · PLpgSQLGitHub @Yung-Chi-Wu온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기AI-powered fitness tracking and analytics platform
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
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.| What it does, in full | Every log type, the calendar's rules, the report's sections, the reminder's card |
| How the AI parts are built | Ronnie's tools, research notes, memory and reply checks; Coach G's planner; the weekly report's steps |
| Evaluation | Every eval suite, and every decision an eval made |
| Architecture, CI, operations and security | What CI checks, traces and flagged replies, the daily review, alarms, performance work, spend limits |
.claude/hillclimb. The runner refuses to start if the grader, cases or fixture changed since a human last approved them.Some of what the evals decided (all of it):
| Question | Measured | Decision |
|---|---|---|
| Which model for Ronnie? | Knowledge suite: Haiku 4.5 48%, Sonnet 5.5 88% | Sonnet 5.5 |
| Which model for reports? | Free-text reports: Haiku 4.5 23%, Sonnet 4.6 76% | Sonnet 4.6, then the facts moved into code |
| Which embeddings? | Held-out hit@5: keywords 75%, Titan V2 70%, Cohere Embed v4 90% | Cohere Embed v4, gated with keywords |
| Does a knowledge base make Ronnie better? | Judge 63/87 → 82/87; the right paper cited 0/63 → 60/63 | Shipped (#78) |
| Ronnie called an exercise still to come "already done" | 5/8 → 8/8, with a code check instead of more prompt | The check is in code (#62) |
Each page reports where its server time goes, and a script times tab taps on production. Fewer database requests did most of it: Today went from 10 rounds of requests to one request, and Routines from 10 requests to one. Tap to content, median of 6:
| Tab | Before | After |
|---|---|---|
| Today | 0.62–0.64 s | 0.25–0.29 s |
| Routines | 0.39–0.45 s | 0.21 s |
| History | 0.46–0.60 s | 0.33 s |
| Settings | 0.36–0.42 s | 0.16 s |
supabase/migrations.| Frontend | Next.js 16, React 19, Tailwind CSS 4, next-intl, Recharts |
| Backend | Next.js route handlers and server actions, Supabase (Postgres, Auth, pgvector) |
| AI | Anthropic Claude (Sonnet 5.5, Sonnet 4.6, Haiku 4.5; Opus 5.5 as the eval judge), Cohere Embed v4 on Amazon Bedrock |
| AWS | Lambda, SQS, EventBridge Scheduler, CloudWatch, SNS, SSM Parameter Store, IAM OIDC, Budgets |
| Infrastructure as code | Terraform |
| CI | GitHub Actions |
app/ Next.js routes: pages, API handlers, server actions
components/ UI
lib/ronnie/ Ronnie: agent loop, tools, executor, memory, search, reply check
lib/coach-g*.ts Coach G: request parsing and the code planner
lib/report/ Report evidence table, volume units, queue
lib/ai/ AI tracing, spend limits and the one place that makes a model client
lib/server-timing.ts Where each page's server time goes
lib/data-version.ts The browser's data version: every write counts
lambda/ai-worker/ Report worker, hourly scheduler, daily review and reminders (Lambda), with their evals
evals/ronnie/ Ronnie evals: cases, fixture, grader, judge, runner, replays
evals/search/ Exercise search eval
infra/terraform/ AWS infrastructure
supabase/ Migrations, exercise attributes, seed data
scripts/ CI checks and data scripts
.claude/hillclimb/ Recorded eval runs, one folder per iteration
docs/ The detail behind this README, and its screenshots
You need Node 22 (see .nvmrc), a Supabase project and an Anthropic API key.
npm ci
npm ci --prefix lambda/ai-worker # esbuild and the worker's types, used by the scripts
Create .env.local:
NEXT_PUBLIC_SUPABASE_URL=...
NEXT_PUBLIC_SUPABASE_ANON_KEY=...
SUPABASE_SERVICE_ROLE_KEY=...
ANTHROPIC_API_KEY=...
Then run npm run dev.
AWS_ROLE_ARN, AWS_REGION and SQS_QUEUE_URL on Vercel.supabase/migrations holds the schema changes since October 2026. Each is one idempotent block. The base tables are older than the folder.The free checks run as in CI: npm run lint, npx tsc --noEmit, node evals/ronnie/check-replays.mjs, and the check:* scripts in package.json.