BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2 或任何藍牙控制器,搭配 MyWhoosh、Rouvy、Zwift 等。iOS、Android、Windows、macOS 均可免費試用。
AI 翻译
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,即可验证所有权并自行管理介绍。
一分钟完成验证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.