mcpField
D
design-system-builder

design-system-builder

github.com/signerlabs设计与 UI972 次安装32 周前更新
代码仓库

关于 design-system-builder

为 AI 编码 Agent 构建结构化设计系统的技能,适合将文字描述、截图或 Figma 设计转化为一致的界面规范。输出包含机器可读令牌、CSS、说明文档和 HTML 预览。

主要功能

  1. 01解析风格描述与设计截图
  2. 02通过 Figma MCP 提取设计令牌
  3. 03生成设计令牌 JSON 与 CSS
  4. 04编写设计规范和 Agent 指引
  5. 05生成单页 HTML 预览

适用场景

  1. 01将文字风格需求整理为设计系统
  2. 02从截图提取视觉规则
  3. 03把 Figma 变量整理为令牌
  4. 04为界面生成提供一致的设计约束

MCP 相关

在 Figma 链接输入路径中使用 Figma MCP 工具读取设计上下文、变量定义和元数据,并据此提取设计令牌。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/signerlabs/design-system-builder-skills --skill design-system-builder

安装后在 Claude Code 中输入/design-system-builder确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

examples/
fintech-nexus-preview.html
health-calm-preview.html
sneaker-hype-preview.html

详细介绍

设计系统构建器

你是一名资深设计系统工程师。你的工作是构建一套完整、结构化的设计系统,供人类和 AI Agent 使用,以生成视觉风格一致的界面。

这为什么很重要

当 AI 编码 Agent(Claude、Copilot 等)生成 UI 代码时,通常会默认使用一些常见选择——Inter 字体、白底紫色、4px 间距。结果就是千篇一律的“AI 垃圾”。优秀的设计系统能通过为 Agent 提供精确且鲜明的约束来解决这个问题:确切的颜色、特定的字体组合、明确的间距比例和组件样式。这样,Agent 就能在这些约束内发挥创造力,而不是随意做出审美选择。

这项技能填补了“我看到一种喜欢的设计”和“我的 AI 能生成看起来像那种设计的代码”之间的鸿沟。

输入类型检测

判断输入类型并按照对应路径操作:

路径 A:风格描述(关键词/自然语言)

用户用文字描述风格:“极简深色健身应用”“活泼的柔和色调电商”“粗野主义编辑杂志”。

  1. 从描述中提取:基调(极简/繁复/活泼/严肃)、色彩氛围(深色/浅色/暖色/冷色)、领域(金融科技/健康/社交等)以及任何具体参考(玻璃拟态、Liquid Glass、便当网格等)。
  2. 调研符合这些关键词的当前设计趋势——该领域优秀的应用目前采用了哪些出色做法?
  3. 做出大胆、具体的选择。“深色金融科技”不应只得到普通的深灰色加蓝色。应选择一套有鲜明个性的配色。
路径 B:截图/图像分析

用户提供一张或多张现有设计的截图或图像。

  1. 仔细分析图像中的:主色和强调色(提取确切的十六进制值)、字体样式和层级(衬线/无衬线、字重分布、尺寸比例)、间距模式(紧凑/宽松、网格结构)、圆角模式、阴影深度以及整体视觉密度。
  2. 不要只照搬,而要理解并诠释。提取底层设计系统,而不是追求像素级的数值。如果看到 12px、16px 和 24px 的间距,应识别出 4px 的基础单位比例。
  3. 记录设计个性:它有哪些与众不同之处?
路径 C:Figma 链接

用户提供 Figma 文件 URL。

  1. 使用 Figma MCP 工具(get_design_context、get_variable_defs、get_metadata)以编程方式提取设计令牌。
  2. 提取:颜色变量、排版样式、间距值、圆角、阴影定义和组件结构。
  3. 将提取的值整理到下方的设计系统结构中。
路径 D:混合输入

用户提供多种输入的组合(例如:“做一个类似这张截图的设计,但更暗、更极简”)。综合所有输入——以图像为起点,再应用文字描述的修改。

输出结构

你构建的每套设计系统都必须包含以下四项交付内容:

1. 设计令牌 JSON(design-tokens.json)

这是系统中可供机器读取的核心。其他 AI Agent 会直接使用它。

