Skip to content

Commit 6ab6477

Browse files
authored
Merge pull request #36 from ZDOSS/codex/new-user-tutorial
Add guided new user tutorial
2 parents a26d838 + 8d996a7 commit 6ab6477

16 files changed

Lines changed: 918 additions & 2 deletions

AI.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,14 @@ The core domain in `packages/core/src/domain/` covers the entities the plan call
676676
- replacing the stale read-only flow report with `docs/gph-user-flows-review.md`, updating `Readme.md`, and adding focused regressions across AppShell, CommandPalette, WorkItemModal, ProjectsListView, BoardView, TableView, and RoadmapView
677677
- verifying the finished pass with 53 focused UI tests, the complete 230-test repository suite, all workspace TypeScript checks, a successful production web build, and matched-state desktop/mobile browser comparisons
678678
- aligning the Playwright project bootstrap with the calmer launcher behavior through a shared `createProjectFromLauncher()` helper, so E2E coverage chooses `New project` before submitting the creation modal instead of depending on the removed automatic first-run modal
679+
- added the guided New user tutorial by:
680+
- placing a `New user tutorial` link directly beneath the launcher’s Demo project explanation and registering `/tutorial` in both the web and desktop shells without treating it as an active project route
681+
- adding a focused tutorial landing surface that sets expectations, lists the covered workspace areas, and refuses to replace a dirty or otherwise unsaved active project
682+
- opening a disposable `buildDemoProject()` bundle named `Tutorial Project`, keeping its storage trust unsaved, and clearly explaining that tutorial changes remain sample data unless explicitly exported
683+
- adding an external tutorial state store persisted in `sessionStorage`, tied to the exact generated tutorial project id so the guide ends instead of leaking into another project
684+
- mounting a non-modal, keyboard-readable tutorial panel in `AppShell` with 13 steps, progress semantics, Back/Next/Exit controls, responsive bottom-sheet behavior, and real route transitions across Overview, Board, Backlog, Table, Roadmap, Calendar, Docs, Bug Triage, My Work, Search/commands, Trash, and Settings
685+
- synchronizing the wizard with manual sidebar navigation so users can skip ahead or revisit a feature without being forced back to the previous route
686+
- adding focused launcher/tutorial component coverage plus a full Playwright journey that advances through every tutorial stop and verifies the final handoff back to Overview
679687

680688
## Open follow-on planning
681689

Readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ For real project work, run the repo locally or use the future release builds.
4444
Grillo is past the skeleton stage. The current app includes:
4545

4646
- Workspace launcher with new, open/import, demo, recent-project, template preview, explicit browser-vs-folder storage guidance, and a calm first-run state that waits for the user to choose a path.
47+
- A guided New user tutorial beneath the demo entry that opens safe sample data and walks through all 12 core workspace surfaces in a resumable 13-step wizard.
4748
- Overview, board, backlog, table, roadmap, calendar, docs, bug triage, my work, search, trash, and settings surfaces.
4849
- Board-local column management for adding unmapped workflow statuses, removing columns without deleting their statuses or work items, and creating a new categorized status and column together.
4950
- Explicit save-state UI in the project header, including save destination, dirty state, save failures, manual save/retry, switch project, and guarded close-project actions.

