Skip to content

Replace guided onboarding with welcome video#655

Merged
arul28 merged 2 commits into
mainfrom
ade/onboarding-flows-bb334dae
Jun 28, 2026
Merged

Replace guided onboarding with welcome video#655
arul28 merged 2 commits into
mainfrom
ade/onboarding-flows-bb334dae

Conversation

@arul28

@arul28 arul28 commented Jun 28, 2026

Copy link
Copy Markdown
Owner

Summary

Describe the change.

What Changed

Key files and behaviors.

Validation

How you tested.

Risks

Anything to watch.

ADE   Open in ADE  ·  ade/onboarding-flows-bb334dae branch  ·  PR #655

Summary by CodeRabbit

  • New Features

    • Added a welcome video experience with replay support and saved view state.
    • Expanded in-app help with glossary-based help chips and richer “Did you know?” tips.
    • Improved tab and tooltip guidance with more contextual documentation links.
  • Bug Fixes

    • Updated content security settings so the welcome video can load properly from supported video hosts.
    • Simplified onboarding interactions to reduce unwanted tour-related interruptions.

Greptile Summary

This PR replaces the multi-step tour/wizard onboarding system (~8 400 lines removed) with a lightweight welcome video gate backed by two new IPC endpoints (getWelcomeVideoState / markWelcomeVideoSeen), stored in global state with version-aware normalization that resets on video ID or version change.

  • Welcome video gate: A new WelcomeVideoGate component shows a YouTube nocookie embed on first launch; state is persisted per-machine in globalState.ts and is reset when ADE_WELCOME_VIDEO_VERSION bumps. A custom DOM event (ade:welcome-video:replay) lets the Help menu trigger a replay without re-querying IPC.
  • Help surface improvements: DidYouKnow gains 20+ new product-area hints and no longer depends on onboardingEnabled (it now gates only on didYouKnowEnabled); TabNav wraps each item in SmartTooltip with per-tab descriptions and doc links; HelpChip glossary tracking becomes fully fire-and-forget.
  • Cleanup: All tour, wizard, tutorial, and step-builder modules are deleted; the onboardingStore is removed; IPC channels drop from 15 onboarding channels to 2; the CSP frame-src is extended to include YouTube embed hosts.

Confidence Score: 5/5

Safe to merge — the main change is a large deletion of the old tour/wizard system with a clean, well-tested replacement; the new IPC endpoints, normalization logic, and state schema are straightforward

All new code paths (welcome video gate, IPC handlers, state normalization) are covered by tests; the normalization correctly resets state on version bump; the fire-and-forget markWelcomeVideoSeen call is an acceptable tradeoff for perceived responsiveness on a one-time action; the only finding is that the YouTube fullscreen button won't work due to a missing allow-fullscreen in the sandbox, which is a minor cosmetic limitation rather than a functional regression

No files require special attention beyond the single iframe sandbox fix in WelcomeVideoGate.tsx

Important Files Changed

