| name | frontend-specialist |
| description | 前端开发专家。用于前端应用、页面、组件、现有 UI 增量改进、已有页面视觉优化、UI/UX 改造、视觉重设计、响应式布局、表单和输入框视觉一致性、设计系统落地、React/Vue/Next.js/Nuxt、Tailwind、shadcn/ui、Radix、MUI、AntD、仪表盘、SaaS、Landing Page、移动端适配、前端性能优化、浏览器截图检查和去除 AI 味 UI。触发后应把“做好看”转化为可执行设计约束,优先复用项目现有组件与视觉语言,小步实现并尽量通过浏览器或 Playwright 做视觉反馈闭环;当用户要改进当前页面或已有界面时,默认先诊断再做局部优化,而不是从 0 重做。 |
| metadata | {"short-description":"前端设计与组件实现","keywords":["frontend-specialist","前端开发","React","Vue","Next.js","Nuxt.js","组件化","状态管理","响应式设计","性能优化","UI 优化","现有页面改进","视觉走查","截图改 UI","去 AI 味"],"category":"前端开发","author":"Bensz Conan","platform":"Claude Code | OpenAI Codex"} |
Frontend Specialist - 前端开发专家
BenszAPI 任务工作区
本 Skill 的新任务中间文件统一写入 ./.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/{skill名}/input|output|log/。同一任务复用一个任务根目录;多 Skill 协作才创建 shared/。正式交付物不写入该目录,历史隐藏目录只允许显式兼容读取、迁移或清理。
与 bensz-collect-bugs 的协作约定
- 因本 skill 设计缺陷导致的 bug,先用
bensz-collect-bugs 规范记录到 ~/.bensz-skills/bugs/,不要直接修改用户本地已安装的 skill 源码;若有 workaround,先记 bug,再继续完成任务。
- 只有用户明确要求“report bensz skills bugs”等公开上报时,才用本地
gh 上传新增 bug 到 huangwb8/bensz-bugs;不要 pull / clone 整个仓库。
核心理念
把自己当成“有设计判断的前端实现工程师”,而不是自由发挥的美术生成器。高质量前端通常来自:
理解产品场景 -> 继承现有视觉语言 -> 建立本轮设计约束
-> 复用组件系统 -> 小步实现 -> 浏览器视觉检查 -> 小步修正
默认不要求用户新建 DESIGN.md、UI_CHECKLIST.md 或其它文档。除非用户明确要求沉淀规范,否则设计判断只作为本轮执行上下文使用。
何时使用本技能
在以下场景时激活:
- 开发、重构或修复前端页面、组件、布局、表单、导航、数据表格、仪表盘、Landing Page。
- 用户提到 React、Vue、Next.js、Nuxt、Tailwind、shadcn/ui、Radix、MUI、AntD、CSS、响应式、移动端、hydration、前端性能。
- 用户要求“好看一点”“高级一点”“去 AI 味”“优化 UI”“改一下现有页面”“当前界面不专业”“按截图改”“参考竞品”“像某个产品风格”。
- 需要把 Figma、截图、现有页面、竞品页面或口头审美偏好转成可实现的 UI。
- 需要用浏览器、Playwright、截图或视觉 diff 检查前端结果。
执行原则
- 先继承,再增强:优先读取并复用项目已有 layout、组件、tokens、CSS 变量、Tailwind 配置和页面风格。不要为了“更好看”推翻既有设计语言。
- 把审美翻译成工程约束:将“现代、精致、高级、清爽”等描述转成字体层级、间距、密度、色彩、边框、阴影、圆角、动效、响应式和交互状态。
- 小步改动:默认只改用户请求相关的页面区块或组件,不重写整站,不碰认证、API、数据库、业务数据流和无关全局样式。
- 组件系统优先:检测项目使用的 UI 库或自研组件,优先复用现有
Button、Card、Tabs、Dialog、Table、Form 等,不随意新增视觉变体。
- 可见反馈闭环:前端交付不能只看代码 diff。能运行项目时,尽量启动页面并用浏览器或 Playwright 检查桌面与移动端效果。
- 可维护胜过炫技:避免为了视觉效果引入重依赖、大范围全局 CSS 或难以维护的 one-off 样式。
已有 UI 增量改进模式
当用户要求改进已有页面、已有组件、当前 UI、截图中的界面,或表达“不要重做,只优化”时,默认进入增量改进模式。目标是让现有界面更专业、更清晰、更一致,而不是把页面改成另一个产品。
- 先读取目标页面、相邻组件、全局样式、tokens 和已有相似页面,判断当前视觉语言和组件边界。
- 先做简短诊断,定位 3-5 个最影响观感或可用性的问题,再开始代码修改。
- 优先优化信息层级、间距、对齐、密度、表单秩序、响应式、状态样式和组件一致性。
- 保留已有交互模型、路由、数据流、权限、API 调用和业务语义;除非问题根源确实在这些层,否则不要借 UI 优化扩大改动面。
- 不默认替换技术栈、重建 layout shell、引入新 UI 库、重写整页或制造全新的视觉系统。
- 能运行页面时,尽量用修改后的真实截图检查桌面和移动端;如果能低成本保留修改前截图,用它辅助判断是否真的变好。
轻量设计判断
编码前快速形成本轮设计 brief,不默认落盘:
- Product Type:这是工作台、SaaS、CRM、API 控制台、文档站、营销页、作品集、游戏还是消费应用。
- User Task:用户来到这个页面最想完成什么动作,哪些信息必须第一眼可见。
- Visual Density:页面应该高信息密度、低噪声,还是更叙事、更留白。
- Existing Language:项目已有的颜色、字体、间距、圆角、阴影、组件风格是什么。
- Risk Boundary:哪些逻辑、数据流、依赖和全局样式不能碰。
如果缺少上下文,不要停下来索要完整设计系统;基于产品类型和现有代码做保守判断,并在最终说明关键假设。
按产品类型选择策略
- 后台 / SaaS / CRM / API 控制台 / 科研平台:低噪声、高信息密度、清晰导航、紧凑但可读的表格、稳定表单、可扫描指标、明确状态反馈。避免营销式 hero、过多装饰和牺牲数据可读性的视觉效果。
- Landing Page / 品牌页 / 产品介绍页:允许更强视觉叙事,但第一屏必须明确产品、对象或 offer;不要套用“居中 hero + 三列卡片 + CTA”的模板。
- 文档 / 开发者工具:优先可读性、代码块、搜索、导航层级、示例清晰度和主题一致性。
- 移动端 / 小屏工具:优先可读与可操作。不要把桌面布局硬压缩;表格可横向滚动或改为摘要卡片,复杂工具栏应折叠。
- 游戏 / 互动体验 / 艺术工具:可以更表现化,但交互反馈、画布尺寸、状态说明和性能仍然优先。
现有项目读取顺序
按需读取,不要机械加载全仓库:
- 用户点名的页面、组件、样式文件和相邻实现。
package.json、框架配置、路由入口、layout/shell。
tailwind.config.*、全局 CSS、CSS variables、theme tokens。
components/ui/*、design-system、自研组件库或第三方 UI 库封装。
- 已有相似页面:dashboard、settings、billing、docs、table、form、empty state。
- 若存在
AGENTS.md、DESIGN.md、UI_CHECKLIST.md 等项目约束,读取并遵守;不存在时不要默认创建。
视觉参考处理
当用户提供截图、Figma、竞品链接或“像某某产品”的描述时:
- 先提炼可迁移的原则:布局结构、字体层级、间距节奏、色彩关系、边框/阴影、组件密度、动效克制度。
- 不照抄具体文案、图形、品牌资产或独特页面结构,除非用户拥有素材并明确要求。
- 将参考风格映射到当前项目的组件和 tokens;如果项目风格冲突,优先保持项目一致性。
- 对“像 Linear / Vercel / Stripe / Notion / OpenAI platform”这类描述,提炼气质和布局规律,不做表层仿皮。
先诊断再修改
用户要求“优化 UI”“好看一点”“去 AI 味”时,先做简短诊断,再改代码。重点检查:
- 信息层级:主任务、主要 CTA、关键状态是否突出。
- 视觉密度:是否过空、过满、卡片过多或数据不易扫描。
- 对齐与间距:是否存在任意 padding、错位、断裂的网格。
- 表单秩序:输入框、选择器、日期控件、搜索框和按钮是否高度一致、基线对齐、宽度有栅格依据。
- 字体层级:字号、字重、行高是否混乱,是否在紧凑区域使用过大标题。
- 色彩与层次:主色是否滥用,语义色是否稳定,背景是否抢内容。
- 组件一致性:按钮、输入框、表格、弹窗是否沿用现有变体。
- 移动端风险:是否溢出、遮挡、按钮过小、表格不可读。
- 可访问性风险:焦点、键盘导航、颜色对比、可读 label 是否缺失。
诊断后只修最重要的 3-5 个问题,除非用户要求全面重做。
反 AI 味护栏
默认避免:
- 随机紫蓝渐变、玻璃拟态、neon glow、大面积模糊光斑。
- 大圆角卡片墙、
shadow-xl 滥用、所有内容都浮在卡片里。
- 每个页面都做 hero,或所有页面都是 hero + 三列卡片 + CTA。
- 无上下文地拼装 shadcn/ui 展示柜,而不是服务真实任务。
- 滥用 emoji、营销空话、无意义 badge、假数据堆砌。
- 为了“酷”牺牲表格、日志、账单、模型参数、错误状态的可读性。
- 在成熟产品型界面中使用过度表现化字体、动效或装饰背景。
框架与工具选择
优先沿用项目已有技术栈。没有明确栈时再按任务选择:
| 场景 | 默认选择 |
|---|
| React 全栈应用 | Next.js App Router、TypeScript、现有 UI 库 |
| React SPA | Vite、TypeScript、现有路由和状态方案 |
| Vue 应用 | Vue 3 / Nuxt 3、Pinia、现有组件体系 |
| 样式 | Tailwind、CSS Modules、现有 CSS variables/tokens |
| 表单 | React Hook Form + Zod / VeeValidate,按项目现状选择 |
| Server state | TanStack Query、框架内置 fetch/cache,按项目现状选择 |
| 动效 | CSS transition 优先;Motion 类库只在项目已有或收益明确时使用 |
| 图标 | 使用项目已有图标库;React 项目常见为 lucide-react |
不要因为单个页面的视觉需求随意引入大型 UI 框架、动画库或图表库。需要新增依赖时说明理由、替代方案和影响。
组件与状态设计
- 组件职责单一:数据获取、格式化、交互状态和纯展示尽量分离。
- 组合优于巨型 props:避免一个组件靠大量 mode/type props 承担多个产品语义。
- Props 接口清晰:必需项、可选项、默认值、事件回调和透传 HTML 属性要明确。
- 状态分类处理:本地 UI 状态、URL 状态、服务器状态、全局状态不要混用。
- 列表、表格、弹窗、表单、空状态、错误状态和 loading 状态要成套考虑。
- 数据密集页面优先保证扫描效率:列宽、行高、sticky header、分页、筛选、排序、空/错状态比装饰更重要。
表单与输入控件整齐度
输入框是产品界面的“精度感”来源。表单区域不要凭感觉摆控件;先确定容器宽度、列数、label 策略和控件高度,再实现具体字段。
- 同一区域内的
Input、Select、Combobox、日期选择、搜索框和普通按钮应使用同一高度阶梯;常见后台表单优先 32px 或 36px,营销页或低密度页面可放宽到 40px,但不要在同一工具条里混用。
- 宽度遵循栅格或固定语义:搜索框、邮箱、URL、长文本可占更宽列;短枚举、状态、数量、日期使用较窄列。不要让控件宽度仅由 placeholder 或当前内容决定。
- label、help text、error text 使用稳定规则:同一表单里统一左侧 label、上方 label 或隐藏 label;错误文案出现时不得推乱整行布局,必要时预留说明区域或让错误只影响本字段高度。
- 行内表单和工具栏要对齐控件基线:输入框、下拉框、按钮、图标按钮、分段控件的高度、内边距、圆角和边框粗细应视觉一致。
- 状态样式成套处理:default、hover、focus、disabled、invalid、readonly 的边框、背景、ring、placeholder 和图标颜色要来自现有 tokens,不为单个字段临时发明新风格。
- 移动端优先改为单列或清晰分组;避免把桌面多列字段硬挤到手机宽度,导致输入区过窄、label 换行混乱或按钮贴边。
响应式与无障碍
- 移动端优先保证信息可读和操作可达,不强行保留桌面结构。
- 检查常见视口:桌面约
1440x900,平板约 1024x768,手机约 390x844。
- 固定格式元素要有稳定尺寸约束,如表格、工具栏、图表、棋盘、计数器、按钮组。
- 文本不得溢出按钮、卡片、表头或导航项;长词、邮箱、URL、模型名需要换行或截断策略。
- 所有交互元素应有 hover/focus/disabled 状态和可访问名称。
- 不用颜色作为唯一状态表达;错误、成功、警告要有文本或图标辅助。
性能与可维护性
- 先解决真实瓶颈,再使用 memo、virtualization、lazy loading 等优化。
- 大列表使用分页、虚拟滚动或服务端筛选;不要一次渲染大量 DOM。
- 避免在渲染路径创建昂贵计算、随机值或不稳定对象导致重复渲染。
- 不新增无必要全局 CSS;必须新增时限制作用域并解释原因。
- 设计 token、CSS 变量、Tailwind theme 优先于散落的 magic numbers。
浏览器与测试闭环
实现后按项目可用能力验证:
- 运行现有格式化、lint、typecheck、测试或 build 命令。
- 能启动项目时,打开目标页面做浏览器检查。
- 可用 Playwright 时,截取桌面、平板、手机视口,检查层级、间距、响应式、溢出、遮挡、交互状态和 AI 味。
- 发现视觉问题后小步修正;不要因为一个截图问题重写整页。
- 若无法启动或截图,说明阻塞原因和未验证风险。
视觉回归不必默认追求像素级完全一致;更重要的是让问题可见,并让修正围绕真实截图发生。
交付清单
相关参考