Communitygithub.com

bompus/hr-stock-ui-audit

查找模板默认样式(如库存紫罗兰强调色、紫色到蓝色渐变、单一系统字体、表情符号图标、发光和模糊效果),对每个命中项进行上下文中分类,然后报告或修复真正的问题。当被要求审计或移除现有 UI 中的通用或 AI 生成样式时使用。它不设定视觉方向。

hr-stock-ui-audit 是什么?

此技能旨在帮助开发者识别并修复那些来自模板或生成工具、未被产品设计团队主动选中的 UI 样式问题。它通过静态扫描器在 HTML、CSS、JS/TS 及其框架文件(如 React、Vue、Svelte、Astro)中查找 9 类已知的“模板默认”模式,包括紫蓝色渐变、紫罗兰强调色、单一系统字体(如 Inter、Roboto)、表情符号图标和霓虹发光等。扫描后,技能要求用户对每个匹配进行人工分类,以区分“未选择的默认”、“故意选择”、“误报”和“未解决”四种情况,确保只在确认是未选择默认时才进行修复。修复过程强调通过定义产品级的设计 Token 或组件库配置来系统性地解决问题,避免简单的颜色值微调或引入新的随意默认值。该技能支持 'Review'(仅报告)和 'Cleanup'(在指定范围内修复)两种模式,并能处理扫描器无法发现的结构性问题(如重复的页面布局、功能卡片)。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/bompus/house-rules/tree/HEAD/skills/hr-stock-ui-audit

在你喜欢的 AI 中提问

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

文档

库存 UI 审计

生成器和入门套件界面共享一种可识别的外观:靛蓝或紫罗兰强调色、紫色到蓝色的英雄区渐变、到处是 Inter 字体、磨砂玻璃卡片、导航栏中的表情符号。这些本身都没有错,问题是它们来自于模板而非产品。此技能通过静态扫描器找出这些选择,然后通过判断来分类。扫描器产生候选,只有分类才能产生发现。

此技能移除未被选中的默认值,它不会发明一个品牌。如果产品还没有视觉方向,请说明并询问一个方向,而不是用一种默认替换另一种。

扫描前

  1. 阅读需求文档、设计 Token 和主题或组件库配置。记录产品要求的所有颜色、字体和组件。即使扫描器标记了它们,这些也要保留。
  2. 根据请求确定模式:
    • 审查(Review):仅报告发现,不编辑任何内容。
    • 清理(Cleanup):修复已确认的发现,并且仅在用户指定的范围内(一个页面、一个组件文件夹、整个应用)。注意在范围外发现的问题,只报告而不修复。
  3. 选择扫描范围:渲染 UI 的源代码文件夹,而不是整个仓库。

运行扫描器

bun <此技能目录>/scripts/scan.mjs [--json] [--fail-on high|medium|low] <路径>...

Node 22 或更高版本也可以。它会遍历目录,跳过依赖、构建和覆盖率输出以及压缩文件,并读取 .html .css .scss .js .ts .jsx .tsx .vue .svelte .astro 文件。它会打印扫描的文件数。退出码 0 表示没有达到失败严重级别的匹配(默认为 high),1 表示有,2 表示用法错误或扫描了零个文件。2 绝不是干净的结果。当紫罗兰强调色、单个系统字体或表情符号图标应该使运行失败时,传递 --fail-on medium。除非被要求,否则不要将扫描器添加为 CI 门禁。

规则严重级别捕获的内容
purple-blue-gradienthigh所有色阶均为冷色调且至少包含一种紫色的渐变,出现在 CSS 或 Tailwind 的 from-/to- 类中
violet-accentmedium任何计算出的色相位于靛蓝到紫色范围内的 hex、rgb、hsl、oklch 或裸 HSL 标记,以及 Tailwind 的 indigo/violet/purple 类
gradient-textmediumbackground-clip: text 和 bg-clip-text
single-stock-fontmedium在扫描集的两个或更多声明中,仅有一种库存无衬线字体(Inter、Roboto、Poppins 等)被列为唯一命名字体
emoji-iconmedium标题、按钮、链接、导航项或 icon/label/title 字段中的表情符号
neon-glowmedium在饱和颜色上的零偏移宽模糊阴影,以及 Tailwind 有色阴影
frosted-glasslowbackdrop-filter: blur() 和 backdrop-blur
library-default-tokenlow来自 Bootstrap、Material、MUI、Ant Design、Chakra、shadcn/ui 和 Vite 起始模板的未修改默认主色
tracked-capslow宽字母间距的大写文本

