Communitygithub.com

oil-oil/citycraft

使用城市風格庫與可選互動預覽,為產品、活動、行銷或品牌建立具有鮮明風格的完整落地頁,輸出 HTML、CSS、JS 和 SVG。

citycraft 是什麼?

此技能專為需要高視覺表現力的落地頁面而設計,提供超過 57 種城市風格模板,包含預先建立的多種區塊變體(如英雄區、特色區、見證區與轉換區),並整合 GSAP 動畫、SVG 設計與獨特版面元素(如剪裁路徑分隔線)。其核心理念是避免千篇一律的模板化頁面,透過多樣化的字型、紋理背景與導航驚喜來創造獨特的設計藝術品。使用者可以指定產品資訊與風格偏好,或讓 AI 代理自動選擇;技能會透過 Bash 腳本組合預製資產,大幅減少模型標記輸出,最終產出一組包含 `index.html`、`style.css`、`main.js` 與 `assets/icons.svg` 的完整落地頁面。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add oil-oil/citycraft

在你喜歡的 AI 中提問

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

說明文件

落地頁建置器

理念

此技能打造的落地頁面視覺上大膽張揚——不是典型的巢狀容器、卡片網格、可預測的網路模板。每個輸出都應該感覺像一個刻意的設計產物:

  • 佈局大膽 — 使用剪裁路徑分隔線而非水平線。文字溢出螢幕邊界。元素突破其網格格局。全視口標題。
  • SVG 作為設計核心 — 不是裝飾性的點綴。SVG 路徑隨滾動動畫,圖示具有個性,背景紋理來自 <feTurbulence> 雜訊。
  • 層次感與深度 — GSAP ScrollTrigger 創造真正的空間深度:互相重疊並覆蓋前一區塊的部分,固定面板在內容滑過時固定,視差效果作用於不同的 Z 層。
  • 背景質感 — 每個區塊都有紋理。絕不使用純色平面背景。
  • 導航驚喜 — 導航欄絕非標準的水平條。

預先綁定資產(請使用這些——不要重新發明)

此技能附帶預先建立的資產。請直接閱讀並使用它們:

檔案內容使用時機
assets/style-preview-template.html57 種城市風格預覽卡片步驟 2:用 sed 填入 __PRODUCT_NAME__ + __PRODUCT_HEADLINE__,另存為 style-preview.html,開啟
assets/options-preview-template.html互動示範:導航樣式、顏色變體、轉場樣式、英雄/特色/見證區變體步驟 3:用 sed 填入城市色彩代幣 + 產品名稱,另存為 options-preview.html,開啟
assets/textures.css6 個 CSS 紋理類別(.texture-kyoto、.texture-paris、.texture-tokyo 等)將匹配的類別複製到 style.css 中
assets/gsap-snippets.js6 個 GSAP 動畫函式(模糊入場、線條揭示、視差、黏性步驟、爆破選單、磁性按鈕)將相關函式複製到 main.js 中
assets/clip-paths.css8 個剪裁路徑分隔線類別(.clip-diagonal-br、.clip-parallelogram、.clip-arc-bottom 等)在 style.css 中至少使用 2 個作為區塊分隔線
assets/sections/hero-variants.html3 個英雄區模板(全屏鋪張/分屏張力/極簡下降)步驟 4:根據使用者字型偏好選擇變體,複製並調整
assets/sections/features-variants.html6 個特色區模板(大數字/交替展示/時間線/本托格子/水平滾動/問答展開)步驟 4:根據內容類型選擇(統計數據 → 大數字,運作方式 → 時間線)
assets/sections/testimonial-variants.html6 個見證區模板(緊湊卡片/單列引用/馬賽克拼貼/滾動橫條/對話氣泡/頭像牆)步驟 4:根據見證數量與視覺風格偏好選擇
assets/sections/conversion-variants.html定價表、常見問題、品牌牆、強力 CTA步驟 4:複製相關區塊,全部使用 CSS 自訂屬性
references/product-demo-hero.md產品示範英雄區原則 + 場景設計指南當使用者想在英雄區展示產品工作流程時閱讀(參見步驟 3/4)