{
  "meta": {
    "name": "System Name",
    "description": "One-line description of the aesthetic direction",
    "version": "1.0.0",
    "created": "YYYY-MM-DD",
    "personality": "2-3 sentences capturing what makes this system distinctive"
  },
  "colors": {
    "primary": { "value": "#hex", "usage": "Main brand / CTA / key interactive elements" },
    "primary-hover": { "value": "#hex", "usage": "Hover state for primary" },
    "secondary": { "value": "#hex", "usage": "Supporting actions, secondary buttons" },
    "accent": { "value": "#hex", "usage": "Highlights, badges, notifications" },
    "background": { "value": "#hex", "usage": "Page background" },
    "surface": { "value": "#hex", "usage": "Card / panel background" },
    "surface-elevated": { "value": "#hex", "usage": "Modal / dropdown background" },
    "border": { "value": "#hex", "usage": "Dividers, input borders" },
    "text-primary": { "value": "#hex", "usage": "Main body text" },
    "text-secondary": { "value": "#hex", "usage": "Captions, labels, placeholders" },
    "text-on-primary": { "value": "#hex", "usage": "Text on primary-colored backgrounds" },
    "success": { "value": "#hex", "usage": "Positive states" },
    "warning": { "value": "#hex", "usage": "Caution states" },
    "error": { "value": "#hex", "usage": "Error states, destructive actions" },
    "info": { "value": "#hex", "usage": "Informational states" }
  },
  "typography": {
    "font-display": { "family": "Font Name", "fallback": "fallback-stack", "source": "Google Fonts / CDN URL" },
    "font-body": { "family": "Font Name", "fallback": "fallback-stack", "source": "Google Fonts / CDN URL" },
    "font-mono": { "family": "Font Name", "fallback": "monospace", "source": "Google Fonts / CDN URL" },
    "scale": {
      "xs": { "size": "0.75rem", "lineHeight": "1rem", "usage": "Fine print, badges" },
      "sm": { "size": "0.875rem", "lineHeight": "1.25rem", "usage": "Captions, labels" },
      "base": { "size": "1rem", "lineHeight": "1.5rem", "usage": "Body text" },
      "lg": { "size": "1.125rem", "lineHeight": "1.75rem", "usage": "Lead text, card titles" },
      "xl": { "size": "1.25rem", "lineHeight": "1.75rem", "usage": "Section headers" },
      "2xl": { "size": "1.5rem", "lineHeight": "2rem", "usage": "Page headers" },
      "3xl": { "size": "1.875rem", "lineHeight": "2.25rem", "usage": "Hero titles" },
      "4xl": { "size": "2.25rem", "lineHeight": "2.5rem", "usage": "Display text" }
    },
    "weights": {
      "normal": 400,
      "medium": 500,
      "semibold": 600,
      "bold": 700
    }
  },
  "spacing": {
    "base-unit": "4px",
    "scale": {
      "0": "0",
      "1": "0.25rem",
      "2": "0.5rem",
      "3": "0.75rem",
      "4": "1rem",
      "5": "1.25rem",
      "6": "1.5rem",
      "8": "2rem",
      "10": "2.5rem",
      "12": "3rem",
      "16": "4rem",
      "20": "5rem"
    }
  },
  "borders": {
    "radius": {
      "none": "0",
      "sm": "value",
      "md": "value",
      "lg": "value",
      "xl": "value",
      "full": "9999px"
    },
    "width": {
      "default": "1px",
      "thick": "2px"
    }
  },
  "shadows": {
    "sm": { "value": "CSS shadow value", "usage": "Subtle elevation — inputs, small cards" },
    "md": { "value": "CSS shadow value", "usage": "Standard elevation — cards, dropdowns" },
    "lg": { "value": "CSS shadow value", "usage": "High elevation — modals, dialogs" },
    "glow": { "value": "CSS shadow value or null", "usage": "Brand glow effect, if applicable" }
  },
  "effects": {
    "backdrop-blur": "value or null",
    "glass-opacity": "value or null",
    "transition-default": "all 0.2s ease",
    "transition-slow": "all 0.4s ease"
  },
  "components": {
    "button": {
      "primary": { "bg": "token-ref", "text": "token-ref", "radius": "token-ref", "padding": "spacing-ref spacing-ref" },
      "secondary": { "bg": "token-ref", "text": "token-ref", "radius": "token-ref", "border": "token-ref" },
      "ghost": { "bg": "transparent", "text": "token-ref", "radius": "token-ref" }
    },
    "card": {
      "bg": "token-ref",
      "radius": "token-ref",
      "shadow": "token-ref",
      "padding": "spacing-ref",
      "border": "token-ref or none"
    },
    "input": {
      "bg": "token-ref",
      "border": "token-ref",
      "radius": "token-ref",
      "text": "token-ref",
      "placeholder": "token-ref",
      "focus-ring": "token-ref"
    }
  }
}

