給一般民眾
從常見問題與疾病主題開始,逐步理解症狀、檢查、治療與日常照護。
- 胸痛、心悸、喘、血壓與膽固醇、心臟檢查、瓣膜疾病等 15 個主題入口
- 心臟、上肢、下肢 3D 互動解剖,看懂血管、血流與常見心導管治療
- 知道何時觀察、何時安排門診、何時儘速就醫
本網站由黃天祈醫師自行架設與維護,並公開技術細節,供有興趣自建醫療衛教網站的醫師參考。
BetterHeart 不只是心臟衛教文章,也不只是計算器集合。它把醫師在診間反覆解釋的問題、需要快速核對的規則,以及民眾真正關心的下一步,整理成兩條清楚的使用路徑;而心臟、上肢與下肢的 3D 互動解剖,則讓兩邊都能直接在瀏覽器裡「看見」解剖與手術過程。
面對同一個心血管問題,一般民眾需要的是容易理解的說明、何時該就醫與如何照護;醫療專業人員需要的則是能迅速核對的公式、給付條件、藥物劑量與注意事項。
如果把這些內容全部放進同一層選單,民眾容易被艱深資訊淹沒,專業使用者也得在大量衛教文字中尋找工具。因此 BetterHeart 從首頁就依「此刻要完成什麼」分流,而不是只按網站欄目分類。
每一項功能都從實際問題往回設計:先確認誰要使用、需要做什麼決定,再選擇文章、計算器、條件快查、時間軸或 3D 互動模型作為最合適的呈現方式。技術是支撐這段流程的工具,不是網站的主角。
同一個網站,兩條清楚的路徑;共同目標是讓重要資訊更快被找到、理解與正確使用。
入口不是依網站欄目分類,而是依使用者當下要完成的事情分類。
從常見問題與疾病主題開始,逐步理解症狀、檢查、治療與日常照護。
從臨床情境直接進入計算與快查,降低在多份條文或公式之間切換的負擔。
以標題、內文目錄與區塊化內容整理醫療知識;後台可直接編輯,並輸出符合搜尋引擎與社群分享的結構化資料。
常用公式寫成瀏覽器端固定運算邏輯,邊填邊算;欄位未填完會標示尚缺項目,並可輸出可貼進病歷的文字。
依臨床情境篩選降血脂與抗凝抗栓用藥、術前停藥建議與肺癌藥物基因檢測,帶出適用條件、劑量、療程時間軸與重要限制。
把心衰竭治療流程圖、TSOC 經胸超音波共識與 ASE 右心及肺高壓指引整理成可瀏覽、可查圖表的頁面,保留章節與出處。
心臟、上肢(升主動脈到指尖)與下肢(腹主動脈到腳底)可旋轉、縮放、點名稱高亮,並有血流動態、超音波切面與 PCI、TAVI 等介入手術教學動畫。
一般民眾從症狀與疾病主題進入;醫療專業人員由計算器與快查工具進入,各自快速抵達需要的內容。
年齡、性別、血壓、腎功能等基本數值在不同計算器之間自動沿用,減少重複輸入與抄寫錯誤。
工具、卡片與療程時間軸皆針對手機與桌面調整,讓診間、病房或居家閱讀都能清楚操作。
上傳圖片保留原始檔,並以 Sharp 產生 WebP 與縮圖版本,兼顧畫質、社群分享與載入速度。
心臟、上肢與下肢三個 3D 頁面直接在瀏覽器以 WebGL 呈現,不需安裝外掛;以下是它們共通的技術做法。
三個 3D 頁面都不使用打包器或前端框架;three.js 與 OrbitControls 只放一份(約 0.74 MB,傳輸時壓縮),由三頁共用並被瀏覽器快取。
來源為 Z-Anatomy/BodyParts3D 圖譜。建置時用自寫的 GLB 解析器依名稱挑出血管、神經、骨骼與肌肉,焊接頂點後打包成座標加索引的 .bin 與 manifest JSON;約 31 MB 的原始 glb 與 obj 只在建置時使用,不上線。
依血管幾何算出中心線(由親血管起算的測地距離,再分成分支樹),以 instanced 亮點沿線流動:動脈為脈動、靜脈為緩慢反向。心臟頁的冠狀動脈與瓣膜血流使用同一概念。
選取時在同一份幾何上疊一層綠色材質,粗細與其他構造不變、也不使其他構造變暗;標籤以單側肢體為錨點,手機版改為單欄排列並保留英文副標。
下肢用垂直高度滑桿,上肢用可在 X 與 Y 方向拖曳的半身小地圖,手機上以視角偏移讓選定肢體完整露出。
PCI、TAVI、ASD 封堵、二尖瓣氣球擴張與旋磨以程式化方式生成導管、氣球、支架與瓣膜,全部沿導線移動;以透視(X 光)方式繪製,並共用步驟面板與自動跟隨相機。
資料夾約為:心臟 2.0 MB(含共用 three.js)、上肢 3.2 MB、下肢 3.5 MB;首次開頁下載約 1.4、3.3、3.6 MB。網格 .bin 目前未壓縮傳輸,是日後最容易優化的部分。
模型為 CC BY-SA;各頁附 MODEL-NOTICES.txt 說明來源與修改,改編後的網格以相同授權提供。以無頭 Chromium(SwiftShader)在桌面與手機尺寸擷圖,並於實際網址上驗證。
讀者看到的是一個網站,背後其實是一趟從「需求」出發、經過安全入口與應用服務,再回到有用資訊的完整旅程。整套平台部署在自行管理的 Synology NAS 上。

