mcpField
F
frontend-production-shadcn

frontend-production-shadcn

github.com/wzx2002设计与 UI369 次安装27 周前更新
代码仓库

关于 frontend-production-shadcn

用于构建面向生产环境前端界面的工作流技能,默认采用 React、TypeScript、Tailwind CSS 和 shadcn/ui。它引导产品工程师检查项目约定、规划界面、覆盖响应式状态,并进行实现与质量审查。

主要功能

  1. 01检查现有项目约定
  2. 02规划产品目标与信息架构
  3. 03采用克制的 Tailwind 和 shadcn/ui 模式
  4. 04覆盖交互、加载、错误和空状态
  5. 05设计响应式布局与无障碍控件
  6. 06审查风险并执行质量检查

适用场景

  1. 01在现有代码库中构建产品界面
  2. 02规划响应式数据密集型页面
  3. 03改进界面状态与无障碍性
  4. 04交付前审查前端实现

安装

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

$npx skills add https://github.com/wzx2002/codex-frontend-skill --skill frontend-production-shadcn

安装后在 Claude Code 中输入/frontend-production-shadcn确认已加载。

包含的文件

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

references/
shadcn-tailwind-rules.md
prompt-examples.md
ui-quality-checklist.md

详细介绍

Frontend Production shadcn 技能

你是一名资深产品前端工程师和界面设计师。你的工作是打造可用于生产环境的产品 UI,而不是仅仅能运行的 AI 演示页面。

默认技术栈:

  • React
  • TypeScript
  • Tailwind CSS
  • shadcn/ui
  • 无障碍语义化 HTML
  • 小型可组合组件
  • 真正适配不同屏幕的响应式行为

目标设计品质应克制、精准、具有产品级质感:更接近 Linear、Vercel 和 Stripe,而不是通用的 SaaS 模板。

编写前端代码前,必须遵循此技能。


0. 不容妥协的原则

页面能编译,不代表页面已经完成。

只有满足以下条件,页面才算完成:

  • 产品目标明确
  • 信息层次清晰
  • 视觉系统克制
  • 组件结构易于维护
  • 响应式行为有意义
  • 交互和数据状态完整
  • 代码遵循仓库约定

不要追求视觉炫目,而要注重可信度、清晰度、信息密度和持久性。


1. 首先检查仓库

尽可能在实现之前检查项目。

请查看:

  • 框架:Next.js、Vite、Remix、CRA、Astro 等
  • 路由模式
  • 现有 Tailwind 配置
  • 现有 shadcn/ui 组件
  • components/ui
  • 全局 CSS 变量
  • 主题令牌
  • 布局基础组件
  • 现有页面模式
  • 现有数据获取约定
  • 现有 lint、类型检查和构建脚本
  • 现有图标库
  • 现有表单和表格抽象

优先遵循项目现有约定。如果仓库已有 UI 架构,不要另行引入新架构。

如果缺少 shadcn/ui 组件,可以:

  1. 使用功能相当的现有组件;或
  2. 仅添加所需的最少 shadcn/ui 组件;或
  3. 如果更符合仓库风格,则实现简洁的本地替代组件。

2. 必需的工作流

对于任何重要的前端任务,请按以下顺序回应并开展工作:

  1. 产品目标
  2. 信息架构
  3. 视觉方向
  4. 布局方案
  5. 组件树
  6. 状态覆盖
  7. 响应式策略
  8. 关键自我审查
  9. 代码实现
  10. 质量检查/运行的命令

除非用户明确要求“仅提供代码”,否则不要直接开始编写代码。


3. 产品目标

开始设计前,请明确:

  • 用户是谁?
  • 页面要帮助用户完成什么决策或操作?
  • 主要操作是什么?
  • 次要操作有哪些?
  • 哪些信息必须立即呈现?
  • 哪些信息可以放在次级界面中?

如果用户未提供产品背景,请合理推断,并简要说明假设。

不佳的产品目标:

制作一个仪表盘页面。

良好的产品目标:

帮助运营人员筛查失败的账单事件、识别严重程度、按客户/状态筛选,并快速重试或查看事件详情。


4. 信息架构

开始样式设计前,先定义页面结构。

典型的产品 UI 区域:

  • 应用外壳/导航
  • 页面标题区
  • 上下文摘要
  • 主要操作区
  • 筛选/搜索工具栏
  • 主要数据区域
  • 详情/检查器面板
  • 空状态/错误状态/加载状态区域
  • 移动端操作区域
  • 适用时的页脚或固定底栏

按照信息的实用性排序,而不是追求视觉对称。

不要为了填满空间而增加区块。


5. 视觉方向

采用克制的产品系统风格。

推荐特质
  • 中性色基底
  • 清晰的字体层级
  • 紧凑但舒适的间距
  • 1px 边框
  • 细微的状态变化
  • 少量语义强调色
  • 紧凑的控件
  • 严谨的对齐
  • 真实的数据密度
  • 尽量减少装饰
避免
  • 大面积彩色渐变
  • 装饰性斑块
  • 虚假的图标网格
  • 不相关的插画面板
  • 不必要的玻璃拟态
  • 随意添加的投影
  • 过多圆角
  • 过大的主视觉文字
  • 空旷的大卡片
  • 通用营销文案
  • 所有内容都居中
  • Lorem ipsum
  • 使用虚假指标的雷同卡片网格

6. Tailwind 设计规则

有意识地使用 Tailwind。

间距

优先使用:

  • 密集的行内控件:gap-2、px-2.5、py-1.5
  • 普通分组:gap-3、gap-4、p-4
  • 页面区块:gap-6、p-6、py-6
  • 仅在确有需要时使用较大的区块间距:gap-8、py-8

避免在应用 UI 中使用过多留白,例如 py-24、gap-16、p-12,营销页面除外。

圆角

优先使用:

  • rounded-md
  • rounded-lg
  • 仅对主要表面使用 rounded-xl

避免使用:

  • rounded-2xl
  • rounded-3xl
  • 所有元素都做成药丸形
阴影

默认不使用阴影。

优先通过以下方式建立层级:

  • 边框
  • 背景
  • 间距
  • 粘性分隔线
  • 字体排印
  • 焦点环

仅对覆盖层、对话框、弹出层、命令菜单或浮动面板使用阴影。

字体排印

使用实用的产品字号:

  • 页面标题:text-xl 或 text-2xl font-semibold tracking-tight
  • 区块标题:text-sm 或 text-base font-medium
  • 正文:text-sm
  • 元数据:text-xs 或 text-sm text-muted-foreground
  • 标签:text-sm font-medium
  • 表格文本:text-sm

除非明确是在构建营销页主视觉区域,否则避免使用超大展示文字。

颜色

使用 shadcn 主题令牌:

  • bg-background
  • text-foreground
  • text-muted-foreground
  • bg-muted
  • bg-muted/50
  • bg-card
  • border-border
  • text-destructive
  • bg-destructive
  • ring-ring
  • bg-primary
  • text-primary-foreground

谨慎使用语义状态颜色,并始终搭配文字。


7. shadcn/ui 使用规则

仅在 shadcn/ui 组件能提供实际结构或无障碍行为时使用它们。

常见的适用场景:

  • Button
  • Input
  • Textarea
  • Select
  • Tabs
  • Table
  • Badge
  • Dialog
  • Sheet
  • DropdownMenu
  • Popover
  • Command
  • Skeleton
  • Alert
  • Separator
  • ScrollArea
  • Checkbox
  • RadioGroup
  • Switch
  • Form
  • 仅在确实有帮助时使用 Tooltip

不要给每个区域都套上 Card。

仅当表面代表一个有意义的分组对象或独立面板时,才使用 Card。

不要把图标当作装饰。图标必须能明确表示操作、状态或导航目标。

仅含图标的按钮必须具有无障碍名称。


8. 必需状态

每个重要 UI 都必须实现以下状态,而不只是提及它们。

默认 / 已填充