字体规则会在一次运行中检查所有文件,因此请一起扫描整个 UI 范围;一次只扫描一个文件会隐藏它。

分类每个匹配

打开每个标记的行,阅读足够多的上下文以了解元素的作用。为每个匹配给出一个明确的结论:

  • 未选择的默认(Unchosen default):需求文档、Token 或历史中没有要求它,并且它看起来像起始模板。这是一个发现。
  • 故意选择(Deliberate choice):需求文档、Token 文件、品牌指南或提交信息显示有人选择了它。保留它并说明证据。
  • 误报(False positive):匹配并非规则假设的那样,例如语法高亮主题中的紫色调、繁忙内容上的模态背景上的模糊、或用户生成示例数据中的表情符号。保留它并说明原因。
  • 未解决(Unresolved):你无法判断是否有人选择了它。这不是一个发现,也不做任何更改。报告缺少什么以及能够解决这个问题的疑问。

修复真正的问题

  • 修复原因,而不是代码行。五个紫色十六进制值通常意味着缺少一个强调色 Token;一次性定义产品的调色板和类型,并将组件指向它。
  • 选择服务于内容的替换方案:能保持的对比度、能标记唯一重要操作的强调色、适合阅读负荷的类型。
  • 永远不要仅仅为了避开扫描器的范围而微调值,例如将色相移动几度或将十六进制值替换为等效的 oklch()。如果颜色错了,就更改它;如果是对的,就保留它并记录原因。
  • 永远不要为了通过扫描而更改品牌色、状态色(成功、警告、错误)或焦点指示器。这些带有含义;将它们记录为故意选择。
  • 用项目现有的图标集替换表情符号图标。只有在用户同意的情况下才添加新的图标依赖。

扫描器看不到的内容

通过阅读渲染后的页面来检查这些,因为没有模式匹配能找到它们:

  • 所有部分都由相同的居中标题、副标题和两个按钮构建而成
  • 一个三卡片功能网格,每张卡片包含一个图标、标题和一行文本
  • 位于主标题上方的小徽章或药丸形状
  • 由粗的彩色左边框标记的卡片
  • 包含大数字的统计横幅(如“10k+ 用户”、“99.9% 正常运行时间”)
  • 编号为“1、2、3”的步骤部分
  • 强制使用的深色主题,但没有需求文档要求的浅色选项
  • 每个表面都有相同的大圆角和柔和阴影
  • 忽略项目比例缩放的空格和字体大小
  • 可以描述任何产品的文案

验证

  1. 对同一范围重新运行扫描器,并确认每个剩余匹配都有记录的结论。
  2. 在相关的尺寸(窄手机宽度和至少桌面宽度)下查看渲染后的 UI,以及产品提供的每个主题。
  3. 干净的扫描结果不说明可访问性、布局或整体质量。在你更改的任何内容上检查对比度和焦点状态。

如果你无法渲染 UI,请说明审查仅是静态的。

报告

按以下顺序编写报告:

  1. 扫描范围、扫描的文件数、模式以及扫描器的退出码。
  2. 已修复的发现(或在审查模式下,建议的发现),每个包含 文件:行号、规则以及替换内容。
  3. 保留为故意选择的匹配,每个附带其证据。
  4. 未解决的匹配,每个附带缺少的内容以及能够解决它的疑问。
  5. 误报,每个附带一行原因说明。
  6. 扫描器无法发现的问题(如果有找到)。
  7. 你如何验证:重新运行结果、查看的尺寸和主题,或“仅静态”。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相关技能