民眾想理解疾病與下一步;醫療專業人員想快速核對公式、劑量與給付條件。
Synology DSM 反向代理處理公開網域、TLS 憑證與加密連線,先建立安全入口。
Caddy 判斷網址路徑,將 /betterheart、統計與其他服務送往正確的內部容器。
Express 組合頁面、處理後台與圖片;預建 SPA 與靜態工具頁負責互動較複雜的快查、指引與 3D 解剖。
文章、設定與圖片由自有儲存空間提供,再把適合手機或桌面的結果送回讀者。
混合式渲染:多數公開頁面由 Node.js 在伺服器端即時組合,有利於直接閱讀與搜尋引擎理解;互動較複雜的快查工具採預先建置的單頁應用,3D 解剖頁則以靜態 ES 模組在瀏覽器端用 WebGL 繪製。網站流量以自架 Umami 做無 cookie 統計,分析資料同樣留在自己的環境。
維護這個網站不是「寫好程式碼、包裝、上傳更新」的傳統流程,而是透過同一個瀏覽器終端機介面,讓 Codex CLI 與 Claude Code CLI 兩種編碼代理直接在 NAS 的專案目錄裡工作。
每次修改都要在多台裝置與服務之間來回搬運檔案:
Codex CLI 與 Claude Code CLI 共用同一個瀏覽器終端機介面,直接在 NAS 上:
安全邊界:編碼代理只能操作專案掛載的目錄,部署動作也僅限白名單內的 restart/up/rebuild/status/logs,不能任意存取 NAS 其他區域或執行未列入白名單的指令。
網站的價值不只在伺服器架構,更在於醫療資訊如何被整理、覆核、發布與持續修正。
從診間常見疑問與實際核對需求選題,先寫清楚適用對象、用途與不能取代的臨床判斷。
需要理解脈絡的主題寫成衛教文章;需要重複運算或逐項核對的工作,才做成計算器與快查。
文章透過區塊式後台整理標題、摘要、圖片與來源;頁面同步輸出 canonical、結構化資料、sitemap 與 RSS。
以隱私友善的整體流量觀察哪些頁面真正被使用,再改善入口、說明與操作流程,而不是追蹤個別讀者。
AI 的角色:後台可用 AI 協助整理草稿與欄位,但不讓 AI 自動診斷、決定處方或跳過醫師覆核;公開內容與工具規則仍由人負責。
自主管理的伺服器環境,集中保存服務、內容資料與圖片資產,不依賴外部雲端主機。
將網站執行環境封裝成容器,讓部署、重啟與版本更新一致且可重現。
透過瀏覽器終端機直接在 NAS 上讀寫實際運作中的程式碼並線上重新建置,取代下載、上傳來回搬運檔案的傳統更新流程。
DSM 反向代理負責對外 HTTPS 與憑證;Caddy 再依網址路徑(/betterheart)把請求轉送到對應容器。
伺服器端即時渲染公開頁面,並處理後台管理、文章與設定資料、圖片上傳與 SEO 檔案。
前端不使用大型框架,以漸進增強方式建立互動介面、即時計算與視覺化時間軸。
「降血脂藥健保快查」等互動較複雜的工具,以現代前端工具預先建置為靜態單頁應用,掛在同一個服務下,兼顧複雜互動與載入速度。
文章與設定以 JSON 檔保存(約 30 秒快取,直接編輯即更新);Sharp 自動產生 WebP 與縮圖。
區塊式文章編輯器與圖片庫;可選擇呼叫 AI 協助整理草稿,API 金鑰只保留在 NAS,不會傳到瀏覽器。
隱私友善的流量統計,不使用 cookie、不建立個人識別,分析資料留在自己的 NAS。
為頁面建立英文網址、canonical、Open Graph、JSON-LD、sitemap 與 RSS。
風險分數、腎功能與給付條件以明確公式及條件分支執行,讓相同輸入得到一致結果。
例如 eGFR 與 Cockcroft–Gault CrCl 分別呈現,避免把 CKD 分期與藥物劑量評估混為一談。
除了候選藥物,也顯示劑量、療程、禁忌、健保狀態與需進一步核對的條件。
工具協助整理資訊與減少遺漏,最終處方仍須結合病人的完整病史、檢驗與最新規範。
醫療提醒:網站工具供醫療資訊整理與臨床核對使用,不能取代個別診斷、專業判斷或最新藥品仿單與健保公告。