Filename Overview
apps/desktop/src/renderer/components/onboarding/WelcomeVideoGate.tsx New component that shows a welcome video dialog on first launch; iframe sandbox is missing allow-fullscreen so the YouTube fullscreen button won't work
apps/desktop/src/main/rendererCsp.ts Adds https://www.youtube-nocookie.com and https://www.youtube.com to frame-src for the welcome video embed; https://www.youtube.com is broader than the nocookie embed strictly requires
apps/desktop/src/main/services/ipc/registerIpc.ts Removes tour/tutorial IPC handlers and adds getWelcomeVideoState / markWelcomeVideoSeen; normalization logic correctly resets state when video ID or version changes
apps/desktop/src/main/services/onboarding/onboardingService.ts Strips the full tour/wizard/tutorial service down to a minimal help-state service; retains the legacy onboarding:tourProgress storage key to preserve existing glossary terms on upgrade
apps/desktop/src/shared/welcomeVideo.ts New shared constants for the welcome video ID, version, embed URL, and replay event; cleanly centralised so the IPC handler and renderer share a single source of truth
apps/desktop/src/renderer/components/onboarding/OnboardingBootstrap.tsx Drastically simplified to just WelcomeVideoGate + conditional DidYouKnow; suppresses the hint while the video check is in flight to avoid both showing at the same time
apps/desktop/src/renderer/components/onboarding/DidYouKnow.tsx Expanded hint set with richer product-area tips; removed activeTourId and onboardingEnabled dependencies so hints now gate only on didYouKnowEnabled
apps/desktop/src/renderer/components/app/TabNav.tsx Wraps each nav item in SmartTooltip with per-tab descriptions and doc links; correctly handles both disabled and enabled states
apps/desktop/src/shared/ipc.ts Removes 13 tour/tutorial IPC channels and adds 2 welcome-video channels; clean removal with no orphaned references
apps/desktop/src/shared/types/core.ts Replaces the complex OnboardingTourProgress type hierarchy with the minimal AppWelcomeVideoState and OnboardingHelpState
apps/desktop/src/renderer/components/onboarding/HelpMenu.tsx Removes tour-replay logic; replaces Replay Welcome Wizard with Replay Welcome Video which dispatches ADE_WELCOME_VIDEO_REPLAY_EVENT

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant R as Renderer (WelcomeVideoGate)
    participant P as Preload
    participant M as Main (registerIpc)
    participant G as globalState.json

    R->>P: getWelcomeVideoState()
    P->>M: IPC appGetWelcomeVideoState
    M->>G: readGlobalState()
    G-->>M: "GlobalState { welcomeVideo? }"
    M-->>P: normalizeWelcomeVideoState(welcomeVideo)
    P-->>R: AppWelcomeVideoState

    alt "completedAt == null and dismissedAt == null"
        R->>R: setVisible(true) → show dialog + YouTube iframe
        R->>P: markWelcomeVideoSeen(reason)
        P->>M: "IPC appMarkWelcomeVideoSeen { reason }"
        M->>G: "writeGlobalState({ welcomeVideo: next })"
        M-->>P: updated AppWelcomeVideoState
        P-->>R: fire-and-forget
        R->>R: setVisible(false)
    else already seen
        R->>R: setVisible(false) → skip dialog
    end

    note over R: ADE_WELCOME_VIDEO_REPLAY_EVENT
    R->>R: window.dispatchEvent(replay) → setVisible(true)
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant R as Renderer (WelcomeVideoGate)
    participant P as Preload
    participant M as Main (registerIpc)
    participant G as globalState.json

    R->>P: getWelcomeVideoState()
    P->>M: IPC appGetWelcomeVideoState
    M->>G: readGlobalState()
    G-->>M: "GlobalState { welcomeVideo? }"
    M-->>P: normalizeWelcomeVideoState(welcomeVideo)
    P-->>R: AppWelcomeVideoState

    alt "completedAt == null and dismissedAt == null"
        R->>R: setVisible(true) → show dialog + YouTube iframe
        R->>P: markWelcomeVideoSeen(reason)
        P->>M: "IPC appMarkWelcomeVideoSeen { reason }"
        M->>G: "writeGlobalState({ welcomeVideo: next })"
        M-->>P: updated AppWelcomeVideoState
        P-->>R: fire-and-forget
        R->>R: setVisible(false)
    else already seen
        R->>R: setVisible(false) → skip dialog
    end

    note over R: ADE_WELCOME_VIDEO_REPLAY_EVENT
    R->>R: window.dispatchEvent(replay) → setVisible(true)
Loading

Comments Outside Diff (1)

  1. apps/desktop/src/main/rendererCsp.ts, line 9 (link)

    P2 security https://www.youtube.com in frame-src broader than needed

    The welcome video iframe uses https://www.youtube-nocookie.com/embed/... exclusively — the privacy-enhanced embed domain does not load sub-frames back from www.youtube.com. Including it in frame-src permits the main YouTube site to be framed in the renderer, which is more permissive than required and expands the CSP surface unnecessarily. Removing https://www.youtube.com while keeping https://www.youtube-nocookie.com would be sufficient for the embed to work.

    Prompt To Fix With AI
    This is a comment left during a code review.
    Path: apps/desktop/src/main/rendererCsp.ts
    Line: 9
    
    Comment:
    **`https://www.youtube.com` in `frame-src` broader than needed**
    
    The welcome video iframe uses `https://www.youtube-nocookie.com/embed/...` exclusively — the privacy-enhanced embed domain does not load sub-frames back from `www.youtube.com`. Including it in `frame-src` permits the main YouTube site to be framed in the renderer, which is more permissive than required and expands the CSP surface unnecessarily. Removing `https://www.youtube.com` while keeping `https://www.youtube-nocookie.com` would be sufficient for the embed to work.
    
    How can I resolve this? If you propose a fix, please make it concise.

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

    Fix in Claude Code

