onboarding-ux
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseOnboarding UX
Onboarding 用户体验
Audit a web app for onboarding gaps, then generate the in-app guidance to fix them. The goal: a new user should never stare at a blank screen wondering what to do.
审计Web应用的新手引导缺口,然后生成应用内引导内容来填补这些缺口。目标是:新用户永远不会盯着空白屏幕,不知道该做什么。
The Problem This Solves
本技能解决的问题
You've built the features. They work. But when a new user logs in for the first time, they see:
- Empty tables with column headers and nothing else
- Sidebars full of labels that mean nothing to them yet
- No indication of where to start or what the app is for
- Features they don't know exist because nothing points to them
This skill finds those gaps and produces the content and code to fill them.
你已经开发好了各项功能,它们运行正常。但当新用户首次登录时,他们会看到:
- 只有列标题、没有内容的空表格
- 侧边栏全是他们目前还无法理解含义的标签
- 没有任何提示告诉他们从哪里开始,或者这个应用的用途是什么
- 一些功能因为没有任何引导,用户根本不知道它们的存在
本技能会找出这些缺口,并生成对应的内容和代码来填补它们。
Browser Tool Detection
浏览器工具检测
Same as ux-audit — detect Chrome MCP, Playwright MCP, or playwright-cli. See ux-audit's browser-tools.md reference if needed.
与ux-audit相同——检测Chrome MCP、Playwright MCP或playwright-cli。如有需要,请参考ux-audit的browser-tools.md文档。
URL Resolution
URL解析
Same as ux-audit — prefer deployed/live URL over localhost. Check wrangler.jsonc, CLAUDE.md, or running dev server.
与ux-audit相同——优先使用已部署的线上URL,而非localhost。检查wrangler.jsonc、CLAUDE.md或运行中的开发服务器。
Workflow
工作流程
Phase 1: Audit — Find the Gaps
阶段1:审计——找出缺口
Browse the app as a brand new user. On every page, evaluate:
以全新用户的身份浏览应用。在每个页面,评估以下内容:
Empty States
空状态
Navigate to every list/table/collection page. For each:
| Check | Good | Bad |
|---|---|---|
| What does a zero-data page show? | "No clients yet. Add your first client to get started." + CTA button | Empty table with column headers, or blank white space |
| Is there a clear action? | Button: "Add your first [thing]" | Nothing — user has to find the action in the nav or a menu |
| Does it explain the feature? | "Clients are the people and businesses you work with. Add one to start tracking your relationships." | Just an empty container |
| Is the empty state designed? | Illustration or icon, helpful copy, prominent CTA | Identical to the populated state minus the data |
导航到每个列表/表格/集合页面。针对每个页面:
| 检查项 | 合格标准 | 不合格标准 |
|---|---|---|
| 无数据页面显示什么内容? | “暂无客户。添加你的第一个客户开始使用。” + 呼叫行动(CTA)按钮 | 只有列标题的空表格,或空白区域 |
| 是否有清晰的操作指引? | 按钮:“添加你的第一个[内容]” | 没有任何指引——用户必须在导航栏或菜单中寻找操作入口 |
| 是否对功能进行了解释? | “客户是你合作的个人或企业。添加一个客户开始跟踪你们的合作关系。” | 只是一个空容器 |
| 空状态是否经过设计? | 配有插图或图标、实用说明文本、醒目的CTA按钮 | 与有数据时的状态几乎一样,只是没有数据 |
First Impression
第一印象
Log in as a new user (or clear state to simulate). Evaluate:
| Check | What to look for |
|---|---|
| Landing page | Does the dashboard/home show something useful or is it empty? |
| Orientation | Within 10 seconds, do I know what this app does and where to start? |
| First action | Is the #1 thing I should do obvious and prominent? |
| Cognitive load | How many menu items, buttons, and options compete for attention? |
| Welcome content | Is there a welcome message, tour, or getting-started guide? Or just the raw app? |
以新用户身份登录(或清空状态模拟新用户)。评估以下内容:
| 检查项 | 评估要点 |
|---|---|
| 着陆页 | 仪表盘/首页是否显示有用内容,还是一片空白? |
| 方向指引 | 10秒内,用户能否明白这个应用的用途以及从哪里开始? |
| 首次操作 | 用户最应该做的第一件事是否明显且醒目? |
| 认知负荷 | 有多少菜单项、按钮和选项分散用户的注意力? |
| 欢迎内容 | 是否有欢迎信息、导览或入门指南?还是直接显示原始应用界面? |
Feature Discoverability
功能可发现性
For each feature in the app:
| Check | What to look for |
|---|---|
| Can I find it? | Is it visible in the nav, or buried in a menu/submenu? |
| Do I know what it does? | Does the label explain it, or do I need to click to find out? |
| Keyboard shortcuts | Are there shortcuts? Are they discoverable (tooltip, help panel)? |
| Advanced features | Filters, bulk actions, search — are these visible or hidden? |
| Settings and configuration | Can I find the settings? Do I know what each setting does? |
针对应用中的每个功能:
| 检查项 | 评估要点 |
|---|---|
| 用户能否找到它? | 它是否在导航栏中可见,还是隐藏在菜单/子菜单中? |
| 用户是否明白它的用途? | 标签是否能解释其用途,还是需要点击才能了解? |
| 键盘快捷键 | 是否有快捷键?是否易于发现(如通过工具提示、帮助面板)? |
| 高级功能 | 筛选、批量操作、搜索——这些功能是可见的还是隐藏的? |
| 设置与配置 | 用户能否找到设置?是否明白每个设置的用途? |
Contextual Help Gaps
上下文帮助缺口
On each page:
| Check | What to look for |
|---|---|
| Form fields | Do complex fields have help text or tooltips? |
| Jargon | Any labels that a non-expert wouldn't understand? |
| Consequences | Do destructive or irreversible actions explain what will happen? |
| Validation | When I make a mistake, does the error message tell me how to fix it? |
在每个页面:
| 检查项 | 评估要点 |
|---|---|
| 表单字段 | 复杂字段是否有帮助文本或工具提示? |
| 专业术语 | 是否有非专业用户无法理解的标签? |
| 操作后果 | 破坏性或不可逆操作是否会说明执行后的结果? |
| 验证提示 | 当用户出错时,错误信息是否会告诉他们如何修复? |
Produce an Audit Report
生成审计报告
Write to :
.jez/artifacts/onboarding-audit.mdmarkdown
undefined将报告写入:
.jez/artifacts/onboarding-audit.mdmarkdown
undefinedOnboarding Audit: [App Name]
Onboarding Audit: [App Name]
Date: YYYY-MM-DD
URL: [app url]
Date: YYYY-MM-DD
URL: [app url]
First Impression Score
First Impression Score
[1-5] — Can a new user figure out what to do within 30 seconds?
[1-5] — Can a new user figure out what to do within 30 seconds?
Empty States Found
Empty States Found
| Page | Current state | Recommendation |
|---|---|---|
| /clients | Empty table, no guidance | Add empty state with CTA |
| Page | Current state | Recommendation |
|---|---|---|
| /clients | Empty table, no guidance | Add empty state with CTA |
Missing Guidance
Missing Guidance
| Location | Gap | Priority |
|---|---|---|
| Dashboard | No welcome or getting started | High |
| Settings | No descriptions on settings | Medium |
| Location | Gap | Priority |
|---|---|---|
| Dashboard | No welcome or getting started | High |
| Settings | No descriptions on settings | Medium |
Feature Discovery Issues
Feature Discovery Issues
| Feature | Problem | Fix |
|---|---|---|
| Keyboard shortcuts | No way to discover them | Add help panel |
| Feature | Problem | Fix |
|---|---|---|
| Keyboard shortcuts | No way to discover them | Add help panel |
Quick Wins
Quick Wins
[Top 5 changes that would have the biggest impact on new user experience]
---[Top 5 changes that would have the biggest impact on new user experience]
---Phase 2: Generate — Build the Solutions
阶段2:生成——构建解决方案
After the audit, generate the actual content and code. Read the project's codebase to match the existing tech stack and component patterns.
审计完成后,生成实际的内容和代码。阅读项目的代码库,以匹配现有的技术栈和组件模式。
1. Empty State Components
1. 空状态组件
For each empty state identified in the audit, generate a component:
tsx
// Pattern — adapt to the project's component library
function EmptyState({ icon, title, description, actionLabel, onAction }) {
return (
<div className="flex flex-col items-center justify-center py-16 text-center">
<div className="text-muted-foreground mb-4">{icon}</div>
<h3 className="text-lg font-medium mb-2">{title}</h3>
<p className="text-muted-foreground mb-6 max-w-md">{description}</p>
<Button onClick={onAction}>{actionLabel}</Button>
</div>
);
}For each page, write specific copy:
- Title: What the feature is ("Clients")
- Description: Why it matters, in one sentence ("Track the people and businesses you work with")
- Action: What to do next ("Add your first client")
Write the copy so it feels like a helpful colleague, not a manual.
针对审计中发现的每个空状态,生成对应的组件:
tsx
// Pattern — adapt to the project's component library
function EmptyState({ icon, title, description, actionLabel, onAction }) {
return (
<div className="flex flex-col items-center justify-center py-16 text-center">
<div className="text-muted-foreground mb-4">{icon}</div>
<h3 className="text-lg font-medium mb-2">{title}</h3>
<p className="text-muted-foreground mb-6 max-w-md">{description}</p>
<Button onClick={onAction}>{actionLabel}</Button>
</div>
);
}为每个页面编写特定的文案:
- 标题:功能名称(如“Clients”)
- 描述:一句话说明该功能的重要性(如“跟踪你合作的个人和企业”)
- 操作:下一步操作(如“添加你的第一个客户”)
文案要像乐于助人的同事那样亲切,而不是生硬的手册。
2. Welcome / First-Run Experience
2. 欢迎/首次运行体验
Generate one of these patterns based on the app's complexity:
Simple app (3-5 features): Welcome banner on the dashboard
tsx
// Dismissable welcome banner — shown until user closes it or completes first action
function WelcomeBanner({ onDismiss }) {
return (
<div className="rounded-lg border bg-card p-6 mb-6">
<h2 className="text-xl font-semibold mb-2">Welcome to [App Name]</h2>
<p className="text-muted-foreground mb-4">Here's how to get started:</p>
<ol className="space-y-2 mb-4">
<li>1. Add your first client</li>
<li>2. Create a policy for them</li>
<li>3. Check your dashboard for what needs attention</li>
</ol>
<Button variant="outline" size="sm" onClick={onDismiss}>Got it</Button>
</div>
);
}Complex app (6+ features): Checklist-style onboarding
tsx
// Persistent getting-started checklist — tracks progress
function OnboardingChecklist({ steps, completedSteps }) {
return (
<Card>
<CardHeader>
<CardTitle>Getting Started</CardTitle>
<p className="text-sm text-muted-foreground">
{completedSteps.length} of {steps.length} complete
</p>
</CardHeader>
<CardContent>
{steps.map(step => (
<div key={step.id} className="flex items-center gap-3 py-2">
<Checkbox checked={completedSteps.includes(step.id)} disabled />
<span>{step.label}</span>
</div>
))}
</CardContent>
</Card>
);
}根据应用的复杂程度,生成以下模式之一:
简单应用(3-5个功能):仪表盘上的欢迎横幅
tsx
// Dismissable welcome banner — shown until user closes it or completes first action
function WelcomeBanner({ onDismiss }) {
return (
<div className="rounded-lg border bg-card p-6 mb-6">
<h2 className="text-xl font-semibold mb-2">Welcome to [App Name]</h2>
<p className="text-muted-foreground mb-4">Here's how to get started:</p>
<ol className="space-y-2 mb-4">
<li>1. Add your first client</li>
<li>2. Create a policy for them</li>
<li>3. Check your dashboard for what needs attention</li>
</ol>
<Button variant="outline" size="sm" onClick={onDismiss}>Got it</Button>
</div>
);
}复杂应用(6个以上功能):清单式新手引导
tsx
// Persistent getting-started checklist — tracks progress
function OnboardingChecklist({ steps, completedSteps }) {
return (
<Card>
<CardHeader>
<CardTitle>Getting Started</CardTitle>
<p className="text-sm text-muted-foreground">
{completedSteps.length} of {steps.length} complete
</p>
</CardHeader>
<CardContent>
{steps.map(step => (
<div key={step.id} className="flex items-center gap-3 py-2">
<Checkbox checked={completedSteps.includes(step.id)} disabled />
<span>{step.label}</span>
</div>
))}
</CardContent>
</Card>
);
}3. Feature Tour
3. 功能导览
Generate a tour configuration for react-joyride (or equivalent):
tsx
const tourSteps = [
{
target: '[data-tour="sidebar-clients"]',
content: 'Your clients live here. Add people and businesses you work with.',
placement: 'right',
},
{
target: '[data-tour="create-button"]',
content: 'Click here to create something new — a client, policy, or email.',
placement: 'bottom',
},
{
target: '[data-tour="search"]',
content: 'Use search to find anything fast. Try Cmd+K for the quick switcher.',
placement: 'bottom',
},
];Also generate the attributes that need to be added to existing components.
data-tour为react-joyride(或同类工具)生成导览配置:
tsx
const tourSteps = [
{
target: '[data-tour="sidebar-clients"]',
content: 'Your clients live here. Add people and businesses you work with.',
placement: 'right',
},
{
target: '[data-tour="create-button"]',
content: 'Click here to create something new — a client, policy, or email.',
placement: 'bottom',
},
{
target: '[data-tour="search"]',
content: 'Use search to find anything fast. Try Cmd+K for the quick switcher.',
placement: 'bottom',
},
];同时生成需要添加到现有组件中的属性。
data-tour4. Tooltip and Help Content
4. 工具提示与帮助内容
For each complex UI element, generate tooltip copy:
tsx
// Pattern for info tooltips
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<InfoIcon className="h-4 w-4 text-muted-foreground" />
</TooltipTrigger>
<TooltipContent>
<p>Significance shows how important this client is to your business.
5 = critical (your biggest client), 1 = minimal (one-off interaction).</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>Generate a content map: for every field that needs explanation.
{ fieldName: tooltipText }为每个复杂UI元素生成工具提示文案:
tsx
// Pattern for info tooltips
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<InfoIcon className="h-4 w-4 text-muted-foreground" />
</TooltipTrigger>
<TooltipContent>
<p>Significance shows how important this client is to your business.
5 = critical (your biggest client), 1 = minimal (one-off interaction).</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>生成文案映射:,包含所有需要解释的字段。
{ fieldName: tooltipText }5. Contextual Hints
5. 上下文提示
Generate inline hints for features users might not discover:
tsx
// Shown once, dismissable, stored in localStorage
function ContextualHint({ id, children }) {
const [dismissed, setDismissed] = useState(
() => localStorage.getItem(`hint-${id}`) === 'dismissed'
);
if (dismissed) return null;
return (
<div className="text-sm text-muted-foreground bg-muted/50 rounded-md px-3 py-2 mb-3 flex items-center justify-between">
<span>{children}</span>
<button onClick={() => { localStorage.setItem(`hint-${id}`, 'dismissed'); setDismissed(true); }}>
<XIcon className="h-3 w-3" />
</button>
</div>
);
}
// Usage
<ContextualHint id="keyboard-shortcuts">
Tip: Press Cmd+K to quickly jump to any page or record.
</ContextualHint>为用户可能难以发现的功能生成内联提示:
tsx
// Shown once, dismissable, stored in localStorage
function ContextualHint({ id, children }) {
const [dismissed, setDismissed] = useState(
() => localStorage.getItem(`hint-${id}`) === 'dismissed'
);
if (dismissed) return null;
return (
<div className="text-sm text-muted-foreground bg-muted/50 rounded-md px-3 py-2 mb-3 flex items-center justify-between">
<span>{children}</span>
<button onClick={() => { localStorage.setItem(`hint-${id}`, 'dismissed'); setDismissed(true); }}>
<XIcon className="h-3 w-3" />
</button>
</div>
);
}
// Usage
<ContextualHint id="keyboard-shortcuts">
Tip: Press Cmd+K to quickly jump to any page or record.
</ContextualHint>6. Seed Data That Teaches
6. 具有教学意义的初始数据
Generate sample records that demonstrate the app's features:
- A sample client with realistic data (not "Test Client")
- A sample record in each state (draft, active, completed, archived)
- Records that show relationships (client → contact → policy → email)
Use the skill patterns but with onboarding-quality data — records that teach the user what good data looks like.
db-seed生成示例记录,展示应用的各项功能:
- 带有真实数据的示例客户(而非“测试客户”)
- 每个状态的示例记录(草稿、活跃、已完成、已归档)
- 展示关系的记录(客户 → 联系人 → 保单 → 邮件)
使用技能的模式,但生成适合新手引导的高质量数据——这些记录能向用户展示优质数据的样子。
db-seed7. Help Page Content
7. 帮助页面内容
Generate a help/FAQ page with content derived from the actual app:
markdown
undefined根据应用的实际内容生成帮助/FAQ页面:
markdown
undefinedFrequently Asked Questions
Frequently Asked Questions
How do I add a new client?
How do I add a new client?
- Click "Clients" in the sidebar
- Click "Add Client" in the top right
- Fill in the name and domain — everything else is optional
- Click "Save"
- Click "Clients" in the sidebar
- Click "Add Client" in the top right
- Fill in the name and domain — everything else is optional
- Click "Save"
What does "significance" mean?
What does "significance" mean?
Significance is a 1-5 rating of how important a client is...
Significance is a 1-5 rating of how important a client is...
Can I undo a deletion?
Can I undo a deletion?
Deletions are permanent. You'll always see a confirmation before...
undefinedDeletions are permanent. You'll always see a confirmation before...
undefinedOutput
输出结果
All generated content goes to :
.jez/artifacts/onboarding/.jez/artifacts/onboarding/
├── audit.md # The gap analysis report
├── empty-states.tsx # Empty state components with copy
├── welcome-banner.tsx # First-run welcome component
├── onboarding-checklist.tsx # Getting-started checklist (if complex app)
├── tour-steps.ts # Feature tour configuration
├── tooltip-content.ts # Tooltip copy map
├── contextual-hints.tsx # Inline hint component + content
├── seed-data.ts # Onboarding seed records
└── help-content.md # FAQ / help page contentTell the user which files were generated and where to integrate them. Provide specific instructions for each: "Add this component to your /clients page when the client list is empty."
所有生成的内容都将保存到目录:
.jez/artifacts/onboarding/.jez/artifacts/onboarding/
├── audit.md # 缺口分析报告
├── empty-states.tsx # 带有文案的空状态组件
├── welcome-banner.tsx # 首次运行欢迎组件
├── onboarding-checklist.tsx # 入门清单(如果是复杂应用)
├── tour-steps.ts # 功能导览配置
├── tooltip-content.ts # 工具提示文案映射
├── contextual-hints.tsx # 内联提示组件 + 内容
├── seed-data.ts # 新手引导初始记录
└── help-content.md # FAQ / 帮助页面内容告知用户生成了哪些文件以及如何集成它们。为每个文件提供具体说明:“当客户列表为空时,将此组件添加到你的/clients页面。”
Tips
提示
- Read the project's existing component patterns before generating — match the style, don't introduce new patterns
- Use shadcn/ui components if the project uses them
- Write copy as if you're a helpful colleague, not a manual
- Empty states are the single highest-impact change — do those first
- Feature tours are annoying if they're too long — max 5 steps
- Contextual hints should be dismissable and only shown once
- Sample data should look real — use realistic Australian names, domains, and details
- The help page content can be generated from the "explain it to a colleague" output of ux-audit
- 生成前先阅读项目现有的组件模式——匹配现有风格,不要引入新的模式
- 如果项目使用shadcn/ui组件,请使用该组件库
- 文案要像乐于助人的同事那样亲切,而不是生硬的手册
- 空状态是影响最大的改进——优先处理这些
- 功能导览如果太长会很烦人——最多5步
- 上下文提示应该可以关闭,且只显示一次
- 示例数据要看起来真实——使用真实的澳大利亚姓名、域名和详情
- 帮助页面内容可以从ux-audit的“向同事解释”输出中生成
Pairing With Other Skills
与其他技能搭配使用
| If you also run... | This skill adds... |
|---|---|
| Uses the audit findings as input — fixes the problems found |
| Generates onboarding-quality seed data instead of generic test data |
| The help page content can feed into the user guide |
| Empty states and welcome flow make demo screenshots look better |
| 如果你同时运行... | 本技能会补充... |
|---|---|
| 将审计结果作为输入——修复发现的问题 |
| 生成适合新手引导的高质量初始数据,而非通用测试数据 |
| 帮助页面内容可用于填充用户指南 |
| 空状态和欢迎流程让演示截图看起来更专业 |