BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2,或任何藍牙控制器搭配 MyWhoosh、Rouvy、Zwift 等。可於 iOS、Android、Windows 與 macOS 免費試用。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Fantasy Premier League decision platform: deterministic projections, CP-SAT optimisers for transfers and captaincy, multi-gameweek planning. No LLM in the runtime path.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
AI-Powered Fantasy Premier League Decision Platform.
• Python 3.12+
• Node.js 20+
• A free Supabase account (PostgreSQL)
• A free Upstash account (Redis)
1. Create your cloud services (both free)
Supabase (PostgreSQL)
1. Go to supabase.com → New project
2. Settings → Database → Connection string → URI
3. Copy the URI (starts with postgresql://...)
Upstash (Redis)
1. Go to upstash.com → Create database → choose a region
2. Copy the REDIS_URL from the Details tab (starts with rediss://...)
Open backend\.env and paste your Supabase and Upstash URLs.
3. Set up and start the backend檢視完整 README ↗Fantasy Premier League decision support: who to start, who to captain, which transfers are worth a hit, and when to play chips, with every recommendation explained by the numbers behind it. An iOS and Android app with a web dashboard, on a FastAPI backend.
The advice comes from a transparent projection model and exact optimisers, not a language model: every number traces back to FPL data, and the solvers say when an answer is proven optimal.
| Folder | What | Stack |
|---|---|---|
backend/ | API, projection model, optimisers, scheduled refresh, accounts and billing | Python 3.12, FastAPI, SQLAlchemy (async), Alembic, OR-Tools |
mobile/ | The iOS and Android app | Expo SDK 57, React Native, Expo Router, TanStack Query |
frontend/ | Web dashboard for signed-in users | Next.js 16, React 19, Tailwind |
docs/ | Developer documentation |
Hosted on free tiers: Render (API), Vercel (web), Supabase (Postgres and Auth), Upstash (Redis and QStash), RevenueCat (billing), Sentry and Healthchecks.io (monitoring).
You need Python 3.12 (3.14 is too new: asyncpg and pydantic-core have no
wheels for it), Node.js 22, and either Docker or free Supabase and Upstash
accounts.
Locally, with Docker:
docker compose up -d postgres redis
That matches the backend's default DATABASE_URL and REDIS_URL, so delete
those two lines from backend/.env after copying it in the next step.
Without Docker, create a free Supabase project (Settings → Database → URI,
with the scheme changed to postgresql+asyncpg://) and a free Upstash Redis
database, and put their URLs in backend/.env.
Windows:
cd backend
copy .env.example .env
.\setup.bat
macOS and Linux:
cd backend
cp .env.example .env
python3.12 -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt
Then, with the virtual environment active, create the tables and start the API:
alembic upgrade head
uvicorn app.main:app --reload --port 8000
(.\start.bat does the second line on Windows.) Check
http://localhost:8000/api/v1/health returns "status": "ok"; the interactive
API docs are at http://localhost:8000/api/docs.
There is no separate worker process. All background work is one refresh job,
triggered over HTTP. Locally, with JOB_TOKEN empty, it needs no token:
curl -X POST "http://localhost:8000/api/v1/jobs/refresh"
It pulls players and fixtures from the live FPL API, builds projections and
raises alerts; the first run takes a minute or two. To keep data fresh while
you work, set SCHEDULER_ENABLED=true in backend/.env and restart the API;
it then refreshes every REFRESH_INTERVAL_MINUTES.
With AUTH_REQUIRED=false (the local default) you can call team endpoints
from the API docs without signing in, e.g. GET /api/v1/decisions/{your FPL team id}.
cd frontend
npm install
cp .env.example .env.local
npm run dev
Open http://localhost:3000. The dashboard requires sign-in, so it needs a
Supabase project with Apple or Google configured
(docs/AUTHENTICATION.md) and its URL
and publishable key in .env.local. If you run on another port, add that
origin to CORS_ORIGINS in backend/.env and to Supabase's redirect URLs.
The app needs a development build (Expo Go lacks its native modules):
cd mobile
npm install
cp .env.example .env
npx expo run:android
Point EXPO_PUBLIC_API_URL at your computer's LAN IP, or 10.0.2.2 from the
Android emulator. Full instructions: docs/MOBILE_APP.md.
Install the backend test dependencies once inside the virtual environment
(setup.bat installs only the runtime ones):
pip install -r requirements-dev.txt
Then:
cd backend && .\test.bat
cd mobile && npm test
On macOS and Linux run the backend tests with
DATABASE_URL="sqlite+aiosqlite:///:memory:" ENVIRONMENT=test pytest -m "not network".
Everything else, including Maestro end-to-end tests: docs/TESTING.md.
| Document | Covers |
|---|---|
| ARCHITECTURE.md | Components, request flow, the refresh pipeline, data model, design decisions |
| AUTHENTICATION.md | Sign-in, token verification, authorisation, FPL team ownership, account deletion |
| PAYMENTS.md | Store billing via RevenueCat, the trial, entitlements, the webhook |
| MOBILE_APP.md | The Expo app: features, structure, running, builds |
| API.md | Conventions, errors, rate limits, and every route with its access level |
| TESTING.md | Suites, how to run them, CI, manual release checks |
| DEPLOYMENT.md | First deploy, routine deploys, migrations, rollback, app releases |
| STORE_LISTING.md | Store text, App Review notes, the review team, privacy and data safety answers |
| ENVIRONMENT_VARIABLES.md | Every setting, where it is read and where it is set |
| OBSERVABILITY.md | Logging, error and crash tracking, job and webhook monitoring, runbook |
The backend, web dashboard and mobile app are feature complete for a first release and covered by automated tests. Not yet done before launch: running the pending migrations and production configuration, real-device testing of sign-in, purchases and push, and submitting the store listings (STORE_LISTING.md). See DEPLOYMENT.md and the release checklist in SECURITY.md.
| SECURITY.md | Security review findings, OWASP mapping, release checklist |
| DESIGN_NOTES.md | Why the model, optimisers and pipeline work as they do |