Reviews (2): Last reviewed commit: "ship: iteration 1 - fix desktop shard 2" | Re-trigger Greptile

@vercel

vercel Bot commented Jun 28, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
ade Ignored Ignored Preview Jun 28, 2026 6:47pm

@mintlify

mintlify Bot commented Jun 28, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
ade-ac1c6011 🟢 Ready View Preview Jun 28, 2026, 6:24 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@arul28

arul28 commented Jun 28, 2026

Copy link
Copy Markdown
Owner Author

@copilot review but do not make fixes

@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Removes the entire tour/wizard/tutorial onboarding system (registry, TourController, all tour definitions, step builders, TourHost/TourOverlay/TourStep, WelcomeWizard, onboardingStore, and fx animation components). Replaces it with a WelcomeVideoGate component backed by new AppWelcomeVideoState IPC, a simplified OnboardingHelpState for glossary tracking, tab tooltips in TabNav, and an expanded DidYouKnow hints surface.

Changes

Tour/Wizard Removal and Welcome Video Gate

Layer / File(s) Summary
Shared types and IPC channel contracts
apps/desktop/src/shared/types/core.ts, apps/desktop/src/shared/welcomeVideo.ts, apps/desktop/src/shared/ipc.ts
Adds AppWelcomeVideoState and OnboardingHelpState types, removes old tour/tutorial types, introduces the welcome video constants module, and updates the IPC channel map to add appGetWelcomeVideoState/appMarkWelcomeVideoSeen while removing all tour IPC channels.
Backend: GlobalState, onboardingService, and IPC handlers
apps/desktop/src/main/services/state/globalState.ts, apps/desktop/src/main/services/onboarding/onboardingService.ts, apps/desktop/src/main/services/onboarding/onboardingService.test.ts, apps/desktop/src/main/services/ipc/registerIpc.ts, apps/desktop/src/main/services/adeActions/registry.ts
Extends GlobalState with welcomeVideo, rewrites onboardingService to persist OnboardingHelpState (dropping all tour-progress storage), and adds normalizeWelcomeVideoState plus IPC handlers for get/mark welcome video seen and markGlossaryTermSeen returning OnboardingHelpState.
Preload bridge: welcome video and help state APIs
apps/desktop/src/preload/global.d.ts, apps/desktop/src/preload/preload.ts, apps/desktop/src/preload/preload.test.ts
Updates type declarations and context bridge to expose getWelcomeVideoState, markWelcomeVideoSeen, and updated markGlossaryTermSeen returning OnboardingHelpState; removes all tour/wizard bridge methods and their tests; adds preload tests for the new welcome video APIs.
WelcomeVideoGate component and OnboardingBootstrap rewire
apps/desktop/src/renderer/components/onboarding/WelcomeVideoGate.tsx, apps/desktop/src/renderer/components/onboarding/WelcomeVideoGate.test.tsx, apps/desktop/src/renderer/components/onboarding/OnboardingBootstrap.tsx
Adds WelcomeVideoGate, a Radix Dialog that gates a welcome video iframe based on persisted seen state and a replay custom event; rewrites OnboardingBootstrap to mount it instead of WelcomeWizard/TourHost; covers both unseen and replay flows in tests.
Delete all tour/wizard/fx infrastructure
apps/desktop/src/renderer/onboarding/registry.ts, apps/desktop/src/renderer/onboarding/TourController.ts, apps/desktop/src/renderer/onboarding/tours/*, apps/desktop/src/renderer/onboarding/stepBuilders/*, apps/desktop/src/renderer/onboarding/tourGuards.ts, apps/desktop/src/renderer/onboarding/waitForTarget.ts, apps/desktop/src/renderer/components/onboarding/tour/..., apps/desktop/src/renderer/components/onboarding/fx/*, apps/desktop/src/renderer/components/onboarding/illustrations/..., apps/desktop/src/renderer/components/onboarding/WelcomeWizard.tsx, apps/desktop/src/renderer/state/onboardingStore.ts, apps/desktop/src/renderer/index.css
Removes the tour registry, all tour definitions and step builders, TourHost/TourOverlay/TourStep, WelcomeWizard, onboardingStore, all fx animation components, WelcomeIllustrations, and onboarding CSS keyframes. Empties the fx/index barrel.
Passive help surfaces: TabNav, DidYouKnow, HelpMenu, HelpChip, SmartTooltip
apps/desktop/src/renderer/components/app/TabNav.tsx, apps/desktop/src/renderer/components/onboarding/DidYouKnow.tsx, apps/desktop/src/renderer/components/onboarding/HelpMenu.tsx, apps/desktop/src/renderer/components/onboarding/HelpChip.tsx, apps/desktop/src/renderer/components/ui/SmartTooltip.tsx, apps/desktop/src/renderer/onboarding/docsLinks.ts
Adds TAB_TOOLTIP_BY_PATH driven SmartTooltip to every tab in TabNav; expands DEFAULT_HINTS with title support and many new entries in DidYouKnow; replaces tour items with "Replay Welcome Video" in HelpMenu; makes HelpChip.markGlossaryTermSeen fire-and-forget; removes tour gating from SmartTooltip; adds new docs URL keys.
Remove tour event listeners from page components
apps/desktop/src/renderer/components/cto/CtoPage.tsx, apps/desktop/src/renderer/components/lanes/LanesPage.tsx, apps/desktop/src/renderer/components/prs/detail/PrDetailPane.tsx, apps/desktop/src/renderer/components/app/CommandPalette.tsx, apps/desktop/src/renderer/components/terminals/..., apps/desktop/src/renderer/lib/dialogBus.ts, apps/desktop/src/renderer/lib/useDialogBus.ts
Strips ade:tour-* custom event listeners from CtoPage, LanesPage, PrDetailPane, and CommandPalette; removes suppressTourDistractions from rebase-suggestion memos; updates comment wording from "tour anchor" to "stable automation anchor".
Browser mock and CSP/test fixes
apps/desktop/src/renderer/browserMock.ts, apps/desktop/src/main/rendererCsp.ts, apps/desktop/src/main/rendererCsp.test.ts, apps/desktop/src/main/services/usage/usageTrackingService.test.ts
Extends browserMock.ts with localStorage-backed welcome video state; adds YouTube embed hosts to frame-src CSP with a matching test; fixes usage-tracking tests to use dynamic timestamps instead of fixed dates.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

  • arul28/ADE#120: Both PRs modify TabNav.tsx — the main PR adds SmartTooltip and TAB_TOOLTIP_BY_PATH while that PR reorders the mainItems tab configuration.
  • arul28/ADE#197: Directly overlaps at the tour definition level — the main PR deletes prsTour.ts, firstJourneyTour.ts, and all tour infrastructure that PR modified.
  • arul28/ADE#243: Both PRs modify the app's frame-src CSP allowlist to permit specific external iframe origins.

Suggested labels

desktop

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 17.65% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: guided onboarding was replaced with a welcome video.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ade/onboarding-flows-bb334dae

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/desktop/src/main/services/onboarding/onboardingService.ts (1)

30-42: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Trim glossary ids while normalizing.

Line 36 only checks v.length > 0, so " Lane " and "Lane" survive as different ids even though markGlossaryTermSeen() later canonicalizes new input with trim(). That makes upgraded or hand-edited state non-idempotent.

Proposed fix
   const seen = Array.isArray(r.glossaryTermsSeen)
     ? Array.from(
         new Set(
-          r.glossaryTermsSeen.filter((v): v is string => typeof v === "string" && v.length > 0),
+          r.glossaryTermsSeen
+            .map((v) => (typeof v === "string" ? v.trim() : ""))
+            .filter((v): v is string => v.length > 0),
         ),
       )
     : [];
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/desktop/src/main/services/onboarding/onboardingService.ts` around lines
30 - 42, normalizeHelpState currently deduplicates glossaryTermsSeen without
trimming, so values like " Lane " and "Lane" stay as separate ids. Update the
normalization in normalizeHelpState to trim each string before
filtering/deduping, and use the trimmed value when building the seen array so it
stays consistent with markGlossaryTermSeen().
🧹 Nitpick comments (1)
apps/desktop/src/preload/global.d.ts (1)

649-652: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Make reason required on the preload contract.

registerIpc.ts writes dismissedAt whenever this arg is omitted, so the optional type here lets a caller accidentally suppress the gate without any TS error. Requiring the reason makes the preload contract match the persisted behavior.

Proposed fix
         markWelcomeVideoSeen: (
-          reason?: "completed" | "dismissed",
+          reason: "completed" | "dismissed",
         ) => Promise<AppWelcomeVideoState>;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/desktop/src/preload/global.d.ts` around lines 649 - 652, The preload
contract for markWelcomeVideoSeen currently allows reason to be omitted, which
does not match the persisted behavior in registerIpc.ts. Update the
AppWelcomeVideoState API declaration in global.d.ts so markWelcomeVideoSeen
requires a reason argument, and keep the allowed values limited to "completed"
and "dismissed" to align the preload signature with the IPC implementation.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/desktop/src/main/rendererCsp.test.ts`:
- Around line 40-45: The renderer CSP test in rendererCsp.test.ts only checks
that the two YouTube frame hosts are present and that blanket https: is absent,
so extra allowed hosts could still pass. Tighten the assertion around
frameSrc/frameTokens to compare the external https:// allowlist against the
exact expected set for the frame-src directive, ensuring no additional external
frame origins are permitted.

In `@apps/desktop/src/main/services/ipc/registerIpc.ts`:
- Around line 1656-1663: The welcome video state normalization is keeping the
original timestamp string even after a trim check, so whitespace and invalid
values can persist in `normalizeWelcomeVideoState`. Update the `completedAt` and
`dismissedAt` handling to return a trimmed value only when it is a non-empty
valid date string, and otherwise return null so corrupted timestamps cannot
suppress the welcome gate. Use a small helper like
`normalizeWelcomeVideoTimestamp` near `normalizeWelcomeVideoState` and apply it
to both fields.

In `@apps/desktop/src/renderer/browserMock.ts`:
- Line 3570: The browser mock’s markGlossaryTermSeen mapping is returning the
unchanged BROWSER_MOCK_HELP_STATE, so glossary terms are not actually recorded
as seen. Update the mock in browserMock.ts so the markGlossaryTermSeen handler
mutates or derives a new help state that includes the newly seen term, instead
of using resolvedArg(BROWSER_MOCK_HELP_STATE) directly.

In `@apps/desktop/src/renderer/components/app/TabNav.tsx`:
- Around line 165-190: The disabled-tab branch in TabNav uses a non-focusable
div inside SmartTooltip, so the disabled state and tooltip text are only
available on hover. Update the isActiveAllowed false path to use a
keyboard-focusable element or disabled control and add the proper disabled
semantics/ARIA so TabNav items remain discoverable by keyboard and screen-reader
users. Keep the fix localized to the SmartTooltip wrapper and the tab item
rendering for it.to/it.label.

In `@apps/desktop/src/renderer/components/onboarding/WelcomeVideoGate.tsx`:
- Around line 235-240: The welcome video iframe in WelcomeVideoGate should be
hardened by reducing third-party capabilities and adding a sandbox boundary.
Update the iframe attributes to remove unnecessary permissions like
clipboard-write, sensors, and web-share, and add a restrictive sandbox
configuration that still allows required YouTube playback in the Electron
renderer. Verify the video still loads and plays correctly after tightening the
iframe permissions.

---

Outside diff comments:
In `@apps/desktop/src/main/services/onboarding/onboardingService.ts`:
- Around line 30-42: normalizeHelpState currently deduplicates glossaryTermsSeen
without trimming, so values like " Lane " and "Lane" stay as separate ids.
Update the normalization in normalizeHelpState to trim each string before
filtering/deduping, and use the trimmed value when building the seen array so it
stays consistent with markGlossaryTermSeen().

---

Nitpick comments:
In `@apps/desktop/src/preload/global.d.ts`:
- Around line 649-652: The preload contract for markWelcomeVideoSeen currently
allows reason to be omitted, which does not match the persisted behavior in
registerIpc.ts. Update the AppWelcomeVideoState API declaration in global.d.ts
so markWelcomeVideoSeen requires a reason argument, and keep the allowed values
limited to "completed" and "dismissed" to align the preload signature with the
IPC implementation.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 359bf799-f015-41fa-8524-0fd18ba0e8ea

📥 Commits

Reviewing files that changed from the base of the PR and between 5d8014f and 54d8ae7.

⛔ Files ignored due to path filters (16)
  • apps/desktop/src/renderer/assets/onboarding/automations-hero.svg is excluded by !**/*.svg
  • apps/desktop/src/renderer/assets/onboarding/cto-hero.svg is excluded by !**/*.svg
  • apps/desktop/src/renderer/assets/onboarding/files-hero.svg is excluded by !**/*.svg
  • apps/desktop/src/renderer/assets/onboarding/ghost-cursor.svg is excluded by !**/*.svg
  • apps/desktop/src/renderer/assets/onboarding/graph-hero.svg is excluded by !**/*.svg
  • apps/desktop/src/renderer/assets/onboarding/history-hero.svg is excluded by !**/*.svg
  • apps/desktop/src/renderer/assets/onboarding/lanes-hero.svg is excluded by !**/*.svg
  • apps/desktop/src/renderer/assets/onboarding/prs-hero.svg is excluded by !**/*.svg
  • apps/desktop/src/renderer/assets/onboarding/run-hero.svg is excluded by !**/*.svg
  • apps/desktop/src/renderer/assets/onboarding/settings-hero.svg is excluded by !**/*.svg
  • apps/desktop/src/renderer/assets/onboarding/work-hero.svg is excluded by !**/*.svg
  • docs/ARCHITECTURE.md is excluded by !docs/**
  • docs/features/cto/README.md is excluded by !docs/**
  • docs/features/onboarding-and-settings/README.md is excluded by !docs/**
  • docs/features/onboarding-and-settings/configuration-schema.md is excluded by !docs/**
  • docs/features/onboarding-and-settings/first-run.md is excluded by !docs/**
📒 Files selected for processing (88)
  • apps/desktop/src/main/rendererCsp.test.ts
  • apps/desktop/src/main/rendererCsp.ts
  • apps/desktop/src/main/services/adeActions/registry.ts
  • apps/desktop/src/main/services/ipc/registerIpc.ts
  • apps/desktop/src/main/services/onboarding/onboardingService.test.ts
  • apps/desktop/src/main/services/onboarding/onboardingService.ts
  • apps/desktop/src/main/services/state/globalState.ts
  • apps/desktop/src/main/services/usage/usageTrackingService.test.ts
  • apps/desktop/src/preload/global.d.ts
  • apps/desktop/src/preload/preload.test.ts
  • apps/desktop/src/preload/preload.ts
  • apps/desktop/src/renderer/assets/onboarding/README.md
  • apps/desktop/src/renderer/browserMock.ts
  • apps/desktop/src/renderer/components/app/CommandPalette.test.tsx
  • apps/desktop/src/renderer/components/app/CommandPalette.tsx
  • apps/desktop/src/renderer/components/app/TabNav.tsx
  • apps/desktop/src/renderer/components/cto/CtoPage.tsx
  • apps/desktop/src/renderer/components/lanes/LanesPage.tsx
  • apps/desktop/src/renderer/components/onboarding/DidYouKnow.tsx
  • apps/desktop/src/renderer/components/onboarding/HelpChip.tsx
  • apps/desktop/src/renderer/components/onboarding/HelpMenu.tsx
  • apps/desktop/src/renderer/components/onboarding/OnboardingBootstrap.tsx
  • apps/desktop/src/renderer/components/onboarding/WelcomeVideoGate.test.tsx
  • apps/desktop/src/renderer/components/onboarding/WelcomeVideoGate.tsx
  • apps/desktop/src/renderer/components/onboarding/WelcomeWizard.tsx
  • apps/desktop/src/renderer/components/onboarding/fx/ActIntro.tsx
  • apps/desktop/src/renderer/components/onboarding/fx/AnimatedField.tsx
  • apps/desktop/src/renderer/components/onboarding/fx/Confetti.tsx
  • apps/desktop/src/renderer/components/onboarding/fx/GhostCursor.tsx
  • apps/desktop/src/renderer/components/onboarding/fx/MorphingTree.tsx
  • apps/desktop/src/renderer/components/onboarding/fx/Spotlight.tsx
  • apps/desktop/src/renderer/components/onboarding/fx/StaggeredText.tsx
  • apps/desktop/src/renderer/components/onboarding/fx/TourIllustration.tsx
  • apps/desktop/src/renderer/components/onboarding/fx/index.ts
  • apps/desktop/src/renderer/components/onboarding/fx/useReducedMotion.ts
  • apps/desktop/src/renderer/components/onboarding/illustrations/WelcomeIllustrations.tsx
  • apps/desktop/src/renderer/components/onboarding/tour/TourHost.tsx
  • apps/desktop/src/renderer/components/onboarding/tour/TourOverlay.tsx
  • apps/desktop/src/renderer/components/onboarding/tour/TourStep.tsx
  • apps/desktop/src/renderer/components/prs/detail/PrDetailPane.tsx
  • apps/desktop/src/renderer/components/terminals/SessionListPane.tsx
  • apps/desktop/src/renderer/components/terminals/TerminalsPage.tsx
  • apps/desktop/src/renderer/components/ui/SmartTooltip.tsx
  • apps/desktop/src/renderer/index.css
  • apps/desktop/src/renderer/lib/dialogBus.ts
  • apps/desktop/src/renderer/lib/useDialogBus.ts
  • apps/desktop/src/renderer/onboarding/TourController.ts
  • apps/desktop/src/renderer/onboarding/docsLinks.ts
  • apps/desktop/src/renderer/onboarding/registry.ts
  • apps/desktop/src/renderer/onboarding/stepBuilders/README.md
  • apps/desktop/src/renderer/onboarding/stepBuilders/createLaneDialog.test.ts
  • apps/desktop/src/renderer/onboarding/stepBuilders/createLaneDialog.ts
  • apps/desktop/src/renderer/onboarding/stepBuilders/gitActionsPane.ts
  • apps/desktop/src/renderer/onboarding/stepBuilders/index.ts
  • apps/desktop/src/renderer/onboarding/stepBuilders/manageLaneDialog.ts
  • apps/desktop/src/renderer/onboarding/stepBuilders/prCreateModal.ts
  • apps/desktop/src/renderer/onboarding/tourGuards.ts
  • apps/desktop/src/renderer/onboarding/tours/automationsHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/automationsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/ctoHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/ctoTour.ts
  • apps/desktop/src/renderer/onboarding/tours/filesHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/filesTour.ts
  • apps/desktop/src/renderer/onboarding/tours/firstJourneyTour.test.ts
  • apps/desktop/src/renderer/onboarding/tours/firstJourneyTour.ts
  • apps/desktop/src/renderer/onboarding/tours/graphHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/graphTour.ts
  • apps/desktop/src/renderer/onboarding/tours/historyHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/historyTour.ts
  • apps/desktop/src/renderer/onboarding/tours/index.ts
  • apps/desktop/src/renderer/onboarding/tours/laneWorkPaneHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/laneWorkPaneTour.ts
  • apps/desktop/src/renderer/onboarding/tours/lanesHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/lanesTour.ts
  • apps/desktop/src/renderer/onboarding/tours/prsHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/prsTour.test.ts
  • apps/desktop/src/renderer/onboarding/tours/prsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/runHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/runTour.ts
  • apps/desktop/src/renderer/onboarding/tours/settingsHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/settingsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/workHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/workTour.ts
  • apps/desktop/src/renderer/onboarding/waitForTarget.ts
  • apps/desktop/src/renderer/state/onboardingStore.ts
  • apps/desktop/src/shared/ipc.ts
  • apps/desktop/src/shared/types/core.ts
  • apps/desktop/src/shared/welcomeVideo.ts
💤 Files with no reviewable changes (58)
  • apps/desktop/src/renderer/onboarding/TourController.ts
  • apps/desktop/src/renderer/components/onboarding/fx/ActIntro.tsx
  • apps/desktop/src/renderer/onboarding/tours/automationsHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/prsTour.test.ts
  • apps/desktop/src/renderer/components/onboarding/fx/useReducedMotion.ts
  • apps/desktop/src/renderer/onboarding/tours/runTour.ts
  • apps/desktop/src/renderer/components/onboarding/tour/TourHost.tsx
  • apps/desktop/src/renderer/onboarding/tours/lanesHighlightsTour.ts
  • apps/desktop/src/renderer/components/onboarding/fx/StaggeredText.tsx
  • apps/desktop/src/renderer/onboarding/tours/runHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/workHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/index.ts
  • apps/desktop/src/renderer/components/onboarding/fx/AnimatedField.tsx
  • apps/desktop/src/renderer/components/onboarding/illustrations/WelcomeIllustrations.tsx
  • apps/desktop/src/renderer/components/onboarding/fx/Spotlight.tsx
  • apps/desktop/src/renderer/onboarding/stepBuilders/createLaneDialog.test.ts
  • apps/desktop/src/renderer/onboarding/tours/laneWorkPaneHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/waitForTarget.ts
  • apps/desktop/src/renderer/components/onboarding/fx/GhostCursor.tsx
  • apps/desktop/src/renderer/onboarding/stepBuilders/manageLaneDialog.ts
  • apps/desktop/src/renderer/onboarding/tours/graphHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/stepBuilders/index.ts
  • apps/desktop/src/renderer/components/onboarding/fx/TourIllustration.tsx
  • apps/desktop/src/renderer/components/onboarding/fx/MorphingTree.tsx
  • apps/desktop/src/renderer/components/onboarding/tour/TourOverlay.tsx
  • apps/desktop/src/renderer/onboarding/tours/historyTour.ts
  • apps/desktop/src/renderer/components/app/CommandPalette.tsx
  • apps/desktop/src/renderer/components/onboarding/fx/Confetti.tsx
  • apps/desktop/src/renderer/onboarding/tours/historyHighlightsTour.ts
  • apps/desktop/src/renderer/components/onboarding/WelcomeWizard.tsx
  • apps/desktop/src/renderer/onboarding/stepBuilders/README.md
  • apps/desktop/src/renderer/onboarding/tours/ctoHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/firstJourneyTour.ts
  • apps/desktop/src/renderer/onboarding/tours/laneWorkPaneTour.ts
  • apps/desktop/src/renderer/onboarding/tours/filesTour.ts
  • apps/desktop/src/renderer/onboarding/tours/prsHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/workTour.ts
  • apps/desktop/src/renderer/onboarding/tours/settingsTour.ts
  • apps/desktop/src/renderer/assets/onboarding/README.md
  • apps/desktop/src/main/services/adeActions/registry.ts
  • apps/desktop/src/renderer/onboarding/tours/settingsHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/automationsTour.ts
  • apps/desktop/src/renderer/components/onboarding/fx/index.ts
  • apps/desktop/src/renderer/state/onboardingStore.ts
  • apps/desktop/src/renderer/onboarding/tours/graphTour.ts
  • apps/desktop/src/renderer/components/prs/detail/PrDetailPane.tsx
  • apps/desktop/src/renderer/components/onboarding/tour/TourStep.tsx
  • apps/desktop/src/renderer/onboarding/stepBuilders/prCreateModal.ts
  • apps/desktop/src/renderer/onboarding/tours/filesHighlightsTour.ts
  • apps/desktop/src/renderer/onboarding/tours/firstJourneyTour.test.ts
  • apps/desktop/src/renderer/onboarding/stepBuilders/gitActionsPane.ts
  • apps/desktop/src/renderer/onboarding/tourGuards.ts
  • apps/desktop/src/renderer/onboarding/tours/ctoTour.ts
  • apps/desktop/src/renderer/onboarding/tours/lanesTour.ts
  • apps/desktop/src/renderer/onboarding/stepBuilders/createLaneDialog.ts
  • apps/desktop/src/renderer/onboarding/registry.ts
  • apps/desktop/src/renderer/index.css
  • apps/desktop/src/renderer/onboarding/tours/prsTour.ts

Comment thread apps/desktop/src/main/rendererCsp.test.ts
Comment thread apps/desktop/src/main/services/ipc/registerIpc.ts Outdated
Comment thread apps/desktop/src/renderer/browserMock.ts Outdated
Comment thread apps/desktop/src/renderer/components/app/TabNav.tsx
@arul28

arul28 commented Jun 28, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. More of your lovely PRs please.

Reviewed commit: e45afae7c8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@arul28 arul28 changed the title Onboarding Flows Replace guided onboarding with welcome video Jun 28, 2026
@arul28 arul28 merged commit fe91ccb into main Jun 28, 2026
27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant