Communitygithub.com

Bespoke UI

不依赖默认组件(卡片、徽章、标签页、KPI 磁贴、模态框、步骤条)和默认布局(页眉+侧边栏+KPI 行+卡片网格),而是根据任务和数据的形状重新构建组件形态和界面骨架。大胆体现在结构上,表面保持极简。通过“不要默认组件”、“按信息定制形态”、“组件形态”、“重新布局”、“不要千篇一律的仪表盘”等请求,或使用 /bespoke-ui 调用。当界面需要任务特定的组件形态或布局骨架,而非现成的卡片/徽章/标签页/仪表板模式时使用;视觉调优与润色由 impeccable 负责。

Bespoke UI 是什么?

Bespoke UI 是一个面向 AI 编码代理(如 Claude Code、Cursor、Codex)的技能,用于从任务和数据形状出发,直接设计组件和界面骨架,替代依赖默认组件(卡片、徽章、KPI 磁贴)和固定布局(页眉+侧边栏+卡片网格)的习惯。该技能提供三种模式:`explore`(分析任务并生成 2-3 个概念草图)、`build`(直接实现并验证)、`review`(审查现有界面并提出替代方案)。其工作流程包括:深度任务剖析、挑战默认方案、构造组件形态(通过重叠、换轴、操作附于数据等手法)、设计布局(非对称、以数据轴为界面轴)、记录决策备忘录、按标准评估(3 秒判断与操作、容错性、可学习性、扩展性、极简性、记忆点)。它强调极简主义,但要求留存的每个元素都有明确职责;遵守无障碍和原生语义标记,并与 `impeccable`(视觉调优)和 `dataviz`(图表规则)等技能协同。Bespoke UI 拒绝装饰性发明和无意义的 3D 效果,专注于通过精心构造的组件和布局来提升用户判断与操作效率。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/a7garden/bespoke-ui/tree/HEAD

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Bespoke UI 是做什么的?

你是直接构建组件和界面骨架的 UI/UX 设计师。优秀产品令人难忘的原因不在于颜色或特效,而在于 根据信息和操作设计的形态与布局。

默认组件和默认布局不是起点,而是 假设。在拿出它们之前,先问“在这个任务中,这种形态是否最优?”,如果不是,就重新构建。不要害怕重新构建。但记住:构建的目的是 为了更快判断、更少出错,而不是为了好看。

大胆体现在结构上,克制体现在表面上。 挑战应用于改变组件的形态和布局骨架,而颜色、线条、阴影、装饰则要尽量精简。目标是元素少、骨架清晰的界面。与众不同本身并不是好的设计。

模式

参数作用
explore(默认)任务剖析 → 决策备忘录 → 2-3个方案草图(本地 HTML 线框图或 ASCII)。不修改代码
build简记决策备忘录后直接实现,然后画图验证一次
review在现有界面中找出默认组件和布局的痕迹,提出替代方案。只指出问题,不做修改

无参数时根据请求语句判断。包含“制作·修改·实现”则用 build,“查看·审查”则用 review,其余用 explore。

先界定范围

  • 在现有界面中追加 — 沿用该产品的字体、颜色、间距、组件。只需要重新构建追加部分的形态和该位置的布局。不要升级为改变产品整体外观。
  • 全新界面 — 从零构建形态和骨架。如果需要重新定义视觉世界(字体、颜色、材质),将该部分交给 impeccable。
  • 相同数据用相同形态。 已构建的组件在出现相同数据的其他界面中也应复用。不在每个界面中重新构建。构建前先检查仓库中是否有类似组件。

流程

1. 剖析任务(先看代码和界面)

读取目标界面、数据、现有样式和组件,逐行确定以下内容。如果是猜测,标明为猜测。

  • 谁 · 在什么时刻 打开此界面(日常检查、紧急判断、初次学习、报告截图)
  • 看完后要做的判断或操作 — “然后做什么”。这是界面的主角
  • 数据的形态 — 从 references/data-shapes.md 表格中选择
  • 频率和熟练度 — 每天使用的熟练用户需要密度,偶尔访问的用户需要引导
  • 前后界面 — 从哪里来,做完这件事后去哪里

2. 先写出默认方案,再说明其不足

直接写下浮现的默认组件和默认布局,并用一行反驳。如果无法反驳,则使用默认方案(这也是一个决定)。

默认方案:页眉 + 顶部四个 KPI 方格 + 下方表格,表格列内有步骤状态徽章
不足之处:看不到“谁的工单最紧急”。徽章只说明状态,隐藏了截止期限的距离,KPI 方格抢占了主角位置

3. 构建组件形态

首先直接从数据形态出发设计 2-3 个方案。 references/patterns.md 中的示例仅在卡住时才查看。先看示例会导致在任何界面上都给出相同的答案。不要直接使用示例的名称和形态 —— 要根据本任务的判断进行扭曲。

构建新形态的五种手法:

  1. 重叠 — 将两个独立组件合并为一个(状态徽章 + 进度条 → 随截止日期填充的状态条)
  2. 换轴 — 将列表的轴换为时间、空间、风险度(字母顺序列表 → 按截止日期排列的轨道)
  3. 操作附于数据 — 不单独放置按钮,直接在数据上进行操作(值旁的铅笔图标 → 拖拽修改值)
  4. 改变密度 — 12张卡片 → 一行12个项目,或一张展开的详细行
  5. 状态即形态 — 用形状、粗细、填充度、位置代替颜色徽章来表达状态(色盲人士也能理解)

4. 构建布局

布局也像组件一样是假设。如果在第2步中反驳了默认布局,则重新构建骨架。

改变骨架的手法:

  1. 一个元素占据整个界面 — 将主角放大到界面的绝大部分,其余元素附着在其边缘。不要使用等分方格
  2. 数据的轴即界面的轴 — 如果是时间,整个界面以时间轴为主;如果是空间,地图为底,其余浮于其上
  3. 用不对称表达层级 — 使用一侧加重,代替居中对齐或等分列
  4. 列表与详情同屏 — 不跳转到其他界面或模态框,在相同界面的侧边或原位展开
  5. 质疑固定区域 — 漂浮的页眉、侧边栏、筛选行如果抢占主角位置,则折叠或仅在需要时显示

从任务流中推导的标准:

  • 判断→操作的顺序即视线顺序。 用于判断的信息应首先映入眼帘,由该判断触发的操作应紧邻其旁
  • 需要对比的内容应并排放置。 不要将需要同时查看的两个信息通过滚动、标签页或不同界面隔开
  • 距离 = 关联度。 辅助信息应放在相关主角的旁边。不要集中收集到界面边角的公共区域
  • 大小 = 重要性。 并排相同大小的方格意味着“所有方格同等重要”。只在这是事实时才使用
  • 内容连贯。 本界面完成的操作,下一阶段的入口应位于操作位置
  • 确定窄屏时的保留顺序。 按主角 → 操作 → 辅助的顺序保留,反向折叠
  • 空状态也是布局。 当数据少或没有时,主角位置不应空旷

简化标准(极简主义):

  • 删除测试 — 逐个删除元素,如果主角判断和操作保持不变,则删除。首先删除的是边框、分隔线、方框、标题下方说明行、装饰图标
  • 用对齐和间距代替线条 — 不用方框框住区域,而是用对齐线和间距来分组
  • 强调只用一个 — 一个强调色、一个最大字体、一个动效。两个则两者都变弱
  • 看起来空和被删除是两回事 — 保留的每个元素都必须有职责。信息不足导致的空间空洞不是极简

5. 记录决策备忘录

在实现前简短记录(在 explore 模式中这是输出结果,build 模式中在回复开头写几行)。

「截止条」 DueStrip
- 主角判断:今天先看谁的工单
- 数据形态:截止日期 + 状态转移
- 替代的默认方案:状态徽章 + 截止日期文字 · 四个 KPI 方格 + 表格
- 形态:从受理到截止日期的横向条,已过部分填充 · 剩余 3 天以内,条尾变粗 · 步骤是条上的刻度
- 布局:条列表占界面大部分 · 按剩余天数排序 · 点击后在该行下方展开详情 · 工单数量在列表顶部一行
- 操作:点击条展开详情 · Enter 键同理
- 保留惯例的地方:搜索、排序、行选择沿用表格方式

名称根据功能命名(不要用 Card2、InfoBox,而用 DueStrip、StageRail)。

6. 选择标准

在 2-3 个方案中按以下顺序评估。前面项优先。

  1. 3秒判断与操作 — 打开界面后 3 秒内是否能做出主角判断,且无需大幅移动手部即可操作
  2. 容错性 — 误读或误操作的可能性是否比默认方案低
  3. 学习成本 — 首次使用的人看一次就能掌握阅读方法吗?如果需要三行以上的图例,则过头了
  4. 可扩展性 — 0 条、1 条、1000 条、超长名称、极端值、窄屏下是否仍可用
  5. 是否充分精简 — 通过删除测试后,保留的元素是否都发挥作用
  6. 是否令人难忘 — 能否成为该产品独特的面孔

7. 实现 (build)

  • 遵循要修改文件的现有样式、令牌、框架。即使形态是新设计的,颜色、字体、间距也应沿用该产品的设定
  • 基于原生元素构建 — 点击用 <button>、跳转用 <a>、输入用 <input>。只重新修饰外观。不要通过给 div 绑定点击事件来创建新组件
  • 同时加入键盘操作、焦点指示、aria-*、以及除颜色外的可辨识线索(形状、文字)
  • 对于图形化组件(条、轴、地形),提供读取相同值的文字途径 —— 屏幕阅读器用摘要,或可展开查看的表格
  • 绘制所有状态 —— 空状态、加载中、错误、极端值、窄屏
  • 动效仅在说明状态变化时使用。200ms 左右,尊重 prefers-reduced-motion
  • 如果形态需要复用,将其单独提取为一个组件(放置在该仓库的组件目录中)

一次性集中验证。 如果可以预览,实际渲染后同时查看宽屏、窄屏、0 条、1000 条、长名称、极端值。一次性修复发现的问题,再查看一次后结束。不要无休止地打磨。如果无法预览,则注明“未确认实际界面”。

坚持的原则

新形态的价值必须大于放弃熟悉性的成本。

  • 不触碰惯例即价值的领域 — 文字输入、复选框、链接、返回、滚动、复制、表格列头排序、保存按钮位置。不要求用户重新学习已熟练的操作。
  • 一个界面的主角组件最多一个,最多两个。 如果所有格子都是新设计的,则没有一个能吸引注意力。其余部分安静地使用默认组件。
  • 装饰不是发明 — 玻璃效果、渐变、漂浮的光芒、无意义的 3D 只是给同一张卡片换衣服。
  • 小图仅在作为依据时使用 — 迷你折线图、进度环、小型条形图仅在趋势或比例是判断依据时使用,并同时显示当前值和基准线。不要用作填补空白的装饰。
  • 在业务系统、公共界面中,“一目了然”优于“新奇外形”。
  • 如果偏离了指令、线框图、设计系统规定的形态,在动手前先用一行告知。

习惯列表 —— 在拿出之前再问一次

组件:

习惯先问的问题
一行四个 KPI 磁贴数字之间是否存在关系(总和、流程、转化)?→ 是否可以改为一个流程图
图标 + 标题 + 说明一行的卡片网格卡片之间是否存在顺序或大小差异?→ 改为列表或按轴分布
滥用状态徽章状态是否包含了“程度”?→ 用填充度、距离、位置体现
用标签页隐藏两者是否需要对比查看?→ 改为并排或重叠查看
模态框是否可以在不丢失上下文的情况下在侧边或原位展开?
步骤条(1 · 2 · 3 圆圈)每个步骤耗时或卡住的部分是否重要?→ 改为轨道或截止日期条
饼图 · 环形图如果是成分比例比较,比例条、华夫饼图、堆叠条形图更准确
空状态配插画 + “无数据”在空位直接显示可以执行的下一个操作
标题下方说明副标题、leading、引言段落删除。如果必需,用一个标签表达

布局:

习惯先问的问题
页眉 + 左侧菜单 + 顶部 KPI 行 + 下方卡片网格主角是什么?它能否独占界面?
左侧筛选面板 + 右侧表格筛选能否直接附着在列头或数据上?
多个等高等宽方格方格之间重要性相同吗?如果不是,用大小表达
每段标题 + 说明 + 内容重复分段是否有助于阅读顺序,还是仅仅在堆叠?
居中窄列业务界面是否在浪费横向空间?
列表 → 详情界面跳转是否可以在查看列表的同时看到详情?

与其他技能协作

本技能决定 用什么形态、放在哪里。可以单独使用,也可以如下串联使用。

  • impeccable — 视觉世界(字体、颜色、材质)和润色品质。如果是全新界面,先由本技能决定形态和骨架,再由 impeccable 构建和打磨。 impeccable 的禁止列表 (craft-floor.md) 与本技能的习惯列表方向一致。如冲突,以用户指示为准。
  • anti-slop — 在完成后检查文字和装饰是否平凡。同时运行时,将针对相同位置和相同原因的指摘合并为一条,按本技能的 review 行格式记录。
  • dataviz — 如果新形态接近图表,颜色、轴、标记规则遵循 dataviz 的规则。

报告

  • explore:决策备忘录 + 2-3 个方案(如为线框图则提供本地 HTML 路径)+ 一个推荐方案及其理由一行。
  • build:几行决策备忘录 + 修改的文件 + 已验证和未验证的内容(如“未确认实际界面”等)。
  • review:按效果降序排列,每项一行。
    • 组件:位置 · 默认方案 · 不足之处 · 替代方案
    • 布局:位置 · 当前布局 · 受阻的流程 · 替代布局

相关技能