docs/plans/2026-03-22-advanced-onboarding-design.md
After the user selects a preset and creates their first task, there's no further guidance tailored to their chosen workflow. The "explore" hint is generic and doesn't teach preset-specific features (time tracking, planner, etc.).
Create a preset-specific welcome task on preset selection. The task title IS the instruction:
Instead of a generic explore hint, wait ~8s for the user to interact. If they don't:
.tour-playBtn) → "Click play to start tracking time".tour-plannerMenuBtn) → "Open the Planner to schedule your tasks"If the user interacts within 8s (adds/updates task, starts tracking, navigates), skip the nudge entirely — they figured it out.
"HINTS": {
"NUDGE_TODO": "Try checking off your first task!",
"NUDGE_TIME_TRACKER": "Click play to start tracking time",
"NUDGE_TIME_TRACKER_TOUCH": "Tap play to start tracking time",
"NUDGE_PRODUCTIVITY": "Open the Planner to schedule your tasks",
"SKIP_ARIA": "Dismiss hint"
}
The snackbar effect fires for every addTask action. Requires suppression via OnboardingHintService.isOnboardingInProgress() check. Additionally, example tasks created by ExampleTasksService also trigger snackbars.
ExampleTasksService creates 4 tutorial tasks in the Inbox when tasks.length === 0. With a welcome task, either:
Listening for "meaningful interaction" to cancel the inactivity timer is tricky:
NavigationEnd fires on initial page load → must skip(1) to ignoreaddTask from the welcome task itself could trigger if timing overlapsupdateTask fires during state hydration/replayPreset selection → 1s animation → 1s more → startAfterPresetSelection() → 8s inactivity → show nudge → 12s auto-dismiss. Many timeouts to manage and clean up.
With a welcome task, the user always has tasks, so the original "Click + to add your first task" hint never triggers. This means the pulsing + button (a strong visual anchor) is lost.
tourClass: 'tour-plannerMenuBtn' to planner nav item in magic-nav-config.service.ts.tour-playBtn is visible when time tracking is enabled (it's on the play-button component)task:first-of-type .check-done reliably targets the first task's checkboxExampleTasksService should be removed entirely in favor of welcome taskssrc/app/features/onboarding/onboarding-hint.service.ts — core hint orchestrationsrc/app/features/onboarding/onboarding-hint.component.ts — hint UI (positioning, pulse, arrows)src/app/features/onboarding/onboarding-presets.const.ts — preset definitions with hint metadatasrc/app/features/onboarding/onboarding-preset-selection.component.ts — welcome task creationsrc/app/features/tasks/store/task-ui.effects.ts — snackbar suppressionsrc/app/core/example-tasks/example-tasks.service.ts — example task creation guardsrc/app/core-ui/magic-side-nav/magic-nav-config.service.ts — planner tourClassImplement this after the basic onboarding flow is stable and validated with real users. The simple "add your first task" → "explore" flow covers 80% of the value with 20% of the complexity.