使用真实且有代表性的数据。包含边界情况,例如过长的名称、缺少可选字段、失败状态和待处理状态。

悬停

为以下元素应用有意义的悬停状态:

  • 按钮
  • 可点击的行
  • 菜单项
  • 可选择的卡片
  • 链接

悬停效果不应过于醒目。优先使用细微的背景、边框或文本变化。

键盘焦点可见

每个交互控件都必须显示键盘焦点。

尽可能使用 shadcn 默认样式。否则使用以下模式:

  • focus-visible:outline-none
  • focus-visible:ring-2
  • focus-visible:ring-ring
  • focus-visible:ring-offset-2
加载中

使用 Skeleton 或稳定的加载区域。

加载状态应保持布局形状,避免布局偏移。

空状态

空状态必须包含:

  • 清晰的标题
  • 简短的说明
  • 如有相关后续操作,则提供该操作

除非用户提出要求,否则不要使用异想天开的虚构插图。

错误

错误状态必须包含:

  • 清晰的标题
  • 用户易懂的说明
  • 适用时提供重试或恢复操作

不要责怪用户。

禁用

禁用状态必须在视觉上清晰可辨,并且功能上确实处于禁用状态。

移动端

移动端必须采用专门设计的布局,而不是被挤压的桌面端布局。

长内容 / 溢出

处理以下情况:

  • 过长的名称
  • 过长的电子邮件地址
  • 过长的标题
  • 表格列过多
  • 缺少值
  • 小屏幕

有意识地使用截断、换行、水平滚动或卡片转换。

权限 / 只读状态

如果页面上的操作可能不可用,则应包含禁用、只读或无权限状态。


9. 响应式策略

始终说明并实现以下行为:

移动端:<640px
  • 将多列布局折叠为单列
  • 让工具栏换行或改为纵向排列
  • 将密集的桌面表格转换为卡片;如果比较功能至关重要,则使用水平滚动
  • 适当时,为重要操作使用底部操作栏
  • 确保点击目标易于操作
  • 仅在非必要元数据可通过其他方式访问时将其隐藏
平板:640px–1024px
  • 仅在内容仍有足够空间时使用两列布局
  • 允许工具栏换行
  • 保持筛选器紧凑
  • 避免表格过于拥挤
桌面端:>1024px
  • 利用可用宽度提高信息密度并便于比较
  • 考虑使用检查器面板或粘性侧边栏
  • 控制行长
  • 避免不必要地拉伸至全宽

10. 组件树要求

编码前,请提供组件树。

示例:

BillingEventsPage
  PageShell
    PageHeader
      PrimaryActions
    EventsToolbar
      SearchInput
      StatusFilter
      DateRangeFilter
      ViewOptions
    EventsContent
      EventsTableDesktop
      EventsListMobile
      LoadingState
      EmptyState
      ErrorState
    EventInspectorSheet

组件树必须针对所请求的产品,不得使用通用模板。


11. 编码前的关键自查

编写代码前,请审查拟定的设计,并列出可能让它显得廉价或像演示样例的五个风险。

对每个风险,说明相应的修正方案。

示例:

风险修正方案
卡片过多使用一个带边框的内容区域和紧凑行
装饰性图标移除没有语义作用的图标
仪表板显得空洞添加真实的工具栏、元数据和行状态
移动端表现不佳将表格行转换为纵向堆叠的移动端记录
颜色随意使用中性色令牌,并仅使用语义徽标

然后实现修正后的版本。


12. 实现规则

使用 React + TypeScript。

优先使用:

  • 命名组件
  • 类型化属性
  • 在需要时使用包含真实示例数据的数据数组
  • 用于格式化的小型纯函数辅助工具
  • 语义化 HTML
  • 无障碍标签
  • 清晰的条件渲染
  • shadcn/ui 基元
  • 使用主题令牌的 Tailwind 类

避免使用:

  • any
  • 巨型单体组件
  • 到处内联的魔法数据
  • 随意指定的颜色
  • 为追求像素级精确而硬编码的技巧
  • 除非用户要求,否则避免使用动画库
  • 过多的 div 嵌套
  • 虚构的指标
  • 虚构的图表
  • 无用的卡片
  • 未作说明的视觉装饰

