From 8590a5e4830f29a391dd855e16953ef6b07dc3db Mon Sep 17 00:00:00 2001 From: Michael Suchacz <203725896+ibetitsmike@users.noreply.github.com> Date: Sat, 29 Nov 2025 16:02:01 +0000 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=A4=96=20feat:=20add=20tutorial=20too?= =?UTF-8?q?ltip=20system=20for=20new=20user=20onboarding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduce a guided tutorial system that shows tooltips on first use: - Settings tooltip on app launch (points to gear icon) - Creation flow tooltips (Model, Exec/Plan, From branch, Runtime) - Workspace tutorial (Terminal icon) Each sequence can be dismissed individually, and users can opt to disable all tutorials via 'Don't show again' option. Implementation: - TutorialState persisted in localStorage with completion tracking - TutorialProvider context manages active sequence and step progression - TutorialTooltip renders portal-based tooltip with highlight effect - data-tutorial attributes on target elements for clean separation _Generated with mux_ --- src/browser/App.tsx | 9 +- .../components/ChatInput/CreationControls.tsx | 12 +- src/browser/components/ChatInput/index.tsx | 25 +- src/browser/components/SettingsButton.tsx | 1 + src/browser/components/TitleBar.tsx | 11 + src/browser/components/TutorialTooltip.tsx | 224 ++++++++++++++++++ src/browser/components/WorkspaceHeader.tsx | 45 ++-- src/browser/contexts/TutorialContext.tsx | 182 ++++++++++++++ src/browser/styles/globals.css | 19 ++ src/common/constants/storage.ts | 18 ++ tests/e2e/electronTest.ts | 14 ++ 11 files changed, 539 insertions(+), 21 deletions(-) create mode 100644 src/browser/components/TutorialTooltip.tsx create mode 100644 src/browser/contexts/TutorialContext.tsx diff --git a/src/browser/App.tsx b/src/browser/App.tsx index 7de592e5e..e5c6d5151 100644 --- a/src/browser/App.tsx +++ b/src/browser/App.tsx @@ -36,6 +36,7 @@ import { useStartWorkspaceCreation, getFirstProjectPath } from "./hooks/useStart import { SettingsProvider, useSettings } from "./contexts/SettingsContext"; import { SettingsModal } from "./components/Settings/SettingsModal"; +import { TutorialProvider } from "./contexts/TutorialContext"; const THINKING_LEVELS: ThinkingLevel[] = ["off", "low", "medium", "high"]; @@ -653,9 +654,11 @@ function App() { return ( - - - + + + + + ); diff --git a/src/browser/components/ChatInput/CreationControls.tsx b/src/browser/components/ChatInput/CreationControls.tsx index dd231843b..e728a1e1d 100644 --- a/src/browser/components/ChatInput/CreationControls.tsx +++ b/src/browser/components/ChatInput/CreationControls.tsx @@ -23,7 +23,11 @@ export function CreationControls(props: CreationControlsProps) {
{/* Trunk Branch Selector */} {props.branches.length > 0 && ( -
+
@@ -39,7 +43,11 @@ export function CreationControls(props: CreationControlsProps) { )} {/* Runtime Selector */} -
+