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.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A local data store and analysis API for the Competelevel Fantasy League on Fantrax: an 11-team dynasty league with an auction draft and H2H "each category" scoring.
It pulls league structure, rosters, schedules and weekly category results from Fantrax, and player stats from NHL.com. Everything goes into a single SQLite file, or a Postgres database when the app is deployed (see Deploying to Vercel). The analysis layer projects every player, profiles every team by category, and ranks waiver and trade targets by what your team needs.
python3 -m venv .venv
.venv/bin/pip install -r requirements-dev.txt
cp .env.example .env # then set FANTRAX_MY_TEAM_ID (your team, for the CLI and local use)
.venv/bin/python -m cfl sync # ~2s, writes data/league.db
.venv/bin/python -m cfl teams # find your team id for .env
(cd frontend && npm ci && npm run build) # the web app, into cfl/web/dist (Node 24)
.venv/bin/python -m cfl serve # app at http://127.0.0.1:8000, API docs at /docs
python -m cfl serve (add --reload while developing) serves the app at http://127.0.0.1:8000.
The page's source is in frontend/. Vite builds it into cfl/web/dist/, which FastAPI serves.
Without a build, the API and the CLI work, but / returns an error.
To work on the page, run the API and Vite's dev server side by side:
.venv/bin/python -m cfl serve --reload # the API, on port 8000
cd frontend && npm run dev # the page at http://localhost:5173, updated as you edit
Vite sends the API's paths to port 8000. It reads them from frontend/openapi.json, so after you
change an endpoint, run npm run api in frontend/. It also regenerates the typed client,
src/api/generated.ts. A test fails until you do.
Before a PR, run npm run check in frontend/ (Biome, TypeScript, then Vitest) and pytest.
Dashboard. A GM's overview of a team, from real results only (no projections):
The team picker in the header lets you view any team. Projections and market values are on the Analysis tab.
Analysis. The projections behind the trade builder, for the team in the header's picker:
This is the beginning of the README. Read the rest at the original. Read the full README ↗