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 ↗Personal installable PWA. Four exercises in strict rotation (Push-ups, Squats, Crunches, Run). Each exercise's target goes up one step every time that exercise is completed. Tracks streaks, backlog (actual minus target, all time), lifetime totals, history and charts.
TypeScript (strict), Vite, Vitest. No framework, no runtime dependencies. Data lives in the browser's localStorage.
npm install
npm run dev # local dev server
npm test # vitest
npm run typecheck
npm run build # typecheck + production build into dist/
Pushing to master redeploys on Vercel (framework preset: Vite, output dist).
| File | Job |
|---|---|
src/config.ts | The routine (PLAN) and tuning numbers. The one file to edit for most changes. |
src/types.ts | Data shapes. |
src/logic.ts | All rules, pure functions, no DOM or storage. Everything shown is derived from the log. |
src/store.ts | Persistence, undo snapshots, import and export. Storage is injected so tests use a fake. |
src/views.ts | Screens as pure functions returning HTML. |
src/html.ts, src/format.ts | Small markup and formatting helpers shared by the views. |
src/sync.ts | Cloud sync (Supabase). planSync is the pure decision logic and is unit tested. |
src/push.ts | Web Push subscription for the daily reminder. |
supabase/functions/wt-remind/ | Hourly reminder function. Deployed copy lives in the Supabase project; redeploy after editing. |
src/dom.ts | Form reading, toast, modal, download. |
src/app.ts | Wiring: state, rendering, the actions map (data-act="name"), events. |
src/styles.css | Theme variables at the top; per-exercise colours come from PLAN. |
public/ | Service worker (network first), manifest, icons. |
TEMPLATE in config.ts only feeds the first-run "four-exercise rotation" option and defaults for older saved data.logic.ts, then add a test in logic.test.ts.actions in app.ts and a data-act in the view.storageKey or snapshotKey in config.ts: they match the data already on the phone.iPhone: open the site in Safari, Share, Add to Home Screen. Android: Chrome menu, Install app. It must be the browser itself, not a link opened inside another app. The app also shows an install card under Backup.
Data is per browser. Use Backup > Download file or Copy as text now and then. The app also keeps the last few states automatically (Backup > Automatic snapshots).
Tables, all prefixed wt_: wt_state (one JSON document per user), wt_push_subscriptions, wt_config (VAPID private key, no client access). Row-level security allows only the owner's email. An hourly pg_cron job calls the wt-remind edge function. Sync is last-write-wins with a prompt when both sides changed; the phone copy always works offline.
Public values (project URL, publishable key, VAPID public key) are in CLOUD in src/config.ts.