此技能的品質保證來自於使用這些資產。 它們編碼了具體的設計決策,使輸出與眾不同。不要描述要做什麼——直接複製程式碼並調整。


工作流程

步驟 1:了解產品

複用使用者已提供的產品與風格;僅在產品資訊缺失時詢問:

"告訴我你的落地頁是關於什麼的——產品/服務名稱,以及一句話介紹。"

使用者已提供產品說明、已選擇城市或已委託 Agent 決策時,直接進入相應步驟。

步驟 2–3:可選風格與佈局預覽

使用者已有選擇時直接複用;讓 Agent 選擇時讀取相關城市條目,說明理由後繼續。需要比較時按預覽工作流生成本地預覽。沒有可用預覽能力時在對話中提供少量候選,不把打開頁面當成使用者已經選定。

步驟 4:生成落地頁

輸出到 {product-name}-landing/:

{product-name}-landing/
├── index.html
├── style.css
├── main.js
└── assets/
    └── icons.svg

4a — Bash 組合(先做這個,在寫任何檔案之前)

目標是避免將預綁定資產的程式碼作為模型標記輸出。 相反地,使用 Bash 將現成資產複製並導入到輸出檔案中。僅有產品特定的內容(文案、代幣、覆寫)由模型撰寫。

步驟 1 — 建立目錄

_SKILL_DIR="<當前 Skill 的絕對目錄>"
_OUT="./{product-name}-landing"
mkdir -p "$_OUT/assets"

步驟 2 — 將區塊變體組合成暫存檔案

規劃要使用的變體(見下方表格),然後將每個變體導入暫存檔案:

# 將 B / C / B / PRICING 替換為使用者的實際選擇
python3 "$_SKILL_DIR/assets/scripts/extract_variant.py" \
  "$_SKILL_DIR/assets/sections/hero-variants.html" B > "$_OUT/_sections.html"
python3 "$_SKILL_DIR/assets/scripts/extract_variant.py" \
  "$_SKILL_DIR/assets/sections/features-variants.html" C >> "$_OUT/_sections.html"
python3 "$_SKILL_DIR/assets/scripts/extract_variant.py" \
  "$_SKILL_DIR/assets/sections/testimonial-variants.html" B >> "$_OUT/_sections.html"
python3 "$_SKILL_DIR/assets/scripts/extract_variant.py" \
  "$_SKILL_DIR/assets/sections/conversion-variants.html" PRICING >> "$_OUT/_sections.html"
python3 "$_SKILL_DIR/assets/scripts/extract_variant.py" \
  "$_SKILL_DIR/assets/sections/conversion-variants.html" CTA >> "$_OUT/_sections.html"

對於見證區使用:A、B、C、D、E、F 對於轉換區使用:PRICING、COMPARE_PRICING、BRAND_WALL、CTA、FAQ_A、FAQ_B

步驟 3 — 將預綁定 CSS 工具複製到 style.css 基礎中

# 紋理:使用 --texture 標誌(切勿讀取完整的 city-styles.md)
python3 "$_SKILL_DIR/assets/scripts/get_city_tokens.py" "CITY_NAME" --texture > "$_OUT/_texture.css"
# 剪裁路徑:複製所有類別,模型透過類別名稱選擇要套用的
cat "$_SKILL_DIR/assets/clip-paths.css" >> "$_OUT/_texture.css"

步驟 4 — 將 GSAP 片段複製到 main.js 基礎中

cat "$_SKILL_DIR/assets/gsap-snippets.js" > "$_OUT/_gsap-base.js"

現在讀取三個暫存檔案(_sections.html、_texture.css、_gsap-base.js)以了解可用的內容,然後編寫最終的輸出檔案。

4b — 區塊變體參考

常見頁面順序:

  • SaaS 工具:英雄 D → 特色 C → 特色 A → 見證 A → 定價 → 常見問題 A → CTA
  • 代理商作品集:英雄 A → 特色 B → 見證 C → CTA
  • 開發者工具:英雄 B → 特色 C → 特色 A → 見證 A → 定價 → 常見問題 B → CTA
  • 奢侈品:英雄 C → 特色 B → 見證 B → CTA
  • B2C 應用:英雄 E → 特色 E → 見證 F → CTA
