BikeControl (SwiftControl)
Zwift Click과 Shimano 컨트롤러를 MyWhoosh와 Rouvy와 Zwift에서 쓴다
Lineup Card는 힘판·GPS·웰니스 데이터를 매일 아침 한 페이지로 정리해 훈련 전 대화할 선수와 이유를 알려준다
Lineup Card turns force plate, GPS and wellness exports into one page each morning: which players to talk to before they train, and why. Working demo with invented data.
스포츠·피트니스Python · HTMLGitHub @maurocastillomd온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Morning readiness brief for a performance staff: wellness, HRV and jump tests in one report. Code computes every number; the AI never writes one. Synthetic data.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A multi-domain morning readiness brief for a performance department.
It reads the streams a staff already collects — subjective wellness, HRV, neuromuscular (CMJ), plus training load and GPS — and posts one short message before the athletes walk in: who to review, who to watch, and why. Thirty seconds to read. The staff gets their morning back.
Built by Mauro Castillo, MD, MS, CSCS, RSCC, CPSS. Concept walkthrough: maurocastillomd.com/readiness.
The AI does not write numbers. And it surfaces availability — it never predicts injury.
Code reads the data and computes every baseline, z-score, and flag. The model
only takes a fact that is already true and says it in plain English. Every
number in the model's output is checked against the numbers the engine actually
computed (narrate.py); one invented number and the
output is discarded for a deterministic template. And nothing here forecasts
injury — no screening test predicts individual injuries with useful accuracy
(see SCIENCE.md). It surfaces individual change so a human acts
earlier.
Three response domains, each measured against the athlete's own 28-day baseline, sign-normalized so a decline is always a negative z:
Status escalates on convergence: any domain past −2.0 z is REVIEW, and so is agreement across domains (two response domains at or under −1.2 z). One domain down is MONITOR. Flagging on domains that agree beats flagging on any single number.
Load is context, never a flag. Internal load (sRPE), external load (GPS), and the acute:chronic workload ratio explain the "why". They never set status — ACWR in particular is a flawed ratio with no evidence for load management. See SCIENCE.md for the citations behind every one of these choices.
adapter -> merge -> engine -> anonymize -> narrate -> verify -> Slack
(data in) (identity (all math, (names off) (one LLM (numbers (names back
resolved) convergence) call) checked) on, out)
adapters.py) — every source returns
the same Reading objects. Ships a synthetic-CSV adapter standing in for real
devices (VALD, Catapult, a wearable, a wellness form).merge.py) — resolves one athlete across
sources that name people differently (the real janitor work of team data).engine.py) — the deterministic core, no
AI. Individual baselines, per-stream freshness, convergence status, load context.anonymize.py) — names come off
before the model. It works on "Athlete 7"; code re-attaches the name after.narrate.py) — the only file that
talks to a model, plus the number guard. No API key? Templates run everything.brief.py) — assembles the message and posts
it to a Slack webhook../run.sh # run the morning brief (creates .venv)
./run.sh --post # also deliver to $SLACK_WEBHOOK_URL
.venv/bin/python scripts/generate_data.py # rebuild the synthetic squad
.venv/bin/python -m pytest # the test suite
ANTHROPIC_API_KEY (in a local .env) enables Claude
phrasing; without it the deterministic templates run.
data/ is synthetic. Invented names, generated numbers.fetch() interface against a vendor API. They are not in
this repo: credentials, data agreements, and CBA governance belong to a team
engagement.See SCIENCE.md for the evidence base and citations.