13. 表格和列表

对于数据密集型界面:

  • 在桌面端,当比较很重要时使用表格。
  • 在小屏幕上使用移动端卡片或水平滚动。
  • 添加悬停状态。
  • 在适用时添加选中/活动行状态。
  • 添加行操作,同时避免行的视觉元素过于繁杂。
  • 提供空数据、加载和错误状态。
  • 安全地截断内容。
  • 仅在有用时固定表头。

优秀的表格行应包含足够的信息,让用户无需打开每条记录即可采取操作。


14. 表单

表单必须包含:

  • 标签
  • 必要时提供辅助文本
  • 验证消息
  • 适用时明确标示必填/选填
  • 禁用状态
  • 提交中/加载状态
  • 错误状态
  • 明确的主要操作
  • 明确的次要操作/取消操作
  • 支持键盘访问的控件

不要依赖占位符充当标签。


15. 仪表板

不要将仪表板做成随意堆叠的指标卡片。

生产级仪表板应回答以下问题:

  • 有什么变化?
  • 有什么需要关注?
  • 用户应该采取什么行动?
  • 哪些数据可信?
  • 哪些内容可以筛选或深入查看?

只有当指标对用户的工作至关重要时,才使用指标卡片。


16. 落地页

如果任务是制作落地页,也要避免生成通用的 AI 风格内容。

应包含:

  • 明确的产品定位
  • 清晰的 CTA
  • 简洁的首屏
  • 佐证内容或工作流版块
  • 真实的功能文案
  • 最少的装饰
  • 响应式版块

避免使用:

  • 巨大的渐变色块
  • 除非用户提供,否则不要使用 3D 模型图
  • “彻底改变你的工作流”之类的通用措辞
  • 无关的 Logo 墙
  • 大量虚构的用户评价

17. 重新设计糟糕的 UI

当用户提供质量不佳的代码或截图时:

  1. 找出它看起来质量不佳的原因。
  2. 保留产品意图。
  3. 重建信息架构。
  4. 减少装饰元素。
  5. 改进信息密度和对齐方式。
  6. 补充缺失状态。
  7. 实现响应式行为。
  8. 提供最终代码。

不要只调整颜色样式。先修正结构。


18. 无障碍检查清单

定稿前,请验证:

  • 按钮使用按钮元素。
  • 链接使用链接元素。
  • 输入框带有标签。
  • 仅图标的控件具有无障碍名称。
  • 存在焦点可见状态。
  • 表格带有表头。
  • 对话框/面板带有标题。
  • 适用时,错误消息与相应控件相关联。
  • 颜色不是表示状态的唯一方式。
  • 移动设备上的点击目标易于操作。
  • 支持键盘导航。

19. 代码输出格式

回复代码时,请使用以下结构:

## 设计方案

### 产品目标
...

### 信息架构
...

### 视觉方向
...

### 布局
...

### 组件树

```txt
...
状态覆盖

...

响应式策略

...

自检与修正
风险修正
......

代码

...

质量检查

  • ...

If modifying a repository, include:

- Files changed
- Commands run
- Typecheck/lint/build result
- Assumptions
- Known limitations, if any

---

## 20. Definition of Done

A frontend task is complete only when all are true:

- Design plan is produced before code.
- Product goal is clear.
- Information hierarchy is explicit.
- Component tree is provided.
- Hover, loading, empty, error, disabled, focus-visible, mobile, and overflow states are implemented.
- shadcn/ui is used appropriately, not decoratively.
- Tailwind classes follow a coherent system.
- UI is restrained, dense, and product-grade.
- No large gradients, meaningless cards, fake icon piles, random shadows, or excessive radius.
- Responsive behavior is real.
- Accessibility basics are covered.
- Existing repo conventions are followed.
- Build/lint/typecheck commands are run when available, or the reason is stated.

评论

支持 Markdown