Communitygithub.com

maryam-salawudeen/design-range

讓每個 UI 都擁有截然不同的外觀,而非千篇一律的預設風格。從 22 種美學世界中隨機選取設計方向(字型、色板、造型語言、佈局原型、動態),並以 React + Tailwind 建構。每當使用者要求設計、建構、重新設計、重製或主題化任何介面時使用。

design-range 是什麼?

這個技能旨在打破 AI 生成網站的「模板感」。當 Claude 預設總是使用 Inter 或 Geist 字型、靛藍/紫漸層、置中英雄區塊加兩個按鈕、三張特徵卡片,以及圓角陰影時,此技能會強制引入隨機性與多樣性。核心機制是一個 Python 腳本,它從一個包含 22 種連貫設計方向的庫中隨機抽取,並避免使用專案近期用過的風格。它支援多種產品類型(行銷、SaaS、儀表板、電子商務、行動裝置、作品集),並能根據使用者指定的情緒(如奢華、俏皮)進行篩選。運行腳本後會產生三個完整的設計簡報,包含字型(含 Google Fonts/Fontshare 連結)、具名色板(含 Tailwind @theme 區塊)、佈局原型、造型語言、動態風格和簽名式移動。使用者可以從中選擇,或讓 AI 選擇最適合的。技能確保設計一致性透過記錄選擇到 `design-direction.md` 和歷史檔案中,為下一個專案保持新鮮感。它強調實作細節,如建立入場動畫、互動回饋、滾動揭示,以及進行「千篇一律檢查」以消除常見的 AI 風格。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/maryam-salawudeen/design-range/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

Design Range

在預設狀態下,Claude 設計每個產品的方式都一樣:Inter 或 Geist 字型、靛藍/紫漸層、置中的英雄區塊加上兩個按鈕、三個帶有淺色圓形圖標的特徵卡片、全部 rounded-2xl、柔和的灰色陰影。這看起來還可以,但看起來也像其他所有 AI 生成的網站。這個技能就是為了刻意打破這個模式而存在。

核心動作很簡單:不要自己選擇風格,而是隨機抽取。 當模型被要求「選擇一種風格」時,每次都只會落在相同的少數幾個選擇上,因此我們將選擇權交給一個腳本,它會從一個連貫方向的庫中抽樣,並避開該專案近期使用過的風格。你的任務是全力投入那個方向,以技藝將其執行出來。

工作流程

1. 了解情境

  • 正在建構什麼? 將其對應到一種產品類型:marketing(登陸頁面、網站、作品集,如果你偏好也算在這裡)、saas(人們工作用的應用程式畫面)、dashboard(分析、管理、監控)、ecommerce(商店、產品和分類頁面)、mobile(原生或行動優先的應用程式畫面)、portfolio。
  • 有既存的品牌或設計系統嗎? 如果專案已有確立的 tokens、design-direction.md,或者使用者是在現有應用程式中要求一個功能,請維持其方向。多樣性是為新專案、重新設計以及使用者要求不同東西時準備的。單一產品內的一致性是一個功能;而產品之間的相似性才是問題。
  • 使用者有提到某種氛圍嗎?(例如「奢華」、「俏皮」、「暗黑科技風」)。將其轉換為篩選條件(--energy、--mode)或特定的 --show <id>,但除非他們有特別指定,否則仍應展示其他選項。
  • 品味檔案。 如果 references/taste.md 有內容,請閱讀它。它記錄了使用者個人的喜好與厭惡,並在與庫衝突時覆蓋庫的設定。其 exclude: 和 favor: 行由抽取腳本自動套用;其餘部分(偏好的字型、顏色、他們喜歡的手法)則由你帶入任何被選中建構的方向中。

2. 抽取方向

python3 <skill-dir>/scripts/roll.py --product <type> [--count 3] [--mode light|dark] [--energy quiet|medium|loud]

從專案根目錄執行。它會讀取兩個歷史紀錄:專案的 .design-history.json 以及一個涵蓋所有專案的共用 ~/.claude/design-range-history.json,並同時避開兩者,確保下一個產品不會得到與上一個產品相同的外觀。它還會分散強調色:每個選項的色板在選取時,其強調色色調會與其他選項以及近期使用過的強調色保持距離,這可以防止「多樣性」最終只淪為同一色系配上不同字型。腳本會印出三個對比的選項,每個都是一份完整的簡報:情緒、附有 CSS 字型連結的字型對、一個具名色板、一個佈局原型、造型語言、動態、簽名式手法、應避免的事項,以及一個 Tailwind v4 的 @theme 區塊。

