BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2 或任何藍牙控制器,搭配 MyWhoosh、Rouvy、Zwift 等。iOS、Android、Windows、macOS 均可免費試用。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
A dark-mode sports betting intelligence dashboard with an HUD / sci-fi aesthetic.
Pick a sport → browse today's slate → drill into a game for deep analysis across
matchup, form, roster, and sport-specific modeling tabs.查看完整 README ↗A dark-mode sports betting intelligence dashboard with an HUD / sci-fi aesthetic. Pick a sport → browse today's slate → drill into a game for deep analysis across matchup, form, roster, and sport-specific modeling tabs.
MLB · NBA · WNBA · NFL · NHL · NCAAB
The only machine-learned component is the MLB first-5-innings money line model
(XGBoost, trained offline in CI). Every other "model" in the app is transparent,
inspectable arithmetic — Log5 matchups, Binomial/Poisson distributions, additive
scoring — and each score carries a why string or a methodology entry naming its
source, endpoint, inputs and formula.
Frontend — no build step, by design.
React 18 + Babel Standalone from a CDN; .jsx files are transpiled in the browser.
No bundler, no TypeScript, no npm-installed React. Fonts are Orbitron (display) and
Space Mono (everything else).
Backend — zero dependencies.
Pure Node http + https on port 3001. No npm packages at all, in-memory caching
(10-second minimum for the live game feed, 2 min for other MLB data,
15 min for historical BvP). Live updates use SSE with a polling fallback.
Data sources. ESPN's public API (no key), the MLB Stats API, and Baseball Savant. Claude (Haiku) is called directly from the browser with a user-supplied key.
# 1. Backend (port 3001, no install step — there are no dependencies)
./server/start.sh # daemonizes, logs to server/server.log
# or: node server/index.js # foreground
# 2. Frontend — any static server from the repo root
python3 -m http.server 8000
Open http://localhost:8000. The frontend auto-detects localhost and points at
http://localhost:3001, ignoring the production backend URL, so local dev works
without editing anything.
Check the backend is up:
curl http://localhost:3001/api/health
To use AI Plays, paste an sk-ant-… key into the input in the top nav. It is stored
in localStorage and sent only to Anthropic.
index.html Shell: CDN scripts, nav, API-key input, global CSS
frontend/
data/ Fetchers + models, split shared/ + per-sport
shared/ui-atoms.jsx Primitive UI components (HudCard, Sparkline, …)
shared/tabs/ Sport-agnostic tabs
shared/screens/ Home / Games / GameDetail
sports/{mlb,nba,nfl}/ Sport-specific tabs
server/
index.js Node HTTP server (port 3001)
mlb/ nba/ Per-sport services and endpoints
data/f5_model.json Committed XGBoost model (CI writes this)
ml/ Offline Python training pipeline (runs in CI, not the app)
Note:
data-layer.js,tabs.jsx,screens-v2.jsxandui-atoms.jsxin the repo root are dead legacy files left over from a reorg.index.htmldoes not load them. Always edit underfrontend/.
Scripts communicate through window. With no bundler, each file ends with an
Object.assign(window, { … }) export and later scripts read from there. The load
order in index.html is load-bearing: data layer → atoms → tabs → screens → app.
Backend URL resolution (frontend/data/shared/core.js), in order:
window.PIQ_API_BASE → localhost shortcut → the <meta name="piq-api-base"> tag →
localhost fallback.
The F5 model's train/serve parity is a contract. Features are defined once in
ml/f5_common.py and server/data/f5_feature_spec.json, and must be computed
identically by the Python collector and the live buildF5Features(). Training
embeds parity samples so the Node scorer self-checks to ~1e-7. Change a feature on
both sides, then retrain.
render.yaml blueprint. On the free tier
the service sleeps after ~15 min idle, so the first request after a nap takes
~30s. After deploying, point <meta name="piq-api-base"> in index.html at the
service URL..github/workflows/train-f5.yml retrains weekly, commits the model
JSON, and Render auto-deploys it.:root in index.html; wrap card-shaped content in HudCard.Object.assign(window, …) export at the bottom
of their file, or the next script won't find them.CLAUDE.md holds the full blueprint: file-by-file responsibilities, per-sport
gotchas, and how to add a tab, data source, or sport.
PlayIQ is an analysis and research tool. Nothing it outputs is betting advice, and no model here predicts outcomes reliably. Bet responsibly, or don't.