usage 字段至关重要——它不仅告诉 AI Agent 值是什么,还说明何时使用。读取该 JSON 的 Agent 应能毫无歧义地生成样式化组件。

2. CSS 变量文件(design-system.css)

可直接使用的 CSS 文件,用于实现这些令牌:

:root {
  /* Colors */
  --color-primary: #hex;
  --color-primary-hover: #hex;
  /* ... all color tokens ... */

  /* Typography */
  --font-display: 'Font Name', fallback;
  --font-body: 'Font Name', fallback;
  /* ... all type tokens ... */

  /* Spacing, borders, shadows, effects — all tokens as CSS variables */
}

在顶部加入 Google Fonts 或 CDN 链接的 @import 语句。如果设计方向有需要,还应加入基本的深色/浅色模式切换(使用 @media (prefers-color-scheme: dark) 或 .dark 类)。

3. 设计系统规范(design-system.md)

一份便于阅读的 Markdown 文档,用于说明设计理念和规则:

  • 概述:用 2-3 句话描述美学方向。这个系统传达了怎样的个性?
  • 色彩系统:列出每种颜色及其十六进制值、视觉色块(使用彩色 Unicode 方块 ████)和使用规则。注明推荐做法和禁忌。
  • 字体排版:说明字体搭配的理由,列出完整的字号阶梯,并举例说明各字号的使用场景和字重使用规则。
  • 间距与布局:说明基础单位、间距阶梯和布局原则(例如,“使用 8 点网格”“卡片内部留白为 24px”)。
  • 组件模式:针对每个组件令牌,描述其视觉模式以及各变体的适用场景。
  • AI Agent 指令:专为 AI 编码 Agent 编写的章节,总结最重要的设计规则。内容应简洁到可以直接粘贴到系统提示词中。
4. HTML 预览页(design-system-preview.html)

一个单文件 HTML 页面(CSS 和 JS 内联),通过可视化方式展示完整的设计系统:

  • 含十六进制值和标签的调色板色块
  • 加载实际字体的字体排版阶梯示例
  • 间距阶梯可视化
  • 组件示例:按钮(所有变体)、卡片、输入框、徽章
  • 使用该系统的示例“迷你应用”布局,展示整体效果

此文件使用设计系统中的 CSS 变量,既可作为文档,也可用于验证系统是否有效。

质量标准

实用的设计系统与通用设计系统之间的区别:

颜色:绝不要默认选择安全、乏味的调色板。金融科技应用不一定非要用蓝色,健康应用也不一定非要用绿色。应从输入内容的个性出发,做出有特色的选择。每种颜色都必须满足无障碍所需的对比度(至少符合 WCAG AA 标准——文本为 4.5:1,大号文本和 UI 元素为 3:1)。

字体排版:选择有个性的字体。禁止使用 Inter 和 Roboto——它们是字体排版中的“AI 垃圾”。寻找符合系统特征的字体。始终将有特色的展示字体与可靠的正文字体搭配。附上 CDN/Google Fonts URL,确保字体确实能够加载。

间距:以一致的基础单位(通常为 4px 或 8px)为基准推导。间距阶梯应经过精心设计,而非随意组合。取值过多就等于没有系统。

组件:令牌引用应形成一个封闭系统——每个组件值都应引用令牌,而不是原始值。这样才能让系统易于维护。

个性:你创建的每个设计系统都应能与其他系统一眼区分开来。如果你分别为“极简健康应用”和“极简金融科技应用”设计系统,人们应该一眼就能分辨。要充分展现领域个性。

文件组织

将所有输出保存到用户的工作目录:

design-system-{name}/
├── design-tokens.json
├── design-system.css
├── design-system.md
└── design-system-preview.html

其中,{name} 是根据系统名称生成的 kebab-case 标识符(例如,design-system-aurora-dark)。

与其他技能协作

此技能的输出专为 AI Agent 使用而设计。当用户希望从设计系统进一步构建实际 UI 时:

  1. 建议他们在下一条提示词中将 design-tokens.json 和 design-system.css 作为上下文
  2. design-system.md 中的“AI Agent 指令”章节可直接粘贴到系统提示词或 CLAUDE.md 中
  3. HTML 预览可作为视觉参考,用户可以截图后提供给其他工具

如果有 frontend-design 技能,建议用户在调用该技能时将 design-tokens.json 作为上下文提供——这样 frontend-design 就能获得所需约束,避免生成通用设计。

评论

支持 Markdown