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.