如果使用者需要...使用此模板變體
英雄 — 大膽的標語全屏鋪張A
英雄 — 產品視覺 + 標題分屏張力B
英雄 — 優雅、故事優先極簡下降C
英雄 — 產品有工作流程要展示產品演示型D(也請閱讀 references/product-demo-hero.md)
英雄 — 字型主導、高衝擊力文字爆炸型E
英雄 — 編輯式敘事雜誌撕裂型F
英雄 — 有趣的產品發布彈出卡片型G
特色 — 數據/指標焦點大數字A
特色 — 產品截圖交替展示B
運作方式 — 逐步解說時間線C
特色 — 模組化故事區塊本托格子型D
特色 — 可瀏覽的功能帶水平滾動卡帶型E
特色 — 異議處理問答展開型F
定價表定價表PRICING
定價比較(含切換開關)對比定價表COMPARE_PRICING
見證 — 緊湊網格緊湊卡片網格A
見證 — 雜誌風格單列引用牆B
見證 — 砌石佈局馬賽克拼貼C
見證 — 水平滾動滾動橫條D
見證 — 對話氣泡對話氣泡E
見證 — 影片頭像牆影片頭像牆F
受信任的品牌標誌品牌牆BRAND_WALL
最終 CTA強力 CTA 區CTA
常見問題 — 編輯排版型編輯排版型FAQ_A
常見問題 — 全寬焦點型全寬焦點型FAQ_B

4c — 編寫輸出檔案

index.html — 使用「寫入」工具編寫。無 Markdown 程式碼區塊,直接寫入檔案。

  • 文件結構:<html>、<head>(Google Fonts、GSAP CDN、連結至 style.css + main.js)、<body>
  • 與所選導航樣式匹配的 Nav HTML
  • 按頁面順序貼上來自 _sections.html 的 <style> 區塊和 <section> HTML
  • 將所有佔位文案替換為真實產品文案 — 符合城市美學的語氣
  • 無 Lorem Ipsum,無佔位文字
  • 打破模板的單一性:在每個區塊內的項目之間改變視覺重量。模板顯示重複模式——讓一個項目成為焦點(強調背景、較大的卡片、精選徽章、不同的內部佈局),並讓其他項目退居幕後。不該有任何區塊看起來像複製貼上的網格。
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/ScrollTrigger.min.js"></script>

style.css — 使用「寫入」工具編寫。結構:

  1. :root 區塊 — 完整的設計代號系統:來自 $CITY_* 代號的顏色、選擇的字型、間距比例、圓角半徑。這是模型從頭編寫的唯一部分。
  2. 貼上來自 _texture.css 的紋理 + 剪裁路徑 CSS
  3. 與所選導航樣式匹配的 Nav CSS(來自 references/nav-catalog.md)
  4. 佈局和字型覆寫——僅當與區塊預設值不同時

所有標題字型大小使用 clamp():

  • 英雄主標題:clamp(2.8rem, 7vw, 7rem) — 即使鋪張型也不超過 7rem
  • 區塊標題:clamp(2rem, 4vw, 4rem)
  • 大數字/裝飾數字:clamp(4rem, 10vw, 9rem)
  • 副標題/說明文字:clamp(1rem, 1.4vw, 1.2rem)

不要向 style.css 添加註解——它們消耗標記,對輸出檔案沒有價值。

main.js — 使用「寫入」工具編寫。結構:

  1. gsap.registerPlugin(ScrollTrigger)
  2. 貼上來自 _gsap-base.js 的相關函式——最低要求:
    • initHeroEntrance() — 交錯顯示英雄元素
    • initParallax() — 至少 2 層以不同速度
    • 區塊標題在視口進入時揭示
    • initStickySteps() 或 initBlastMenu() 或 initMagneticPill() — 與導航/佈局匹配
  3. 底部的呼叫順序;字型載入後執行 ScrollTrigger.refresh()

不要向 main.js 添加註解。

assets/icons.svg — 包含 <symbol> 元素的 SVG 精靈。至少包含:標誌標記、導航切換、箭頭、勾選標記、2–3 個與產品相關的特色圖示。圖示樣式必須與城市美學的筆畫粗細和幾何形狀匹配。

