Communitygithub.com

saikirantechy/open-design-ai

建立產品上市前的候補名單頁面,支援電子郵件蒐集、品牌標誌與裝飾層。讀取 DESIGN.md 中的顏色、字體與佈局規則。最適合產品發表、Beta 註冊、早期存取計畫與獨立專案。

open-design-ai 是什麼?

這項技能以極簡而誠實的方式建立候補名單(Waitlist)頁面,避免使用虛假稀缺性或倒數計時等常見手法,專注於引導使用者留下電子郵件作為真實興趣的表達。它會先讀取專案中的 DESIGN.md 檔案,從中提取品牌色系、字體與空間規則,並將預先建置好的模板 (assets/template.html) 複製為 index.html 作為基礎。隨後,技能會逐步替換模板內的佔位符(如 {{PRODUCT_NAME}}、{{BG_EXPRESSION}}),並對文字、顏色、字型網址等各類 Token 執行嚴格的轉義與注入防護(如 CSS 注入封鎖、SVG 消毒)。在輸出前,技能會依據 references/checklist.md 中的 P0 檢查清單,驗證是否有且僅有一個 CTA、無水平滾動、顏色全部取自 DESIGN.md 等強制條件,通過後才會輸出單一 HTML 檔案。此技能支援多種平台(如 Claude Code、Cursor),提供開發者一個穩固、符合無障礙標準且易於後續 AI 代理自訂的候補名單頁面方案。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/saikirantechy/open-design-ai/tree/HEAD/skills/waitlist-page

在你喜歡的 AI 中提問

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

說明文件

Waitlist Page 技能

上市前的頁面是你與未來使用者的第一次握手。這項技能打造一個專注且誠實的入口:你的品牌識別、正在打造的產品、以及一條加入早期名單的明確路徑。沒有虛假稀缺性、沒有假倒數計時、沒有誇大手法——只是一個乾淨、行動優先的容器,用來容納真正的興趣。

工作流程

前置:載入強化模板與品牌基礎

  1. 載入品牌識別 — 讀取 DESIGN.md 以取得色彩系統、字體搭配與空間規則。這是你的基礎。一個候補名單頁面能否存活,取決於它與所代表品牌的一致性。如果 DESIGN.md 遺失,請要求使用者先提供一份再繼續。
  2. 讀取並複製可重複使用的模板 — 讀取 assets/template.html。這個模板是所有輸出的強化種子。將其複製到 index.html 作為你的基礎。不要從頭編寫 HTML 或偏離此結構。模板已包含所有必要的佈局、表單結構、裝飾、焦點樣式與無障礙支架。

