BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Scraper and analysis tools for building a database of ottoneu players and salaries
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A database and analytics platform for Ottoneu Fantasy Football League 309 (12-team Superflex Half PPR). Python jobs pull Ottoneu league state and NFL statistics into a Supabase PostgreSQL database; a season-long projection model turns that history into a per-player points-per-game forecast; a Next.js app converts those projections into the valuation metrics the league actually plays with — VORP, surplus value, projected salaries, and arbitration targets.
Stack: Python 3.12 · Next.js 16 · React 19 · TypeScript · Tailwind CSS 4 · Supabase (PostgreSQL) · pandas · Recharts
Read docs/ONBOARDING.md — a guided first week that gets the project running, traces one number from raw NFL data to the screen, and walks you through shipping a first change. Keep docs/GLOSSARY.md open beside it; this repo mixes three specialist vocabularies and the glossary defines all of them.
The repo ships a dev container that provisions everything correctly: the Python virtualenv, the editable install, Playwright, npm packages, and the MCP servers.
cp .env.example .env
cp web/.env.local.example web/.env.local
just doctor
See .devcontainer/ for what it installs, and docs/references/autonomous-operation.md for why it exists (it is also the sandbox for running agents without permission prompts).
Requires Python 3.12, Node.js 18+, and just.
just install # venv + pinned deps + editable install + Playwright + npm
cp .env.example .env # Supabase creds for Python
cp web/.env.local.example web/.env.local # Supabase creds + session/MCP keys for Next.js
just doctor # confirm the environment is sane
Every environment variable is documented in docs/references/environment-variables.md.
The schema is defined by the numbered files in migrations/, applied in order. See migrations/README.md for the workflow and docs/generated/db-schema.md for the current schema.
Note: the Supabase project is shared with a separate app. Tables prefixed
fp_belong to that codebase — never read, write, or migrate them from here.
All work goes through just recipes, which select the right
virtualenv and flags for you. Run just --list to see all 53.
| Command | What it does |
|---|---|
just doctor | Diagnoses known environment traps offline in ~1s and prints the fix for each. Run this first when anything is off. |
just dev | Starts the Next.js dev server on localhost:3000 (just dev-stop to stop it) |
just preflight | Mirrors CI's pass/fail — lint, typecheck, both test suites, doc checks — in about 12 seconds. Run before every push. |
just test | Full test suites with coverage (Python + web) |
just analyze | Regenerates player projections from the active model and promotes them |
just py "<snippet>" | Ad-hoc database inspection |
just install-hooks wires preflight into a pre-push hook.
The full command catalogue — scrapers, backfills, the projection workflow, and the scheduled GitHub Actions — lives in docs/COMMANDS.md.
| Question | Document |
|---|---|
| How do I get productive in this repo? | docs/ONBOARDING.md |
| What does VORP / WOPR / rolling-origin mean? | docs/GLOSSARY.md |
| How does the whole system fit together? | docs/ARCHITECTURE.md |
| Which subsystem owns this table / script / route? | docs/SUBSYSTEMS.md |
| Where does this code live? | docs/CODE_ORGANIZATION.md |
| What are all the commands? | docs/COMMANDS.md |
| What's in the database? | docs/generated/db-schema.md |
| What do the frontend routes do? | docs/FRONTEND.md |
| How do I run and write tests? | docs/TESTING.md |
| How do I branch, commit, and open a PR? | docs/GIT_WORKFLOW.md |
| What are the league's rules? | docs/references/ottoneu-rules.md |
Instructions for AI coding agents are in AGENTS.md.
ottoneu_db/
├── scripts/ # Python: ingestion, projections, tooling
│ ├── feature_projections/ # The season-long projection model + eval harness
│ ├── weekly_projections/ # In-season per-game projections (Sleeper)
│ ├── league_explorer/ # Cross-league survey tool (local SQLite)
│ ├── tasks/ # Worker task modules for the job queue
│ └── tests/ # Python test suite
├── web/ # Next.js frontend
│ ├── app/ # App Router pages + API routes
│ ├── components/ # Shared React components
│ ├── lib/ # Valuation logic, data access, MCP server, OAuth
│ └── __tests__/ # Jest test suite
├── migrations/ # Numbered SQL migrations
├── docs/ # All documentation (start with ONBOARDING.md)
├── config.json # Single source of truth for league constants
└── Justfile # Every command in the project
Never commit directly to main — all changes go through pull requests.
git checkout main && git pull origin main
git checkout -b your-branch-name
# ... make changes ...
just preflight # must pass
git push -u origin your-branch-name
gh pr create --fill
Some rules are enforced mechanically by structural tests (no hardcoded league
constants, no unpaginated Supabase reads, frontend layering, config codegen). They fail
with a message explaining the fix — run just check-arch to check locally. Details in
docs/GIT_WORKFLOW.md and AGENTS.md.
Changes to the projection model have an additional requirement: they must show a significant out-of-sample win on the held-out harness before promotion. See docs/ONBOARDING.md for why, and AGENTS.md for the exact protocol.
For personal use in Ottoneu League 309.
| How should I reason about roster strategy? | docs/references/ottoneu-strategy.md |
| How do I change the projection model? | docs/exec-plans/feature-projections.md |