Poise 的公開頁面不傳送前端 JavaScript,也不在文章中使用圖片、SVG、影音、Web Font、iframe 或第三方資源。每個頁面只需要 HTML 與一個本地 CSS;唯一的二進位例外,是瀏覽器頁籤使用的根目錄 favicon。

這組規則首先解決的是可靠性。如果使用者停用 JavaScript、腳本載入失敗,或瀏覽器功能受到限制,文章、導覽、標籤與彙整仍然完整可用。網站不需要等待 hydration,也沒有「內容已下載但畫面尚未啟動」的中間狀態。

互動越少,失敗面越小

一般部落格常見的漢堡選單、明暗切換、站內搜尋和留言系統,往往會逐步帶入更多腳本、資料請求和第三方服務。Poise 不用 JavaScript 重建這些功能,而是重新評估它們是否必要。

導覽使用普通連結,在窄螢幕上自然換行;明暗模式交給 CSS 的系統偏好;文章探索使用標籤、年份彙整、前後篇與 RSS;程式碼以原生的 precode 呈現。這些功能不需要瀏覽器執行應用程式。

即使 CSS 完全沒有載入,語意化 HTML 仍保留正確閱讀順序。這是漸進增強最簡單的形式:先確保文件本身成立,再用一小層樣式改善閱讀。

CSP 不是唯一防線

網站的 Content Security Policy 禁止腳本、字型、影音、frame、連線與第三方資源。為了讓 favicon 正常顯示,圖片政策只允許同源資源,但這不代表文章可以加入其他圖片。

真正的限制由多層機制共同完成:

  1. 發布 Skill 不建立圖片或媒體內容。
  2. 原稿驗證器拒絕 Markdown 圖片、媒體標籤、Mermaid 和危險 URL。
  3. light-marmite 跳脫原始 HTML。
  4. 產物稽核只允許根目錄的 favicon.ico,並拒絕 HTML 中的圖片元素。
  5. CSP 在瀏覽器端再次限制可載入和執行的資源。

這也解決了 favicon 曾被過度嚴格 CSP 阻擋的問題:我們沒有放寬整個網站的媒體政策,而是建立一個可以被 CI 驗證的最小例外。

效能是架構結果

當頁面沒有 JavaScript bundle、圖片、字型和第三方追蹤器,速度不再主要依賴後續最佳化。第一次造訪只下載文章 HTML 與一個約數 KB 的 CSS,後續頁面通常可以重用已快取的樣式。

同時,網站沒有執行時 API、資料庫、Cookie 或 local storage。Cloudflare 收到請求後只需回傳已建置完成的靜態檔案。

這種設計不適合每一種網站,但很適合以閱讀為核心的部落格。Poise 選擇讓文字成為產品本身,而不是先建立一個前端應用,再把文字放進去。