BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2,或任何藍牙控制器搭配 MyWhoosh、Rouvy、Zwift 等。可於 iOS、Android、Windows 與 macOS 免費試用。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Same app as before, built to run as a real website instead of a Claude artifact. Each person's picks are private while the week is still open, PIN-protected, and lock in permanently once submitted — after that, everyone can see everyone's picks for that week.
/api/storage.js, a small serverless
function backed by a Redis database (not Claude's artifact-only storage).locked:week{n}:{name}) and rejects any further changes to
them — even a direct API call, not just the button in the UI.Push this folder to a GitHub repo, then import that repo into Vercel (vercel.com → New Project → select the repo).
Add a database. In your project, open Storage in the sidebar →
Create Database / Browse Marketplace → install "Upstash for
Redis". Create a database and connect it to this project, for all
three environments (Production, Preview, Development). Vercel injects
KV_REST_API_URL / KV_REST_API_TOKEN (or UPSTASH_REDIS_REST_URL /
UPSTASH_REDIS_REST_TOKEN) automatically — api/storage.js checks for
either name.
Set everyone's PINs. In the project's Settings → Environment
Variables, add a variable named PICK_PINS with a JSON value mapping
each name to a short PIN, e.g.:
{"Ace":"4821","Cisco":"1093","Dad":"5567","Lena":"2245","Mom":"8830","Tonio":"3391"}
Pick your own numbers — these are just examples. Add this for Production (and Preview/Development if you use those). Tell each family member their own PIN separately from the link you send them (e.g. text it, don't put it in the link).
Also add a second variable, COMMISSIONER_PIN, with a single PIN of your
own choosing (e.g. 7412). This gates the "enter final results" panel —
only whoever knows this PIN can open it and record game outcomes.
Redeploy so the build picks up the new environment variables.
Visit your *.vercel.app URL.
Each family member's link is yoursite.vercel.app?user=Name (e.g.
?user=Dad). Build each one yourself and send it to that person — there's
no in-app list of everyone's links. Send each person their link and,
separately, their PIN. The first time they open their link they'll be
asked for the PIN; after that it's remembered on their device (stored in
that browser only), so they won't need to re-enter it every visit.
If someone's PIN is ever compromised (e.g., a shared family device), just
change it in PICK_PINS, redeploy, and their old saved PIN on every device
stops working — they'll be asked to enter the new one next time.
npm install
vercel dev
vercel dev needs the same environment variables locally, including
PICK_PINS — run vercel env pull after linking the project to pull them
into a .env.local file.
results:week{n}), progress counts, and lock status
(locked:week{n}:{name}) are intentionally public — everyone needs to
see final results and who's submitted. Only the specific teams someone
picked stay gated, and only until that person submits.WEEKS object near the top of the
<script> in index.html — add a new week's games there each week and
redeploy.COMMISSIONER_PIN,
entered once per device the same way the personal pick PINs work.