
為什麼要做這個作品
把 Garmin、HRV、訓練負荷和天氣資料收進同一個跑步工作台,讓今天該照課表、降量還是休息變得更好判斷。
Garmin 資料很多,但分散,而且數據不好解讀。它會告訴我今天跑了幾公里、平均心率多少、訓練效果如何,但我真正想知道的是:今天到底該怎麼練?
以前我會在 Garmin App、筆記、工具網站和 AI 對話之間來回看。每個地方都能回答一小段問題,但很難把它們串成完整判斷。
我想要的是一個自己的跑步工作台:把跑力趨勢、心率配速、準備度、訓練負荷、天氣和課表放在一起看。它不需要取代專業教練,也不應該直接替我做所有決定,但它可以幫我把資料整理到足夠清楚,讓我更知道該照課表、降量,還是先休息。
這就是 running-app 的起點。

總覽頁把跑力、週跑量、心率區間與訓練負荷放在同一個畫面,不用在 Garmin、筆記和工具網站之間來回切換。
用到的工具與架構
這是一個本機優先的跑步資料分析儀表板,用 AI Agent 協作整理 Garmin 跑步紀錄、HRV、訓練負荷、VDOT、心率區間與天氣資料,幫我把分散在 Garmin、筆記與訓練工具裡的資訊集中成一個可視化工作台。
它可以追蹤跑力趨勢、心率配速、準備度與訓練負荷,也能用 AI 協助解讀近期訓練狀態、規劃課表,最後把確認後的課表推送到 Garmin 手錶。
這個作品的資料與方法主要參考:
- Garmin / Garmin Connect:跑步紀錄、GPS、配速、心率、HRV、訓練效果與手錶訓練流程。
- Garmin Forerunner 965:實際配戴與課表執行裝置。
- LifeOS 健康紀錄:歷史 workouts CSV、每日資料與個人訓練設定。
- Paceriz:參考跑步訓練 App 如何把資料做成分析中控台。
- ctyeh 跑步工具站:參考訓練工具、公式整理與研究實證的呈現方式。
- RunningQuotient / RQ、Jack Daniels VDOT、Karvonen 心率儲備法:作為跑力、心率區間與訓練強度解讀的依據。
- Open-Meteo、中央氣象署、WBGT、露點、Strava GAP:補上天氣、熱壓力與坡度配速相關資料。
flowchart TD
A["Garmin 跑步紀錄與 HRV"] --> B["本機 running-app API"]
C["LifeOS 健康紀錄與 workouts CSV"] --> B
D["天氣與訓練方法資料"] --> B
B --> E["圖表與準備度分析"]
B --> F["訓練工具箱"]
B --> G["AI 協助解讀"]
G --> H["課表草稿"]
H --> I{"確認後是否推送?"}
I -->|是| J["Garmin 手錶"]
I -->|否| K["保留在本機計畫頁"]
以前怎麼做/現在怎麼做
以前的做法很分散。
一開始我直接使用 Garmin 預設的課表,但課表強度完全超出自己可以承受的負荷,以致於訓練效果不佳。如果要了解訓練效果,還要把 Garmin 的數據截圖,另外整理跑步心得,去問 AI。這樣做不是不行,但每次都很碎,也很容易只看單一數字,忘記把恢復、訓練負荷和目標賽事放在一起判斷。
現在我把這些資料集中到本機儀表板。
總覽頁先回答「最近狀態怎樣」。準備度分析回答「今天適合照課表、降量還是休息」。訓練負荷頁看 CTL、ATL、TSB 和週負荷變化。心率與配速頁看有氧效率和不同強度下的身體反應。

準備度分析把速度、耐力、比賽適能、訓練負荷與恢復狀態拆成評分卡,用來輔助判斷今天適合照課表、降量或休息。
一次實際跑起來會發生什麼
我打開儀表板後,第一步會看總覽和準備度。這兩頁會先讓我知道最近跑力、週跑量、心率區間和訓練負荷是否合理。
如果需要更細的判斷,我會進到訓練工具箱。裡面有 VDOT 訓練配速、心率區間、HRV 訓練調整、傷害風險 ACWR、環境配速、賽前準備等工具。

