Communitygithub.com

cdesiles/design-verify

在真實瀏覽器中檢查設計成品,包含主控台錯誤、損壞資源、溢出問題,並查看截圖進行視覺審查。交付前必讀。

design-verify 是什麼?

這個技能提供了一個自動化驗證流程,讓開發者或設計師在實際瀏覽器中檢查 HTML 設計成品,而非僅依賴本機預覽。它會啟動一個臨時的 localhost 伺服器,在無頭瀏覽器(headless)中載入檔案,並擷取主控台錯誤、失敗的網路請求(如字型、圖片)、水平溢出以及其他關鍵資訊,最後生成截圖供視覺審查。支援多種使用情境,包括投影片組(每張獨立截圖)、文件(指定寬高)、海報或固定畫布,並可調整等待時間以處理動畫。此技能與 OpenCode CLI 工具整合,並可與 `inline.mjs` 搭配使用,將外部樣式表內嵌以產出獨立版本。輸出格式為 JSON 和 stderr 摘要,若 exit code 為 1 則表示有問題。**設計未完成,僅因腳本 exit code 為 0 並不表示設計沒問題。** 此外,若設計旁有 `tokens.css`,它會自動驗證 token 使用紀律,列出所有顏色字面值,協助確保設計遵循設計系統。

相容平台~Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/cdesiles/opencode-kit/tree/HEAD/skills/design-verify

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Verify

腳本負責抓出機械性錯誤。截圖則讓你抓出設計錯誤。每次都要做這兩件事。

執行

node ~/.config/opencode/lib/design/verify.mjs "design/Foo.html" --full --out design/.verify/foo.png

常用變化:

案例旗標
投影片組,每張單獨截圖--each "section" --step --each-out design/.verify/deck
文件,列印寬度--width 900 --height 1200 --full
海報或固定畫布--width 1080 --height 1350 --full
窄面板檢查--width 900
緩慢動畫等待穩定--settle 2000

它會在一個臨時的 localhost 連接埠上提供檔案服務,以無頭模式載入,並輸出 JSON 以及 stderr 上的摘要。Exit code 1 代表有問題。

閱讀輸出

  • errors — 主控台錯誤和未捕獲的例外。通常是腳本參照了不存在的元素。修正原因,不要直接壓制錯誤。
  • failedRequests — 缺少的字型、圖片、同層檔案。缺少字型會默默 fallback,導致整個字型決策失效,所以這個項目的重要性比看起來更高。
  • horizontalScroll — 頁面比視窗寬。在螢幕上表示出現了沒人想要的捲軸;在列印中表示內容被右邊緣切掉。從 overflowing 清單找出超出的元素。
  • metrics.fontFamilies — 實際呈現的字型。如果顯示字型不在清單中,表示字型未載入,你正在審查的是 fallback 字型。
  • images[].loaded: false — 損壞的資源或錯誤的相對路徑。
  • metrics.nodeCount — 合理性檢查,非目標數值。

檢查 Token 使用紀律

在評斷設計之前,先檢查它是否確實使用了系統。當 tokens.css 與設計成品放在同一目錄時,驗證器會自動為你處理 tokens 部分:它會警告頁面未連結該檔案,並列出頁面自身 CSS 以及其他本地樣式表(例如 components.css)中出現的每個顏色字面值——包含 hex、oklch()、rgb() 等。

每一個命中要不是一個應該存在的 token,就是一個繞過檔案的數值。結構性 CSS(如投影片組的 scale transform、海報的 grid)合理包含 px 數值;顏色字面值幾乎從來不該出現。中性的檢視器 chrome(如投影片組的 letterbox 或文件頁面周圍的桌面)會使用命名的顏色,例如 black 和 white。

然後查看截圖

開啟檔案。依序評斷:

  1. 層級 — 視線是否先落在標題,再落在支援細節?瞇著眼看:如果所有元素權重相同,就沒有層級。
  2. 間距 — 一致的節奏,且充足。各群組之間不均等的間隙是最常見的未經考慮佈局跡象。
  3. 對齊 — 任何應該共用左邊緣但卻沒有的項目。
  4. 剪裁與重疊 — 文字觸碰到或越過邊界,元素超出其容器。
  5. 對比度 — 淺灰上的低灰是預設的失敗。檢查實際數值,不要相信截圖的呈現。
  6. 內容 — 沒有填充文字、沒有遺留的佔位文字、沒有你發明的數字。

修正並重新執行

直接從錯誤文字修正,不要重新讀取整個檔案來尋找行號。每次實質變更後重新執行。最多三輪——之後請附上誠實的備註說明仍有什麼問題,再交付。

匯出

當成品要放到不含資料夾的地方時:

node ~/.config/opencode/lib/design/inline.mjs "design/Foo.html"

這會寫出 Foo.standalone.html,並將本地樣式表複製到檔案中。也請在獨立版本上執行驗證器——因為內嵌時相對路徑和 url() 參照容易出錯。

永遠不要因為腳本 exit code 為 0 就說設計完成了。腳本不知道它看起來好不好。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

相關技能