步驟:帶有驗證與跳脫的 Token 映射

  1. 從輸入中映射 Token — 對於模板中的每個佔位符(例如 {{PRODUCT_NAME}}、{{BG_EXPRESSION}}、{{BORDER_EXPRESSION}}、{{LOGO_MARK}}),遵循以下替換規則:
    • 文字 Token({{PRODUCT_NAME}}、{{TAGLINE}}):在插入 HTML 文字節點或屬性值之前,對 <、>、&、"、' 進行 HTML 跳脫。
    • HTML Token({{LOGO_MARK}}):如果使用文字縮寫,預設對其進行 HTML 跳脫。如果使用內聯 SVG,你必須使用允許清單對其進行嚴格消毒:移除 <script> 標籤、事件處理常式(on*)、<foreignObject>、外部參考(href、xlink:href、url())以及任何不允許的屬性/元素後再插入。如果 SVG 無法安全消毒,則回退到已跳脫的文字縮寫。切勿直接輸出未經消毒的任意 HTML。確保任何 SVG 在其容器內能乾淨縮放。
    • 顏色表達式 Token({{BG_EXPRESSION}}、{{FG_EXPRESSION}}、{{ACCENT_EXPRESSION}}、{{DECO_EXPRESSION}}、{{STRIPE_EXPRESSION}}、{{SUCCESS_EXPRESSION}}、{{BORDER_EXPRESSION}}、{{BTN_LABEL_EXPRESSION}}、{{TICKER_BG_EXPRESSION}}、{{TICKER_FG_EXPRESSION}}、{{DECO_STROKE_EXPRESSION}}、{{LOGO_SHADOW_EXPRESSION}}、{{LOGO_FG_EXPRESSION}}):必須嚴格遵循明確的顏色文法(#hex、rgb/rgba、hsl/hsla、oklch 或僅使用區域變數的 color-mix())。硬性拒絕任何包含 ;、{}、<、>、註解(/*)、@、url( 或外部參考的輸入,以防止 CSS 注入。不要包裝在 # 中或添加額外引號。範例:rgba(196, 169, 154, 0.38)、color-mix(in srgb, var(--fg) 38%, transparent)、#FDE8DF。按原樣插入到 :root CSS 變數中。如果 DESIGN.md 中存在,則從中推導 --success;否則僅使用允許的回退值 #2D6A4F。
    • 字型名稱 Token({{DISPLAY_FONT_CSS}}、{{BODY_FONT_CSS}}):這些是 CSS font-family 值,如果包含空格則已加引號(例如 'DM Sans'、Syne)。按原樣插入到 --font-display 和 --font-body 宣告中;不要添加額外引號。
    • 字型網址 Token({{DISPLAY_FONT_URL}}、{{BODY_FONT_URL}}):空格必須編碼為 + 以便用於 Google Fonts 網址(例如 DM+Sans、IBM+Plex+Serif)。在插入之前驗證網址格式是否正確。
  2. 驗證 Token 映射規則 — 所有顏色 Token 現在都存在於 CSS 變數中:
    • --bg = {{BG_EXPRESSION}}(例如 #FDE8DF)
    • --fg = {{FG_EXPRESSION}}(例如 #1A1410)
    • --accent = {{ACCENT_EXPRESSION}}(品牌徽章)
    • --deco = {{DECO_EXPRESSION}}(裝飾主要)
    • --deco-stripe = {{STRIPE_EXPRESSION}}(強調條紋)
    • --input-border = {{BORDER_EXPRESSION}}(完整 CSS 表達式,含透明度)
    • --success = {{SUCCESS_EXPRESSION}} 或 #2D6A4F 回退
    • --btn-label = {{BTN_LABEL_EXPRESSION}}(按鈕文字顏色,用於對比)
    • --ticker-bg = {{TICKER_BG_EXPRESSION}}(動畫跑馬燈背景)
    • --ticker-fg = {{TICKER_FG_EXPRESSION}}(動畫跑馬燈文字)
    • --deco-stroke = {{DECO_STROKE_EXPRESSION}}(SVG 筆畫,通常為低飽和度 12–15% 透明度)
    • --logo-shadow = {{LOGO_SHADOW_EXPRESSION}}(標誌容器陰影,微妙的前景色調)
    • --logo-fg = {{LOGO_FG_EXPRESSION}}(標誌縮寫的對比文字顏色)
  3. 響應式佈局 — 模板包含行動優先縮放:
    • 375px:表單堆疊為單欄,標誌縮小至 40px,裝飾壓縮,無水平滾動。
    • 768px:舒適的雙欄呼吸空間。
    • 1440px+:置中佈局搭配寬敞空白。
    • 驗證所有文字保持可讀,且電子郵件輸入框與按鈕在 375×667 和 390×844 尺寸下完全可見(無裁剪)。

驗證:在輸出前執行強化品質檢查

  1. 執行品質檢查清單 — 讀取 references/checklist.md。在輸出前驗證每個 P0 關卡:
    • 恰好一個 CTA(電子郵件表單)
    • 無倒數計時器、無虛假社交證明、無表情符號
    • 在 375px 寬度下無水平滾動
    • 電子郵件輸入框具有 type="email" 和 required;名字欄位不具有 required
    • 表單未使用 novalidate;JS 使用 checkValidity() 保護
    • 成功訊息具有 role="status" 或 aria-live="polite"
    • 所有顏色來自 DESIGN.md 或允許的回退值;無憑空製造的 hex 數值
    • 所有使用者文字已進行 HTML 跳脫;顏色 Token 遵循嚴格文法;字型已進行 URL 編碼
    • 通過 P0 否則不輸出。 如果任何 P0 關卡失敗,請詢問使用者或修正 Token 映射並重試。
  2. 驗證 P1 關卡 以確保品質提交(建議):
    • 提交按鈕的懸停與啟動狀態
    • 表單驗證附有清晰的回饋
    • 跑馬燈動畫尊重 prefers-reduced-motion: reduce
    • 所有互動元素具有可見的焦點樣式(input:focus 包含 outline)
    • Tab/Enter 鍵盤支援
    • 內文 WCAG AA 對比(≥4.5:1)與按鈕標籤(≥4.5:1)
    • 標誌包含 alt/aria-label;跑馬燈具有 aria-hidden="true"
    • 已設定 <html lang="">

輸出

  1. 輸出乾淨的 HTML — 單一檔案,CSS 內聯,圖形使用 SVG。為互動元素標記 data-od-id(標題、表單、標誌、跑馬燈、網格等),以便代理能夠無需解析即可自訂。

品質關卡

此技能強制執行一個強化、基於模板的工作流程,以確保合規。你必須遵循此執行路徑;偏離模板將使輸出不合格。

強制模板化執行:

  • 讀取 assets/template.html 作為你的基礎;不要從頭編寫 HTML。
  • 將其複製到 index.html,並僅用經過驗證/跳脫的值替換 {{PLACEHOLDER}} Token。
  • 在輸出前運行 references/checklist.md 中的每個 P0 關卡;如果任何一個失敗,修正並重新驗證。

P0 關卡(必須通過):

  • 單一 CTA:電子郵件表單是唯一的互動元素。無導航、無次要按鈕、無社交連結。
  • 標誌位置:固定在左上角,符合 DESIGN.md 強調色,在行動裝置上縮放(50px → 40px)。
  • 顏色一致性:每個顏色皆來自 DESIGN.md 調色板。唯一允許的硬編碼例外:--success 的 #2D6A4F。
  • 無反模式:無倒數計時器、無虛假社交證明、無表情符號圖示、無 lorem ipsum。
  • 內容完整性:標題與文案直接與 product_name 和 tagline 輸入相關——無填充內容。
  • 行動裝置適配:在 375px 無水平滾動。電子郵件輸入框與提交按鈕在 375×667 和 390×844 尺寸下完全可見(無裁剪)。垂直溢出可滾動,而非隱藏。
  • 字體紀律:僅限顯示+正文字體(2 字體規則)。跨區塊大小一致。
  • 表單結構:兩個欄位(名字可選、電子郵件必填),checkValidity() 保護,成功訊息帶有 role="status"。
  • Token 跳脫:所有使用者提供的文字已進行 HTML 跳脫;顏色 Token 遵循嚴格文法且不包含危險字元(;、{}、<、>、/*、@、url();字型名稱已進行 URL 編碼;{{LOGO_MARK}} 為已跳脫的文字縮寫或經過嚴格消毒的內聯 SVG(無腳本、無事件處理常式、無 foreignObject、無外部 href)。

P1 關卡(為確保品質提交應通過):

  • 主視覺區域視覺明顯且位於首屏之上。
  • 電子郵件提交按鈕具有懸停與啟動狀態。
  • 表單驗證提供清晰回饋。
  • 頁面在所有行動裝置視口中可滾動(無裁剪);CTA 無需滾動即可見。
  • 跑馬燈動畫在 prefers-reduced-motion: reduce 下暫停/移除。
  • 所有互動元素具有可見的焦點樣式(outline,而非僅 outline:none)。
  • 鍵盤:Tab 可到達每個表單欄位;Enter 可提交。
  • WCAG AA 對比:內文 ≥4.5:1,按鈕標籤 ≥4.5:1。
  • 標誌包含 alt/aria-label;跑馬燈具有 aria-hidden="true"。
  • <html lang=""> 設定為正確的語言代碼。

裝飾節制:

  • 下方區域增強效果而不造成干擾。使用透明度、細微筆畫、低調動畫。
  • 無跨越多於 20% 視口高度的漸層。
  • 螺旋、條紋、網格或跑馬燈均僅使用 DESIGN.md 中的顏色。

輸出

僅在所有 references/checklist.md 中的 P0 關卡通過後才輸出。

將成果物包含在標籤之間輸出:

<artifact identifier="waitlist-id" type="text/html" title="Coming Soon — {{PRODUCT_NAME}}">
<!doctype html>
<html lang="en">
...
</html>
</artifact>

在成果物上方寫一行描述;下方不寫任何內容。

輸出後: 如果使用者要求更改,請就地更新 index.html,並在輸出下一個版本之前重新執行 P0 檢查清單關卡。不要在迭代中跳過驗證。

相關技能