BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2,或任何藍牙控制器搭配 MyWhoosh、Rouvy、Zwift 等。可於 iOS、Android、Windows 與 macOS 免費試用。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Fantasy-first NFL analytics. Free advanced stats framed around fantasy value —
every metric answers a fantasy question, recomputed in your league's exact
scoring and lineup — in a clean, fast interface with light and dark themes.
Live: gridiron-livid.vercel.app ·
API gridiron-api-t6hz.onrender.com
See CLAUDE.md for the full product spec, schema, and scope,
ARCHITECTURE.md for where everything lives, and
docs/ROADMAP.md for the milestone plan.
Three fully decoupled apps (frontend talks to backend over HTTP only):檢視完整 README ↗Fantasy-first NFL analytics. Free advanced stats framed around fantasy value — every metric answers a fantasy question, recomputed in your league's exact scoring and lineup — in a clean, fast interface with light and dark themes.
Live: secondlevel.app · API gridiron-api-t6hz.onrender.com
See CLAUDE.md for the full product spec, schema, and scope,
ARCHITECTURE.md for where everything lives, and
docs/ROADMAP.md for the milestone plan.
Three fully decoupled apps (frontend talks to backend over HTTP only):
| Directory | Stack | Purpose |
|---|---|---|
frontend/ | React (Vite) + Tailwind + Recharts | Public stats UI |
backend/ | FastAPI + SQLAlchemy + Alembic | JSON API over PostgreSQL |
pipeline/ | Python + nflreadpy | Ingests nflverse data into PostgreSQL |
backend/ and pipeline/. Use 3.12 specifically:
psycopg2-binary has no wheels for 3.13+ and building it from source needs
pg_config on your PATH. The backend runs from backend/.venv/ — the one
.claude/launch.json starts, and the only one with M5's PyJWT installed;
pipeline/ uses the older shared .venv/ at the repo root.Everything below is already installed and the database already holds the 2020–2025 dataset, so day-to-day you only need to start the three services. Open three terminals:
Make sure Docker Desktop is running, then:
cd gridiron
docker compose up -d # starts Postgres 16; no-op if already running
Credentials (local dev): user gridiron / password gridiron / db gridiron
on localhost:5432.
cd gridiron/backend && .venv/bin/uvicorn app.main:app --reload --port 8000
--reload auto-restarts on code edits. Docs at http://localhost:8000/docs.
cd gridiron/frontend
npm run dev # http://localhost:5173
curl localhost:8000/api/v1/health # {"status":"ok","database":"connected"}
Then open http://localhost:5173. Edit code → both servers hot-reload → refresh.
Signed-in features not working? curl localhost:8000/api/v1/health/auth reports whether
token verification is wired correctly — a misconfigured SUPABASE_URL and a genuinely
bad token both look like the same 401 without it.
cd gridiron/backend && .venv/bin/python -m pytest
Needs only the database from step 1 — no Supabase project, no network, no .env. The
suite creates its own gridiron_test, migrates it, and drops it at the end, so it never
touches your development data.
Coverage starts at the auth boundary (M5): token verification, JIT user provisioning,
cross-user isolation on every account endpoint, and the row-level-security lockdown that
keeps the account tables off Supabase's PostgREST API. See
backend/tests/README.md.
The same command runs on every pull request via GitHub Actions
(.github/workflows/backend-tests.yml).
Only needed on a fresh machine (the steps above are enough day-to-day):
# Env files
cp .env.example backend/.env
cp .env.example frontend/.env
# One virtualenv at the repo root, shared by backend/ and pipeline/
python3.12 -m venv .venv
.venv/bin/pip install -r backend/requirements.txt -r pipeline/requirements.txt
# Database schema
cd backend && ../.venv/bin/alembic upgrade head
# Data ingestion (see pipeline/README.md for details)
# Run in this order — each step depends on the rows the previous one wrote.
cd ../pipeline
../.venv/bin/python ingest_teams.py
../.venv/bin/python ingest_players.py
../.venv/bin/python ingest_schedules.py --seasons 2020 2021 2022 2023 2024 2025
../.venv/bin/python ingest_stats.py --seasons 2020 2021 2022 2023 2024 2025
../.venv/bin/python ingest_expected.py --seasons 2020 2021 2022 2023 2024 2025
../.venv/bin/python ingest_usage.py --seasons 2020 2021 2022 2023 2024 2025
../.venv/bin/python ingest_target_depth.py --seasons 2020 2021 2022 2023 2024 2025
# Frontend deps
cd ../frontend && npm install
Don't skip the last three.
ingest_expected.py(expected components + market share),ingest_usage.py(snaps + routes), andingest_target_depth.py(targets by pass depth) fill the columns and table that the Expected Points board, every Insight score, and the player-page depth chart depend on. Skip them and those pages render empty rather than erroring — a confusing failure to debug.
Your data persists. Postgres data lives in the
gridiron_pgdataDocker volume, so it survives reboots anddocker compose down. The only command that wipes it isdocker compose down -v(with-v) — avoid that flag and you never need to re-run the pipeline.
Deployed and live — frontend on Vercel, API on Render, database on Supabase.
Both auto-deploy on push to main.
Shipped so far:
| Phase 1 | Data pipeline (2020–2025), FastAPI API, player + team leaderboards, player profiles, search, the Liquid Glass theme, and the Command Center home |
| M1 | Scoring-aware fantasy engine — every fantasy number recomputes to your exact league scoring, from a single metric registry |
| M2 | Expected fantasy points (scoring-aware), market share, goal-line carries, snap + route usage |
| M3 | Fantasy intelligence — VORP, Fantasy Opportunity Rating, Buy-Low and Sell-High indices, plus league context (size + starting lineup) |
| M4 | Exploration & viz — a curated scatter builder (19 charts across six position groups, players drawn as headshots), a comparison builder (up to 5 players, showing who leads each stat and by how much), usage and target-depth charts on player pages, and CSV export everywhere |
| M5 | Accounts & saved state — sign in with an email and password, or just have a link emailed to you, to keep multiple named league profiles, a watchlist of players (star them, filter any board to them, see them on the home page), and saved views of any board or chart. Nothing is behind a login: every page and share link works signed out exactly as before |
Next up: M6 — New Data Domains (depth charts, strength of schedule, a Vegas
board, and consensus projections). See docs/ROADMAP.md for
the full plan and CLAUDE.md for detailed status.