OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A fantasy football headquarters for drafting, managing, and researching your leagues. Sync your Sleeper, ESPN, or Yahoo leagues, or run a league natively, and get draft tools, trade and waiver analysis, weekly research, and league history in one place. Half-PPR is the default scoring format.檢視完整 README ↗A fantasy football headquarters for drafting, managing, and researching your leagues. Sync your Sleeper, ESPN, or Yahoo leagues, or run a league natively, and get draft tools, trade and waiver analysis, weekly research, and league history in one place. Half-PPR is the default scoring format.
/m.DATABASE_URL) for player_warehouse, synced league snapshots, and research aggregates (CDN-cached /api/data/* routes)You need Node.js and npm — install with nvm.
git clone <this-repository-url>
cd TheLeagueOffice
npm i
npm run dev
Create a .env file in the project root:
# Database A (primary — auth, profiles, site)
VITE_SUPABASE_URL=
VITE_SUPABASE_PUBLISHABLE_KEY=
# Server-only (Database A)
SUPABASE_URL=
SUPABASE_PUBLISHABLE_KEY=
SUPABASE_SERVICE_ROLE_KEY=
# TiDB Serverless (player warehouse + synced snapshots + research aggs)
DATABASE_URL=mysql://USER:PASS@GATEWAY/league-office-native
# Cron / webhook auth
CRON_SECRET=
# Yahoo league sync
YAHOO_CLIENT_ID=
YAHOO_CLIENT_SECRET=
# Press Room + weekly Front Office desks (optional — templates when unset)
GROQ_API_KEY=
# Optional failover / model overrides
GEMINI_API_KEY=
# GROQ_PRESS_ROOM_MODEL=openai/gpt-oss-120b
# GEMINI_PRESS_ROOM_MODEL=gemini-2.0-flash
Set the same variables in your Vercel project settings for deployments.
Retired: Supabase project league-office-brain (Database B) and env vars
VITE_SUPABASE_URL_B / VITE_SUPABASE_ANON_KEY_B. Warehouse + brain hydration
are TiDB + snap-cdn only — see scripts/tidb/CUTOVER.md.
Full guide: scripts/tidb/CUTOVER.md.
DATABASE_URL on Vercel (Production + Preview). Prefer a URL ending in /league-office-native.export APP_URL="https://www.theleagueoffice.app"
export CRON_SECRET="from-vercel"
curl -X POST "$APP_URL/api/admin/tidb-migrate" \
-H "Authorization: Bearer $CRON_SECRET" \
-H "Content-Type: application/json" \
-d '{"action":"migrate"}'
GET /api/admin/tidb-migrate shows playerWarehouseCount ≈ 4000+, and curl -s "$APP_URL/api/data/players-export" | head -c 200 starts with {"ok":true,"v":7./api/webhooks/sync and /api/cron/* — never wire host events to repository_dispatch.| Command | Description |
|---|---|
npm run dev | Start the dev server |
npm run build | Production build |
npm run preview | Preview the production build |
npm run lint | Run ESLint |
npm run format | Format with Prettier |
Supabase migrations live in supabase/migrations. Admin access is granted through profiles.role = 'admin'.