訓練工具箱把 VDOT、心率區間、HRV、ACWR、環境配速與賽前準備整理成可操作工具,並盡量預填我的真實資料。
我也可以進到 AI 教練頁,請它協助解讀近期狀態,或產生本週課表草稿。這裡的 AI 不是直接替我決定,而是把資料整理成比較容易討論的建議。

AI 教練頁可以根據近期訓練資料、HRV、VDOT 與訓練負荷,協助解讀目前狀態,並把課表草稿整理成可以存入本週訓練的格式。
如果課表確認沒問題,再由計畫頁接住,必要時推送到 Garmin 手錶。這一步我刻意做成需要確認後才執行,因為寫入 Garmin 帳號是對外動作,不應該讓 AI 自動亂推。
現在的具體成果
目前 running-app 已經是一個我自己會打開看的本機工具,不只是展示用 demo。
它現在可以做到:
- 整合 Garmin 跑步紀錄、HRV、心率區間與歷史 workouts CSV。
- 用圖表追蹤跑力趨勢、心率配速、訓練負荷和強度分布。
- 用準備度頁輔助判斷今天該照課表、降量或休息。
- 用訓練工具箱整合 VDOT、HRV、ACWR、環境配速、賽前準備等工具。
- 用 AI 協助解讀近期訓練狀態與規劃課表。
- 課表確認後,可以推送到 Garmin 手錶執行。

訓練負荷頁用 CTL、ATL、TSB 與週負荷變化,輔助判斷最近是訓練不足、穩定累積,還是需要降量。

心率與配速頁把不同訓練強度下的心率、配速與環境資料放在一起,幫我觀察有氧效率和狀態變化。
設計時做過哪些取捨與調整
第一個取捨是本機優先。跑步紀錄、HRV 和健康資料都很私人,所以我沒有先做成公開網站,而是先讓它在自己的電腦上穩定運作。
第二個取捨是AI 只輔助判斷。這個工具可以幫我整理資料、解讀趨勢、產生課表草稿,但它不取代專業教練,也不取代醫療建議。
第三個取捨是推送前一定要確認。只要會寫入 Garmin 帳號或手錶課表,就不能讓 AI 自動執行;必須先預覽、確認,再推送。
第四個取捨是資料來源要標註。像 VDOT、Karvonen、HRV-guided training、ACWR、WBGT 這些方法,各自有不同的使用限制。工具裡會盡量把來源和信心程度寫清楚,避免把經驗法則講成絕對答案。
上課後最大的改變
以前我比較容易把 AI 當成更好用的 Google:拿來問答案、查資料,或請它幫我寫一小段內容。這次做 running-app,我更明顯感覺到 AI Agent 可以參與一整個長期迭代流程。
它不只是幫我寫前端或後端,也幫我整理資料來源、檢查數據口徑、追 bug、拆頁面、整理截圖和作品投稿內容。
其中一次很代表性的經驗是:趨勢頁整頁空白,表面看起來像前端圖表壞掉,但最後追到根因是 FastAPI 裝飾器掛錯函式,API 回傳了錯的資料。這件事讓我更確定,AI Agent 的價值不只是產生程式碼,而是陪我建立診斷流程。
輸出一個自己真的會用的工具,比看完一堂課更能留下學習痕跡。
下一步想優化什麼
下一步我想把 AI 教練的課表產生流程再結構化,讓每個建議都能追溯到它依據了哪些資料,例如近期跑量、HRV、訓練負荷或目標賽事。
進一步認識作者
品捷正在把 AI Agent 接進自己的 LifeOS、學習流程與日常訓練。這個 running-app 是我用 AI Agent 做出的真實練習:不是為了展示「AI 可以做網頁」,而是為了讓每天的跑步訓練更容易被理解、被調整、被執行。
如果你也有一堆分散在 App、試算表、筆記和工具網站裡的資料,我很推薦從一個自己真的會每天打開的小工具開始。先不用完美,先讓它回答一個你真的在乎的問題。


