Skip to content

Commit 5ee68a8

Browse files
yn1323claude
andauthored
feat: デモシフトボードとイベント駆動ツアーの追加 (#345)
* chore: E2EのCIタイムアウトを短縮し失敗検知を高速化 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: デモサンドボックス設計プランを追加 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: BrowserMockupがchildrenでカスタム内容を受け取れるよう拡張 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: LPにデモ導線セクションを追加 Hero直下に「まずはさわってみる」セクションを挿入。BrowserMockup内に 簡易シフトプレビューを表示し、別タブで /demo を開くCTAを配置する。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: LP FAQを複数同時に開けるよう変更 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: LPデモ導線をSPで非表示にし、リンク先を/demo/shiftboardに更新 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: /demo/shiftboard ルートとデモシフトボード画面を追加 _unregistered 配下に認証不要のデモページを新設。Convex/Clerk には触らず、 既存モックと ShiftForm を使って店長視点のシフトボードを編集可能な状態で表示する。 SP は "SP Coming Soon..." のみ。週の起点は来週の月曜(baseDate prop で差し替え可)。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * refactor: OverviewViewの週アコーディオンから日数表記を削除 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: DailyViewのスタッフ列幅を拡張しステータスバッジを右寄せに変更 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: mock * feat: 汎用Tourコンポーネントとreact-joyride依存を追加 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: デモシフトボードにイントロツアーを追加 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: design-ideas skillを追加 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: ux-writing skillを追加しテキストガイドラインをCLAUDE.mdから移行 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: ui-architect skillを追加 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: demo-ux skillを追加 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: デモ画面のイベント駆動ツアーを追加 FAB起動 → 追加 / 編集 / 削除 / 確定 の操作完了で進む4ステップを stepIndex controlled で実装。Tour wrapper は useJoyride + forwardRef で controls.skip() を露出し、親から 明示的に終了できる。ShiftGrid の data-tour をスタッフID別にし、ShiftPopover の zIndex を Tour overlay より上に引き上げ。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: LP / ダッシュボードの文言を調整 FAQ に「ずっと無料か」の項目を追加し、スタッフ向け説明を「メール→リンク」 に揃える。Nav CTA を「はじめてみる」に、ダッシュボードのモーダルタイトル / トーストを募集タスク寄りの表現へ。WelcomeHero から「はじめに」ラベルを外し サブコピーを追記。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: biome schema を 2.4.12 に揃える CLI バージョンと schema 参照のズレで lint info が出ていたのを解消。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: ツアー中にドラッグ&ドロップができなくなる回帰を修正 overlay SVG path の pointer-events を none に上書きする CSS を復活。 リファクタ時に撤去していたが、spotlight 外で mousedown が食われて ドラッグ開始が失敗する回帰を招いていた。overlay の視覚はそのまま 残し、操作だけ素通しにする。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: ダッシュボード系の文言を調整 プレースホルダの区切り、ヒーローの CTA ラベル、EditShopForm のヘルプ文、 AddStaffForm の追加ボタン、SetupModal / RecruitmentBoard / StaffRoster の コピーを全体的に見直し。動作は変更なし。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: EditStaffForm のプレースホルダ区切りを全角コロンに揃える 他ダッシュボードフォームと同じ表記に揃え、ロケールのばらつきを解消。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: ダッシュボード文言調整に伴うE2E/Storiesの参照更新 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: E2Eのタイムアウト設定を調整 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix: デモツアーのオーバーレイがモーダル表示時に残る不具合を解消 skip() と unmount を同一イベントでバッチすると joyride 内部の片付けが 走らず overlay が残る。確定モーダルを開く前に skip + idle に倒して 片付けさせ、確定完了後も idle を維持して FAB を再表示する。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: デモツアーのステップ文言を調整 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 467088b commit 5ee68a8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+5798
-178
lines changed

.claude/skills/demo-ux/SKILL.md

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
---
2+
name: demo-ux
3+
description: Best practices for designing, reviewing, or refining "try-it-now" interactive product demos, in-app product tours, onboarding walkthroughs, and sandbox experiences. Use when building or critiquing a demo page, tour component, tooltip copy, sandbox, aha-moment flow, reset/skip behavior, or any try-before-signup experience. Triggers on "demo UX", "ツアー設計", "ウォークスルー", "オンボーディング設計", "チュートリアル", "product tour", "walkthrough", "try it now", "サンドボックス設計", "デモのレビュー", or when reviewing files named `*Tour*`, `*Demo*`, `*Onboarding*`, `*Walkthrough*`.
4+
---
5+
6+
# Demo UX Best Practices
7+
8+
Knowledge base for designing try-it-now demos, product tours, and onboarding flows that convert. Grounded in 2024–2026 benchmarks (Navattic, Arcade, Chameleon, Userpilot, Appcues) rather than first principles — because most "design intuitions" in this space are wrong in ways only data reveals.
9+
10+
## When to use
11+
12+
- Designing a `/demo` or `/try` page from scratch
13+
- Reviewing or refining an existing tour / tooltip / sandbox
14+
- Deciding whether a tour should auto-start
15+
- Writing tooltip microcopy
16+
- Debating step count, skip behavior, or reset behavior
17+
- Choosing between guided tour, free sandbox, or hybrid
18+
19+
## Core decisions (checklist)
20+
21+
Work through these in order. Each has a default answer backed by data; deviate only with a specific reason.
22+
23+
### 1. Step count — **default: 3 steps**
24+
25+
- **3 steps hits 72% completion. 4 steps → 45%. 7 steps → 16%.** The cliff between 3 and 4 is real.
26+
- If the guided flow needs more than 3 steps, split it: 3-step tour + progressive disclosure (contextual tooltips fired later when the feature is actually used).
27+
- A tour that explains features *before* the user tries them is almost always wrong. Fold explanation into the moment the user is about to use the feature (event-driven tooltips).
28+
29+
### 2. Start trigger — **default: user-initiated, not auto-start**
30+
31+
- **User-initiated tours complete 2–3× more often** than auto-start.
32+
- Modal-on-arrival increases bounce. Don't cover the product on first paint.
33+
- Instead: land in the sandbox, show a visible-but-dismissible CTA inline ("最初の1日を整えてみる →" / "Start the tour").
34+
- If you must nudge: delay 30–60s or trigger on idle / scroll.
35+
36+
### 3. Initial state — **default: pre-broken, not empty**
37+
38+
- Empty states push time-to-value past the user's attention budget.
39+
- **Pre-broken > pre-populated > empty.** Grammarly (text with mistakes), Linear (seeded issues), Notion (getting-started workspace), Figma (community files) — none start empty.
40+
- The pre-broken state *is* the aha setup: the user fixes it, the aha lands.
41+
- Design the broken state so the problem is **visually obvious** — long bars, missing entries, visible conflicts. Don't require explanation.
42+
43+
### 4. Progression — **default: event-driven, not click-Next**
44+
45+
- "Click Next" tours let users advance without performing the value-creating action — the single biggest conversion killer in tour design.
46+
- Fire the next tooltip **when the user completes the action** (drag finished, item deleted, form submitted).
47+
- For non-action steps (welcome / summary), click-Next is fine.
48+
49+
### 5. Tooltip copy — **default: 1 sentence, ≤150 chars, verb-first**
50+
51+
- **≤150 chars, ~20–30 words, one idea per tooltip.**
52+
- **Verb-first, second person, imperative**: "Add your first shift" beats "You can add shifts here."
53+
- **Instructional > narrative.** Narrative fits marketing videos, not tooltips.
54+
- Point at the next action, not at the feature.
55+
- See `references/copy-patterns.md` for patterns and Japanese-specific nuances.
56+
57+
### 6. Skip — **default: always visible, persistent, preserves state**
58+
59+
- Skip control must be visible on every step. Forcing a tour == churn.
60+
- Show step counter next to skip so the user can choose "3 more → done" vs. "skip".
61+
- **Skipping should NOT reset the sandbox.** Let the user keep poking the state they've built.
62+
- B2B tour completion averages ~5%. Skip is the default behavior, not the exception.
63+
64+
### 7. Reset — **default: reload-resets, plus a visible "Start over" button**
65+
66+
- Reload should restore initial state (simplest, no surprises).
67+
- Additionally expose a visible "Reset demo" / "最初からやり直す" button in the page chrome.
68+
- Single-step confirmation ("Your demo progress will be cleared"). No typed confirmation — this is a sandbox.
69+
- Label as "Reset" / "Start over", not "Delete".
70+
71+
### 8. End state — **default: inline CTA in the last step, not a full-screen modal**
72+
73+
- Inline CTA in the last tooltip outperforms full-screen celebration for SMB flows.
74+
- Show 1–2 differentiated CTAs: low-commitment + high-commitment ("Keep exploring" + "Start free").
75+
- **"Learn more" CTRs ~63%; "Book a demo" ~41%.** High CTR ≠ high qualified conversion — match wording to intent.
76+
- Consider a persistent top-bar CTA for users who hit aha mid-flow.
77+
78+
### 9. Mobile — **default: desktop-first with explicit fallback**
79+
80+
- Interactive tours are desktop-first. That's the state of the industry.
81+
- **52% of top-1% demos ship an optimized mobile experience** — the rest redirect or email-capture.
82+
- Fallbacks: (a) simplified mobile-only demo, (b) looping video, (c) "best on desktop — email me the link".
83+
- If the demo uses drag/drop/precision hover, a mobile fallback is mandatory.
84+
85+
### 10. Analytics — **instrument these 5 events minimum**
86+
87+
1. `demo_loaded` — page opened
88+
2. `tour_started` — start CTA clicked (distinguishes auto vs. user-triggered)
89+
3. `step_completed` — per-step with step id. Finds the one step killing the funnel.
90+
4. `aha_reached` — custom event when the user completes the value-creating action
91+
5. `cta_clicked` — final signup / upgrade CTA
92+
93+
Top-1% demos: final CTR 67%, demo-to-signup 8× median. If your numbers are far from these, the fix is usually step-count or progression style — not copy.
94+
95+
## The persona lens
96+
97+
Two meta-personas matter:
98+
99+
| Persona | Prefers | Why |
100+
|---|---|---|
101+
| **Hands-on SMB / operator** (shop owners, ops managers, ICs) | Sandbox > guided. Short tours. Try-it-now > sales demo | SMB buyers "tolerate lighter, shorter tours" (SmartCue). Self-serve converts. |
102+
| **Exec / enterprise evaluator** | 90-second narrative video > interactive. Prefers demo-with-a-human | "Watch-to-evaluate" — Arcade-style video demos convert this persona better. |
103+
104+
Building for both? Ship a 60–90s video demo alongside the interactive demo. Let the user choose.
105+
106+
## Common anti-patterns (do not do)
107+
108+
- 7+ step tours that front-load feature explanation
109+
- Auto-triggered modal on first page load
110+
- "Click Next" progression for action steps
111+
- Empty initial state ("Add your first X to get started")
112+
- Skip button hidden in an overflow menu
113+
- Multi-step reset confirmation
114+
- Full-screen celebration modal at end (over-ceremonious)
115+
- Narrative / marketing copy in tooltips ("Welcome to the future of X…")
116+
- Mobile "coming soon" dead-ends
117+
- No aha-reached event instrumented
118+
119+
See `references/anti-patterns.md` for extended list with symptom → cause → fix.
120+
121+
## When to reference deeper files
122+
123+
- **`references/benchmarks.md`** — specific numbers to justify a design decision (completion rates, conversion benchmarks, TTV, CTR by wording). Full citations.
124+
- **`references/copy-patterns.md`** — when writing or reviewing tooltip / CTA / banner text, especially in Japanese. Includes verb-first patterns, 3 I's (Inform/Influence/Interact), Japanese copy nuances.
125+
- **`references/anti-patterns.md`** — when reviewing an existing demo for problems. Organized as symptom → cause → fix.
126+
127+
## Output discipline (when reviewing or proposing)
128+
129+
1. **Lead with data, not opinion.** "3-step tours hit 72%, 7-step tours hit 16% — your 7 steps is in the wrong zone" beats "this feels long."
130+
2. **State the default, then justify the exception** if the design deviates.
131+
3. **Don't invent tooltip copy** without showing the underlying pattern (verb-first, ≤150 chars, event-driven). Otherwise the user treats it as decoration, not a design artifact.
132+
4. **Always mention analytics.** "What 5 events are we instrumenting?" If the answer is "we'll figure that out later", the demo isn't done.
133+
134+
## Scope boundaries
135+
136+
- This skill covers **try-it-now demos, tours, and onboarding** — not marketing landing pages, not sales demos, not documentation sites.
137+
- For full-screen mock design, use `/create-design`.
138+
- For pinpoint UI polish unrelated to demos, use `/design-ideas`.
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
# Demo UX Anti-patterns
2+
3+
Organized as **symptom → cause → fix**. Use this file when reviewing an existing demo for problems.
4+
5+
## Step count bloat
6+
7+
**Symptom**: Tour has 7+ steps, each explaining a feature before the user tries it.
8+
**Cause**: Designer assumed "more explanation = better understanding." In practice, front-loaded explanation doesn't stick and users bail.
9+
**Fix**: Cut to 3 action steps. Move remaining explanations to contextual tooltips that fire when the user is about to use the feature. Treat the 3-step 72% completion benchmark as a hard ceiling.
10+
11+
## Auto-start modal on page load
12+
13+
**Symptom**: Landing on `/demo` immediately pops a modal that covers the product.
14+
**Cause**: "Immediate engagement" interpretation that ignores user autonomy.
15+
**Fix**: Render the sandbox first. Add a non-blocking inline CTA ("Start the 30-second tour →") in a dismissible banner or card. User-initiated completion is 2–3× higher.
16+
17+
## Click-Next progression on action steps
18+
19+
**Symptom**: Tooltip says "Try dragging this bar" but has a "Next" button the user can click to advance without ever dragging.
20+
**Cause**: Default implementation in most tour libraries. Easier to build than event-driven.
21+
**Fix**: Listen for the actual event (drag-end, click, submit). Advance the tour only when the user performs the action. Disable or hide "Next" on action steps.
22+
23+
## Empty initial state
24+
25+
**Symptom**: Demo opens to "Click + to add your first item" with nothing else on screen.
26+
**Cause**: Developer-brain: fresh-account experience == demo experience.
27+
**Fix**: Seed the demo with realistic, pre-broken content. The user should walk in and see a *problem they can fix*, not a blank canvas they need to populate.
28+
29+
## Hidden skip / force-march tours
30+
31+
**Symptom**: No visible skip control; user can only X out of the modal or close the browser tab.
32+
**Cause**: "Don't let them leave the tour" reasoning.
33+
**Fix**: Every step has a visible "Skip" / "自由に触る" control, adjacent to the step counter. Skipping preserves the sandbox state. B2B tour completion averages ~5% — designing for skip is designing for reality.
34+
35+
## Skip resets the sandbox
36+
37+
**Symptom**: User skips mid-tour, everything they did is wiped to initial state.
38+
**Cause**: Conflation of "skip tour" with "reset demo".
39+
**Fix**: These are two different operations. Skip leaves state alone. Reset (a separate button in page chrome) wipes state. Never collapse them into one.
40+
41+
## Hard reset confirmation
42+
43+
**Symptom**: "Reset demo" button opens a modal asking the user to type "RESET" to confirm.
44+
**Cause**: Over-application of production-data safety patterns.
45+
**Fix**: Single-sentence confirmation ("デモの操作内容がクリアされます。よろしいですか?") with a plain Yes button. This is a sandbox — reload already resets.
46+
47+
## Narrative tooltip copy
48+
49+
**Symptom**: Tooltips read like marketing copy: "Welcome to the future of scheduling! Our revolutionary approach lets you…"
50+
**Cause**: Copy written by a marketer or written before the rest of the tour was designed.
51+
**Fix**: Verb-first, instructional, ≤30 words, points at the next action. "Drag the bar to change 高橋さん's end time to 16:00."
52+
53+
## Feature-label tooltip copy
54+
55+
**Symptom**: Tooltip title says "Shift Editor" and body says "This is the shift editor."
56+
**Cause**: Writer explained *what it is*, not *what to do with it*.
57+
**Fix**: Rewrite as an action prompt. Title: "Edit a shift." Body: "Drag the bar to change the time."
58+
59+
## 擬音語・抽象語の多用 (JP)
60+
61+
**Symptom**: 「ぱっと伝わります」「さらっと見られます」のような曖昧な表現。
62+
**Cause**: 雰囲気の良い日本語を書こうとして具体性を失う。
63+
**Fix**: 具体的な動作・数字に置き換える。「スタッフ全員にメール送信されます」「30秒で要点が見られます」。
64+
65+
## 体言止めを本文で多用 (JP)
66+
67+
**Symptom**: 本文が「シフトの編集。バーをドラッグで時間変更。」のように体言止めの連続。
68+
**Cause**: タイトル向けの指針を本文にも適用した。
69+
**Fix**: 本文は「バーをドラッグして時間を変えられます。」のように述語で終わる文に。体言止めはタイトル・見出しだけ。
70+
71+
## Full-screen celebration modal at end
72+
73+
**Symptom**: Last tour step fills the screen with "🎉 Tour complete! You've mastered the basics!"
74+
**Cause**: Over-ceremony; trying to manufacture a "moment".
75+
**Fix**: Replace with an inline tooltip + 1–2 CTAs on the same spot where the last action happened. Less ceremony, more momentum. Inline CTA outperforms celebration modal for SMB flows.
76+
77+
## Single end-of-tour CTA
78+
79+
**Symptom**: Last step shows only "Sign up now."
80+
**Cause**: Funnel focus without thinking about lower-intent users.
81+
**Fix**: Two CTAs — low-commitment + high-commitment. "Keep exploring" next to "Start free." Capture users at whatever intent level they arrive at.
82+
83+
## No mid-tour exit to CTA
84+
85+
**Symptom**: User hits aha at step 2, wants to sign up, has to finish the tour or skip first.
86+
**Cause**: Tour flow is a sealed box.
87+
**Fix**: Persistent top-bar CTA throughout the demo. Catches the aha-and-go user (more common than you think).
88+
89+
## Mobile dead-end
90+
91+
**Symptom**: User on phone loads `/demo`, sees "Best viewed on desktop" and a back button.
92+
**Cause**: Defer-to-desktop assumption.
93+
**Fix**: At minimum, a looping video walkthrough. Better: a simplified mobile sandbox. Best: email-capture "send me the desktop link." 52% of top-1% demos ship an optimized mobile experience — the industry is moving on.
94+
95+
## No analytics instrumented
96+
97+
**Symptom**: Demo is live but nobody can answer "what % complete the tour? where do they drop off?"
98+
**Cause**: "We'll add analytics later" that never comes.
99+
**Fix**: Instrument 5 events on day 1: `demo_loaded`, `tour_started`, `step_completed` (per step), `aha_reached`, `cta_clicked`. Without them, you cannot improve the demo.
100+
101+
## Demo treated as one-shot marketing artifact
102+
103+
**Symptom**: Demo shipped, never iterated on.
104+
**Cause**: Demo viewed as launch content, not as a product surface.
105+
**Fix**: Review the demo funnel monthly. The step-with-highest-drop-off is the one to fix — fixing it typically yields +10–15% completion.
106+
107+
## Demo data indistinguishable from real data
108+
109+
**Symptom**: Users confused whether their demo actions are affecting a real account.
110+
**Cause**: No visual cue that this is a sandbox.
111+
**Fix**: Subtle but persistent "Demo mode" indicator in the chrome (top bar stripe, corner badge). Don't be so loud that it kills immersion; just enough for the user to know nothing is at stake.
112+
113+
## Using real customer data as demo seed
114+
115+
**Symptom**: Demo shows "田中太郎" from an actual user's account.
116+
**Cause**: Lazy seeding that reuses production queries.
117+
**Fix**: Use obviously-fictional names (「居酒屋シフトリ」「田中次郎」) and data shaped for the problem/resolution scenario. Privacy risk and weird authenticity both disappear.

0 commit comments

Comments
 (0)