3.7 KiB
3.7 KiB
06 — Tour Replay Button
Author: CC (Block B design pass) Date: 2026-05-01 Status: AWAITING_RATIFICATION Estimate: ~60 LOC + ~1-1.5h wall-clock Touches: apps/web (1 file: SettingsApp Advanced tab + useOnboarding hook)
User story
As a returning user (or one who skipped onboarding), I want a "Replay tour" button in Settings → Advanced so I can re-trigger the post-wizard coachmark sequence without having to wipe my onboarding state or use a DEV-only URL parameter.
Acceptance criteria
- Settings → Advanced section contains a "Replay onboarding tour" button.
- Clicking it: clears the
waggle:tooltips_donelocalStorage flag AND thetooltipsDismissedfield ononboardingState, then triggers a re-render so OnboardingTooltips mounts. - Tour content: same 3 BASE_TIPS + CLOSING_TIP as the original tour, optionally including TEMPLATE_TIPS based on current active workspace's templateId.
- Button has a subtle confirmation toast ("Tour restarting…") so user knows the click registered.
- Optional: "Replay onboarding wizard" sibling button for full-flow restart (clears
waggle:onboardinglocalStorage too — DEV/Power users only? PM call).
UI sketch
Settings App > Advanced tab:
Section: Help & Tutorials
[icon] Replay onboarding tour
Show the 4-slide coachmark tour again. Useful if you want a refresher
on Waggle's core gestures.
[ Replay tour ]
[icon] Replay onboarding wizard (advanced)
Restart the full 8-step setup. Will not delete any data — your
workspaces, memories, and preferences are preserved.
[ Replay wizard ]
Data model
No new tables. Pure localStorage manipulation:
- Tour replay:
localStorage.removeItem('waggle:tooltips_done')+ update onboarding statetooltipsDismissed: false. - Wizard replay: clear
waggle:onboardingstorage entirely; reload page (or setstate.completed = false).
Implementation notes
useOnboardingalready has areset()function (line 142-146) — use it for the wizard replay path.- Add a new
replayTour()function: clear localStorage tour flag + setOnboardingState(prev => ({ ...prev, tooltipsDismissed: false })). - SettingsApp's Advanced tab exists; just add a section.
- Toast affordance: existing
useToasthook.
Estimate
replayTour()in useOnboarding: ~10 LOC- SettingsApp section: ~30 LOC
- Tests (localStorage cleared, state flipped, render): ~20 LOC
- Total ~60 LOC, ~1-1.5h with verification.
Risks + open questions
- Tour vs wizard distinction — users may not know the difference. Settings copy should make it clear: tour = post-launch coachmarks, wizard = full setup flow. Done above.
- Wizard replay edge cases — if user already has 5 workspaces and a year of memory, re-running wizard is confusing. Either: (a) hide wizard replay for non-DEV builds, (b) gate behind double-confirm, (c) skip the workspace-creation step on replay. Recommend (b) for v1.
- Tour replay during ongoing tour — defensive: if Tour is already mounted, click is no-op or restarts the tour from step 0.
- Cross-tab sync — multi-window users: replay click in one window should re-render Tour in all windows. Existing
waggle:onboarding-syncevent handles this for state; tour localStorage clear needs equivalent broadcast.
Out of scope (v1)
- Per-workspace tour variants.
- Custom tour authoring (Power users design their own coachmark sequences).
- Onboarding wizard partial-replay (resume at step 5 only).
- Analytics on which sections of tour users replay most often.
PM decisions needed
- GO / MODIFY / SKIP
- Include "Replay wizard" button alongside tour, or tour-only?
- Confirm dialog for wizard replay (yes / skip)
- Toast copy ("Tour restarting…" / "Coachmarks reset" / silent)