apps/desktop/src/main.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
ProjectsListView,
1515
OpenProjectView,
1616
DemoFolderView,
17+
NewUserTutorialView,
1718
ThemeProvider,
1819
useRestoreProjectSession
1920
} from "@gph/ui";
@@ -35,6 +36,7 @@ function App() {
3536
<Route path="/projects" element={<ProjectsListView />} />
3637
<Route path="/open" element={<OpenProjectView />} />
3738
<Route path="/demo" element={<DemoFolderView />} />
39+
<Route path="/tutorial" element={<NewUserTutorialView />} />
3840
<Route path="/*" element={<ProjectRouter />} />
3941
</Routes>
4042
</AppShell>

apps/web/src/main.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
ProjectsListView,
1515
OpenProjectView,
1616
DemoFolderView,
17+
NewUserTutorialView,
1718
ThemeProvider,
1819
useRestoreProjectSession
1920
} from "@gph/ui";
@@ -42,6 +43,7 @@ function App() {
4243
<Route path="/projects" element={<ProjectsListView />} />
4344
<Route path="/open" element={<OpenProjectView />} />
4445
<Route path="/demo" element={<DemoFolderView />} />
46+
<Route path="/tutorial" element={<NewUserTutorialView />} />
4547
<Route path="/*" element={<ProjectRouter />} />
4648
</Routes>
4749
</AppShell>

docs/gph-user-flows-review.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
**Review date:** 2026-07-16
44

5+
**Feature update:** 2026-07-17 — added the guided New user tutorial described below.
6+
57
**Scope:** The complete browser product journey, reviewed in the running app at desktop and mobile widths, followed by implementation and regression verification.
68

79
**Primary environment:** Local web app, demo workspace, 1280 x 720 desktop viewport, and 390 x 844 mobile viewport.
@@ -16,14 +18,15 @@ The audit did expose several interaction-level problems that source review alone
1618

1719
### 1. Workspace launcher, first run, open/import, and demo
1820

19-
**Journey:** Open Grillo -> review launcher -> create a project, open/import a bundle, or enter the demo -> arrive at Overview.
21+
**Journey:** Open Grillo -> review launcher -> create a project, open/import a bundle, enter the demo, or start the New user tutorial -> arrive at Overview.
2022

2123
**Health after this pass:** Good.
2224

2325
- The launcher now remains visible on first run instead of opening `New project` automatically. The visible launcher already explains all three entry paths, so the modal is now shown only after an explicit action.
2426
- When no project is open, the sidebar contains only Projects, Open, and Demo. Project views and Settings no longer lead users into guarded routes that cannot work yet.
2527
- Closing an unsaved demo still uses the existing confirmation dialog, but confirming now returns to the clean launcher without immediately reopening project creation.
2628
- Disabled primary actions now look inactive instead of retaining the full green emphasis of an available action.
29+
- The Demo project explanation now includes a `New user tutorial` link. Its landing page opens a disposable demo only when existing unsaved work is protected, then a 13-step wizard moves through every core project surface with visible progress, Back/Next/Exit controls, and manual sidebar-route synchronization.
2730

2831
### 2. Create, save, switch, and close project
2932

@@ -136,6 +139,7 @@ The audit did expose several interaction-level problems that source review alone
136139
- Reflowed work-item metadata for mobile and replaced native multi-select labels with checkbox chips.
137140
- Shortened Bug Triage action copy without losing item-specific accessible labels.
138141
- Improved disabled primary-action styling and mobile Overview density.
142+
- Added the safe demo-backed New user tutorial entry, landing page, persistent route-aware wizard, and responsive desktop/mobile presentation.
139143

140144
## Verification
141145

packages/ui/src/AppShell.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { Button, ConfirmDialog, HelpTip, IconButton, InlineAlert, ToastProvider,
3636
import { PROJECT_NAV_ITEMS } from "./nav-config";
3737
import { useWorkspaceStore } from "./store/workspace-store";
3838
import { hasRegisteredSavedRoute, savedViewsForBundle, viewRoute } from "./views/planning/view-helpers";
39+
import { NewUserTutorial } from "./tutorial";
3940

4041
export type AppShellProps = {
4142
appMode: "web" | "desktop";
@@ -455,7 +456,8 @@ function AppShellFrame({ appMode, appDistribution = "local", children }: AppShel
455456
location.pathname !== "/" &&
456457
!location.pathname.startsWith("/projects") &&
457458
!location.pathname.startsWith("/open") &&
458-
!location.pathname.startsWith("/demo"),
459+
!location.pathname.startsWith("/demo") &&
460+
!location.pathname.startsWith("/tutorial"),
459461
[location.pathname]
460462
);
461463

@@ -664,6 +666,7 @@ function AppShellFrame({ appMode, appDistribution = "local", children }: AppShel
664666
/>
665667
) : null}
666668

669+
<NewUserTutorial activeProjectId={bundle?.project.id ?? null} />
667670
<CommandPalette />
668671
</div>
669672
);

packages/ui/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ export * from "./views/search";
2626
export * from "./views/settings";
2727
export * from "./views/projects";
2828
export * from "./work-item";
29+
export * from "./tutorial";

0 commit comments

Comments
 (0)