其他指令:--list(列出所有方向)、--show <id> --product <type>(顯示一個完整的單一方向,可選用 --font N --palette N --layout <id>)。

3. 讓使用者選擇(當他們在場時)

以簡潔的方式呈現選項,每個選項一個短區塊:名稱、一行描述其情緒、字型對、以色碼表示的色板、佈局概念。詢問他們要哪一個,並提到他們可以混搭(「選項 2 的字型搭配選項 3 的色板」)或重新抽取。

如果使用者說「直接建構就好」,或者你是在沒有真人參與的情況下執行,請為他們做出選擇,並且要選擇最適合的。隨機性是用來打破你的習慣,而不是把夜店美學套在一個晚餐規劃應用程式上。對於每個選項,問問自己:這個品牌的顧客能在其中看到自己嗎?這種情緒適合這個產品的功能嗎(健康與金融適合平靜,運動與夜生活適合充滿活力,數據適合精確,食物與家居適合溫暖)?選擇最適合的選項。如果沒有適合的,重新抽取一次(--count 4,或使用 --energy/--mode 篩選),然後從新的集合中挑選。當你能用一句話說明它為何適合這個產品時,一個令人驚訝的選擇才是好的;當你報告你使用了哪個方向時,就說出那句話。不要為了等待一個沒人會做出的選擇而耽擱建構。

4. 記錄並撰寫方向檔案

python3 <skill-dir>/scripts/roll.py --record <id> --font N --palette N --layout <layout-id> --product <type>

這會同時寫入專案和共用的歷史紀錄。然後將選擇的簡報儲存為專案根目錄下的 design-direction.md。未來的會話(以及一小時後的你)將透過讀取它來保持此產品內的一致性,而共用歷史紀錄則能確保下一個產品不會得到相同的外觀。

5. 開始建構

在建構前,請閱讀相符的平台參考文件,因為每種產品類型都有其自身的工藝規則:

產品類型參考文件
marketing, portfolioreferences/marketing.md
saasreferences/saas.md
dashboardreferences/dashboard.md
ecommercereferences/ecommerce.md
mobilereferences/mobile.md

技術棧:預設使用 React + Tailwind(請參閱下方的「技術棧設定」)。接著:

  • 先佈線 tokens。 載入字型,貼上 @theme 區塊,並使用語意名稱進行樣式設定(bg-bg、bg-surface、text-text、text-muted、border-border、bg-accent、font-display)。腳本已經檢查過對比度:當強調色的文字放在 bg 或 surface 上時,使用 text-accent-ink(如果強調色本身已可讀,它等於該強調色),而對於強調色填充按鈕和徽章上的標籤,則使用 text-on-accent。如果簡報顯示了一個對比度行,它會告訴你進行了哪些調整。像 indigo-500 或 slate-100 這樣的原始 Tailwind 色板類別是預設外觀滲回來的途徑,請將它們排除在元件之外。

  • 全心投入該方向。 至少明顯使用其兩個簽名式手法,並將「應避免」清單視為硬性限制。一個膽怯應用的方向(字型正確,其他全部預設)會崩回一般的外觀。如果簡報說半徑為 0,那就不應該有任何圓角。如果說的是硬偏移陰影,就不應該有模糊的陰影。

  • 讓佈局原型塑造頁面。 抽取出的佈局(例如 sticky-scroll-story、three-pane、hub-and-sheet)就是為了打破置中英雄區塊加三張卡片的骨架而存在。圍繞它進行建構。

  • 擴展色板,不要取代它。 你會需要 hover、active 和淺色調的色調。從給定的顏色中衍生它們(例如 color-mix(in oklch, var(--color-accent) 85%, black),或使用透明度修飾符如 bg-accent/10),而不是引入新的色調。

  • 真實內容。 為產品撰寫合理、具體的文案。Lorem ipsum 和「特徵一」會隱藏設計是否真的有效。

  • 讓它動起來。 靜態頁面感覺像模板,而使用者的品味檔案要求每個建構都要有動態。每個建構都應獲得以下全部四種動態,並以該方向自己的 motion 個性來表達(野獸派和運動風為乾脆俐落,玩具箱為彈性十足,電影風格為緩慢且具電影感,有機風格為柔和,復古作業系統風格為步進式):

    1. 載入時的進場編舞:英雄區塊的元件以一個短暫而錯開的序列到來(標題,然後文案,然後操作,間隔 60-120 毫秒),而不是一次全部出現或一個緩慢的淡入。
    2. 所有可點擊元件的懸停和按壓回饋,以該方向的風格呈現:一個硬陰影按壓、一個彈性的縮放、一個底線滑動、一個光暈、一個搖晃。
    3. 一個取自簡報 motion 或 signature 欄位的簽名動畫(閃爍、旋轉圖案、變形模糊形狀、Ken Burns 效果、打字機效果、跑馬燈、旋轉形狀)。這是人們會記住的時刻,所以給它一個顯眼的位置。
    4. 摺頁以下區塊的滾動揭示,在適合的地方使用(使用 IntersectionObserver 或 CSS animation-timeline: view() 並附帶備援方案)。

    動畫化 transform 和 opacity 而非佈局屬性,以保持流暢,UI 回饋保持在 ~300 毫秒以下,並將所有裝飾性動畫放在 @media (prefers-reduced-motion: no-preference) 之後(或在 reduce 下將其關閉),這樣關閉動畫的人就能得到一個平靜、完整的頁面。

