UX Baseline Check
Core Pack — Always Active
This is a core skill. Apply it on ALL visual and frontend work alongside design-review.
Every screen ships with ALL states covered. No exceptions. This is the minimum bar.
The State Inventory
Before any page or component is "done", verify each applicable state exists:
1. Data States
- - [ ] Empty — no data yet. Helpful message + clear CTA, not a blank screen
- [ ] Loading — skeleton, spinner, or shimmer. Never a white flash
- [ ] Loaded — the happy path, obviously
- [ ] Error — API failure, network issue. User-friendly message + retry action
- [ ] Partial — some data loaded, some failed. Don't hide what works
- [ ] Long content — what happens with 200 items? 2000-character names? Test it
2. Interaction States
- - [ ] Hover — every clickable element has a hover state
- [ ] Focus — keyboard navigation works, focus rings visible
- [ ] Active/pressed — buttons respond to clicks visually
- [ ] Disabled — grayed out with clear reason why (tooltip or helper text)
- [ ] Selected — multi-select, current tab, active filter all visually distinct
3. Form States
- - [ ] Validation — inline errors on blur, not just on submit
- [ ] Required fields — clearly marked
- [ ] Success feedback — user knows their action worked (toast, inline, redirect)
- [ ] Destructive confirmation — delete/remove actions require confirmation
- [ ] Autofill — doesn't break layout when browser autofills
4. Responsive
- - [ ] Mobile (375px) — usable, not just visible. Touch targets ≥48px with ≥8px spacing between them
- [ ] Tablet (768px) — layout adapts, not just shrinks
- [ ] Desktop (1280px) — the primary target, looks intentional
- [ ] Wide (1800px+) — content doesn't stretch absurdly. Max-width or centered
5. Accessibility
- - [ ] Keyboard nav — can reach all interactive elements with Tab
- [ ] Screen reader — semantic HTML, aria-labels on icons, alt text on images
- [ ] Color contrast — 4.5:1 minimum for text (use WebAIM checker)
- [ ] No color-only indicators — don't rely solely on red/green for status
6. Edge Cases
- - [ ] First-time user — onboarding or empty state guides them
- [ ] Permission denied — user sees why they can't access, not a broken page
- [ ] Stale data — timestamps or refresh indicators when data might be outdated
- [ ] Concurrent edits — what happens if two people edit the same thing?
How to Use
Run this checklist AFTER the feature works but BEFORE design review. For each missing state, either:
- 1. Implement it (preferred)
- Document it as a known gap and tell Aaron explicitly
Never silently skip a state. If it's intentionally deferred, say so.
Quick Pass vs Full Pass
Quick pass (components, small features): States 1-2 only
Full pass (pages, flows, shipping features): All 6 sections
The Test
Ask yourself: "What happens if the network is slow, the data is weird, the user is on a phone, or they're using a keyboard?" If you don't know, you haven't finished.
UX 基线检查
核心包——始终生效
这是一项核心技能。在所有视觉和前端工作中,与设计评审一同应用。
每个页面都必须覆盖所有状态,无一例外。这是最低标准。
状态清单
在任何页面或组件被视为“完成”之前,请验证每个适用状态是否存在:
1. 数据状态
- - [ ] 空状态 — 尚无数据。显示有帮助的提示信息 + 清晰的操作按钮,而非空白页面
- [ ] 加载中 — 骨架屏、加载动画或闪烁效果。绝不允许出现白屏闪烁
- [ ] 已加载 — 正常路径,显而易见
- [ ] 错误状态 — API 失败、网络问题。显示用户友好的提示信息 + 重试操作
- [ ] 部分加载 — 部分数据加载成功,部分失败。不要隐藏已成功加载的内容
- [ ] 长内容 — 200 个项目会怎样?2000 字符的名称呢?测试一下
2. 交互状态
- - [ ] 悬停 — 每个可点击元素都有悬停状态
- [ ] 聚焦 — 键盘导航可用,聚焦环可见
- [ ] 激活/按下 — 按钮在点击时有视觉反馈
- [ ] 禁用 — 灰色显示,并附有明确原因(工具提示或辅助文本)
- [ ] 选中 — 多选、当前标签页、激活的筛选器在视觉上均有区分
3. 表单状态
- - [ ] 验证 — 失焦时即显示内联错误,而非仅在提交时
- [ ] 必填字段 — 清晰标记
- [ ] 成功反馈 — 用户知道操作已生效(提示条、内联提示、页面跳转)
- [ ] 破坏性操作确认 — 删除/移除操作需要确认
- [ ] 自动填充 — 浏览器自动填充时不破坏布局
4. 响应式
- - [ ] 移动端(375px) — 可用,而不仅仅是可见。触摸目标 ≥48px,间距 ≥8px
- [ ] 平板端(768px) — 布局自适应,而非简单缩放
- [ ] 桌面端(1280px) — 主要目标,看起来经过精心设计
- [ ] 宽屏(1800px+) — 内容不会过度拉伸。设置最大宽度或居中显示
5. 无障碍
- - [ ] 键盘导航 — 所有交互元素均可通过 Tab 键到达
- [ ] 屏幕阅读器 — 语义化 HTML,图标有 aria-label,图片有替代文本
- [ ] 颜色对比度 — 文本最低 4.5:1(使用 WebAIM 检测工具)
- [ ] 不依赖颜色作为唯一指示 — 不要仅靠红/绿来表示状态
6. 边界情况
- - [ ] 首次用户 — 引导流程或空状态指引
- [ ] 权限不足 — 用户看到无法访问的原因,而非页面报错
- [ ] 数据过期 — 数据可能过时时,显示时间戳或刷新提示
- [ ] 并发编辑 — 两人同时编辑同一内容时会发生什么?
使用方法
在功能开发完成之后、设计评审之前运行此清单。对于每个缺失的状态,要么:
- 1. 实现它(首选)
- 记录为已知缺口,并明确告知 Aaron
切勿默默跳过任何状态。如果故意推迟处理,请明确说明。
快速检查 vs 全面检查
快速检查(组件、小功能):仅检查状态 1-2
全面检查(页面、流程、发布功能):检查全部 6 个部分
检验标准
问问自己:“如果网络很慢、数据异常、用户使用手机或键盘操作,会发生什么?”如果你不知道答案,说明工作尚未完成。