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 */}
-
+