关于 frontend-production-shadcn
用于构建面向生产环境前端界面的工作流技能,默认采用 React、TypeScript、Tailwind CSS 和 shadcn/ui。它引导产品工程师检查项目约定、规划界面、覆盖响应式状态,并进行实现与质量审查。
主要功能
- 01检查现有项目约定
- 02规划产品目标与信息架构
- 03采用克制的 Tailwind 和 shadcn/ui 模式
- 04覆盖交互、加载、错误和空状态
- 05设计响应式布局与无障碍控件
- 06审查风险并执行质量检查
适用场景
- 01在现有代码库中构建产品界面
- 02规划响应式数据密集型页面
- 03改进界面状态与无障碍性
- 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.mdprompt-examples.mdui-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 组件,可以:
- 使用功能相当的现有组件;或
- 仅添加所需的最少 shadcn/ui 组件;或
- 如果更符合仓库风格,则实现简洁的本地替代组件。
2. 必需的工作流
对于任何重要的前端任务,请按以下顺序回应并开展工作:
- 产品目标
- 信息架构
- 视觉方向
- 布局方案
- 组件树
- 状态覆盖
- 响应式策略
- 关键自我审查
- 代码实现
- 质量检查/运行的命令
除非用户明确要求“仅提供代码”,否则不要直接开始编写代码。
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-mdrounded-lg- 仅对主要表面使用
rounded-xl
避免使用:
rounded-2xlrounded-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-backgroundtext-foregroundtext-muted-foregroundbg-mutedbg-muted/50bg-cardborder-bordertext-destructivebg-destructivering-ringbg-primarytext-primary-foreground
谨慎使用语义状态颜色,并始终搭配文字。
7. shadcn/ui 使用规则
仅在 shadcn/ui 组件能提供实际结构或无障碍行为时使用它们。
常见的适用场景:
ButtonInputTextareaSelectTabsTableBadgeDialogSheetDropdownMenuPopoverCommandSkeletonAlertSeparatorScrollAreaCheckboxRadioGroupSwitchForm- 仅在确实有帮助时使用
Tooltip
不要给每个区域都套上 Card。
仅当表面代表一个有意义的分组对象或独立面板时,才使用 Card。
不要把图标当作装饰。图标必须能明确表示操作、状态或导航目标。
仅含图标的按钮必须具有无障碍名称。
8. 必需状态
每个重要 UI 都必须实现以下状态,而不只是提及它们。
默认 / 已填充
使用真实且有代表性的数据。包含边界情况,例如过长的名称、缺少可选字段、失败状态和待处理状态。
悬停
为以下元素应用有意义的悬停状态:
- 按钮
- 可点击的行
- 菜单项
- 可选择的卡片
- 链接
悬停效果不应过于醒目。优先使用细微的背景、边框或文本变化。
键盘焦点可见
每个交互控件都必须显示键盘焦点。
尽可能使用 shadcn 默认样式。否则使用以下模式:
focus-visible:outline-nonefocus-visible:ring-2focus-visible:ring-ringfocus-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
当用户提供质量不佳的代码或截图时:
- 找出它看起来质量不佳的原因。
- 保留产品意图。
- 重建信息架构。
- 减少装饰元素。
- 改进信息密度和对齐方式。
- 补充缺失状态。
- 实现响应式行为。
- 提供最终代码。
不要只调整颜色样式。先修正结构。
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.