BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2,或任何藍牙控制器搭配 MyWhoosh、Rouvy、Zwift 等。可於 iOS、Android、Windows 與 macOS 免費試用。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Daily ops scoreboard for league managers. Pulls signals from 7 Brodie apps,
scores each LM with editable weights, surfaces a daily action checklist,
runs a leaderboard, and DMs Slack digests every morning.檢視完整 README ↗Daily ops scoreboard for league managers. Pulls signals from 7 Brodie apps, scores each LM with editable weights, surfaces a daily action checklist, runs a leaderboard, and DMs Slack digests every morning.
| App | Weight | Sub-metrics |
|---|---|---|
| brodie-crm | 30 | reg_pace (50), lead_response_sla (30), captain_followup (20) |
| brodie-facilities | 20 | invoice_on_time (60), contract_gap_risk (40) |
| brodie-ref-payroll | 15 | payouts_on_time (80), no_overdue (20) |
| brodie-training-pilot | 12 | cert_current (70), module_completion (30) |
| brodie-stats-health | 10 | stats_in_24h (100) |
| brodie-content-health | 8 | content_in_48h (100) |
| brodie-ops-schedule | 5 | shifts_7d_out (70), drop_rate (30) |
All weights are editable in /admin/weights. Adapters live in
src/lib/source-apps/adapters/.
pnpm install # or npm install
cp .env.local.example .env.local
# fill in NEXT_PUBLIC_SUPABASE_URL + service role for the NEW league_health
# Supabase project, plus the 7 source-app service-role keys.
brodie-league-health).supabase link to it.pnpm db:push to apply supabase/migrations/0001_init.sql.https://brodie-league-health.vercel.app (or your
custom domain) and add /auth/callback to Redirect URLs.update profiles set role='super_admin' where email='[email protected]';
Each adapter needs its source app's service-role key. Get them from each
Supabase project (Settings → API → service_role secret). Paste into
.env.local (local) and Vercel env vars (prod).
chat:write scope.SLACK_BOT_TOKEN.league_managers.slack_user_id for each LM (Slack U... id).| Time (ET) | Cron path | What it does |
|---|---|---|
| 05:00 | /api/cron/sync-all | Runs every adapter, writes daily_snapshots + daily_action_items. |
| 05:30 | /api/cron/score | Computes lm_xp_totals from snapshots + current weights. |
| 08:00 | /api/cron/slack-digest | DMs each LM with slack_user_id set. |
Vercel cron sends Authorization: Bearer $CRON_SECRET. Without
CRON_SECRET set, the endpoints are open (dev mode).
Every Brodie app needs:
--author "amycorreia-stack <[email protected]>" because [email protected] is blocked from auto-deploys.UNKNOWN, ship via vercel --prod --yes manually.vercel link
vercel env pull .env.production # (optional sanity check)
vercel --prod --yes
brodie-crm.managers (canonical source of truth).league_managers and
their score appears.The adapters were written against the table names found in each source app's
/supabase/migrations/. Specific column names (e.g., due_date,
paid_at, target_pay_date, stats_completed_at, night_date,
module_id) follow the most likely Brodie conventions but should be verified
once. If an adapter reports error, the message in sync_runs.error will
tell you exactly which column is missing — adjust the adapter in
src/lib/source-apps/adapters/<slug>.ts and re-deploy.