所有檔案編寫完成後,刪除暫存檔案:

rm -f "$_OUT/_sections.html" "$_OUT/_texture.css" "$_OUT/_gsap-base.js"

設計法則(絕不違反)

  1. 沒有 #ffffff 背景。 區塊上沒有,卡片上也沒有。暖色中性色:#f5ede0。冷色:#edf0ee。深色:#08060f。卡片應有輕微色調,絕非純白。
  2. 沒有 #6366f1。 顏色來自城市風格色板。
  3. 獨立決定每個區塊邊界的轉場類型。 每對相鄰區塊都有其自身的視覺關係——不要在所有地方重複使用相同的剪裁路徑類別。使用者在選項預覽中選擇一個轉場方向(幾何銳利 / 有機柔軟 / 覆蓋混合 / 極簡線條 / AI 自動)。使用該方向來限制您選擇的類別:GEOMETRIC → 對角線、倒角、階梯;ORGANIC → 曲線、扇形、弧線;BLEND → 覆蓋疊加與漸層融合;MINIMAL → 極細線條。如果 __AI_CHOOSE__,首先在 references/city-styles.md 中掃描所選城市條目的分隔線/轉場語言。然後應用逐邊界邏輯:考慮兩個區塊是什麼(英雄 → 特色、特色 → 定價等)、它們的相對能量以及整體頁面節奏。assets/clip-paths.css 中可用的類別:對角線(clip-diagonal-*、clip-parallelogram)、曲線(clip-round-bottom、clip-scallop、clip-arc-bottom)、漸層融合(section-dissolve)、平面線(section-rule)。
  4. 沒有通用圖示。 匹配城市風格的筆畫粗細和幾何形狀。
  5. 至少兩種字型。 標題用的顯示/襯線字型 + 內文用的乾淨無襯線字型。來自 references/city-styles.md。裝飾/手寫字型(當城市風格提到時)用於浮水印、引文或裝飾元素——絕不應用於按鈕、導航或內文。
  6. 導航必須令人驚喜。 使用來自 references/nav-catalog.md 的所選導航,並實現其完整的驚喜元素。
  7. 使用預綁定資產。 紋理、GSAP 片段和剪裁路徑必須來自技能的資產檔案——而不是從頭重新實作。
  8. .line-wrap CJK 修正。 每當頁面有中文或日文文字,並使用 .line-wrap { overflow: hidden } 進行線條揭示動畫時,請添加 padding-top: 0.15em; margin-top: -0.15em; 以防止 CJK 文字頂部的升部被裁剪。
  9. 無複製網格。 當一個區塊包含多個重複項目(特色行、定價卡片、常見問題項目、見證)時,它們不應全部共享相同的視覺處理。一個項目應成為焦點——更大、強調或具有不同的佈局——而其他項目則形成配角。一個區塊應感覺像一張具有視覺層次的海報,而不是一個由相同行組成的試算表。這是頁面看起來「模板化」而非經過設計的最大單一原因。

參考檔案

  • references/city-styles.md — 每個城市美學的 exact 設計參數(字型、顏色、紋理、動畫、圖示)
  • references/nav-catalog.md — 4 種導航樣式,附完整實作說明與 GSAP 程式碼
  • references/imagery-derivation.md — 如何將任何非城市描述(場景、時代、材質、情感)轉換為具體的設計代號系統。每當使用者描述的內容不屬於 57 張城市卡片之一時,請閱讀此檔案。
  • references/product-demo-hero.md — 何時以及如何在英雄區(變體 D)中建立時間驅動的產品工作流程示範。包含場景設計指南、三幕結構、onEnter() 回呼模式和產品類型 → 場景對應表。每當使用者想在英雄區展示其產品流程時,請閱讀此檔案。

事實與降級

模板裡的評價、客戶 Logo、人數與價格僅為結構範例;沒有證據就刪除或換成真實產品說明,不編造背書。實作需支援鍵盤操作、prefers-reduced-motion 和指令碼/CDN 載入失敗時的靜態可讀內容。視覺驗收說明實際檢查的視口與狀態;未渲染時不能聲稱視覺已通過。

相關技能