6. 完成前的千篇一律檢查

檢視你建構的內容,並修正以下任何一項,除非該方向明確要求它們:

  • 使用 Inter、Roboto、Arial 或 system-ui 作為可見的顯示字型
  • 任何地方的紫色/靛藍/藍到紫漸層
  • 置中的英雄區塊、標題 + 副標題 + 兩個按鈕,然後是一個三欄的圖標卡片網格
  • 每個容器都是 rounded-xl/2xl 搭配 shadow-md/lg
  • 圖標放在粉彩色調的圓形中
  • 整個視覺概念就是灰-50 頁面配上白色卡片
  • 所有文字都只有少數幾種大小;缺乏排版對比
  • 標題上的漸層文字(除非是 Y2K Chrome 或 Glass Aurora 風格)

然後快速進行工藝檢查:文字對比度符合 WCAG AA 標準(主體文字 4.5:1,大字型 3:1;如果某個色板在其背景上無法達到標準,請調整 muted),每個可互動元素都有 hover、focus-visible 和 disabled 狀態,在 375px 寬度下能正常運作,並且動畫能尊重 prefers-reduced-motion。

技術棧設定

Tailwind v4(預設):將字型 <link> 標籤放在 index.html 中(或使用 next/font / @import url(...) 放在 CSS 頂部),然後將抽取出的 @theme 區塊放在主 CSS 檔案中 @import "tailwindcss"; 之後。像 bg-accent、font-display、text-muted 這些類別會自動生效。

Tailwind v3:將相同的值分別放入 tailwind.config.js 的 theme.extend.colors 和 theme.extend.fontFamily 中,並使用相同的名稱。

Next.js:對於 Google 字型,偏好使用 next/font/google(使用相同的字型名稱,空格用底線代替),並將它們對應到 CSS 變數。Fontshare 字型則透過 CSS URL 載入。

React Native / Expo(用於 mobile):使用 NativeWind,並將色板放入 tailwind.config.js,使用 @expo-google-fonts/<font-name> 或 expo-font 載入字型。Fontshare 字型需要將字型檔案下載到 assets/fonts 中。如果使用者只想要一個視覺模型,一個行動裝置尺寸的 React 網頁(390x844 框架)就很好,而且快得多;如果不確定,請詢問。

單檔案預覽:如果還沒有專案,使用者只是想看看效果,一個單一的 HTML 檔案,使用 Tailwind CDN(對於 v3 配置使用 <script src="https://cdn.tailwindcss.com"></script>,或使用 @tailwindcss/browser@4 搭配內聯的 <style type="text/tailwindcss">@theme {...}</style>)加上透過 ESM 引入的 React,是可以接受的。

當使用者想要更多變化時

  • 重新抽取:再次執行腳本;它已經會避開近期選項。
  • 混搭:取一個方向的類型搭配另一個方向的色板。檢查結果仍然感覺連貫(一個像素字型搭配一個奢華色板會是一個笑話,只有當那正是目的時才沒問題)。
  • 新方向:如果使用者描述了一個庫中沒有的外觀,以相同的格式將其加入 assets/directions.json,這樣它就能參與未來的抽取。檢查其字型存在於 Google Fonts 或 Fontshare 上。
  • 品味:當使用者說出他們喜歡或不喜歡什麼時(「永遠不要用襯線字型」、「我喜歡野獸派風格」),提議將其加入 references/taste.md,這樣它就能每次都生效。

相關技能