feat: welcome/onboarding screen + Lexical SyncPlugin crash fix#1612
Merged
Conversation
When a user opens OpenWork with zero workspaces and has not completed onboarding, the app redirects to a full-screen /welcome page showing what OpenWork can do (spreadsheets, browser automation, files, etc.) and a single 'Get started' CTA that opens the workspace creation modal. Also adds a folder explanation to the local workspace panel so users understand that the folder they pick becomes their workspace and that OpenWork reads/writes files in it. Changes: - New /welcome route with WelcomePage component - WelcomeRoute wires CreateWorkspaceModal for first-run flow - hasCompletedOnboarding flag in LocalPreferences (persisted) - Session route redirects to /welcome when 0 workspaces + not onboarded - Local workspace panel shows folder purpose explanation with checkmarks - 21 new i18n keys for welcome screen + folder explanation - 7 eval flows (Flows 20-26) covering the onboarding experience
serializePromptFromRoot() calls $getRoot() which requires an active Lexical editor state. The useEffect on line 409 was calling it outside of editor.update()/editor.read(), causing an uncaught error that took down the entire React tree on 0.12.7: Unable to find an active editor state. State helpers or node methods can only be used synchronously during the callback of editor.update(), editor.read(), or editorState.read(). Fix: wrap the bare call in editor.getEditorState().read().
Verified via Electron dev app + Chrome DevTools MCP: - Flow 20: Welcome screen renders with 6 capability cards - Flow 21: Get started opens CreateWorkspaceModal with 3 options - Flow 23: Folder explanation with checkmarks visible in local panel - Flow 25: Session page renders normally when workspaces exist (no redirect to /welcome despite hasCompletedOnboarding=false)
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
|
The following comment was made by an LLM, it may be inaccurate: |
benjaminshafii
added a commit
that referenced
this pull request
May 15, 2026
* feat: add welcome/onboarding screen for first-time users When a user opens OpenWork with zero workspaces and has not completed onboarding, the app redirects to a full-screen /welcome page showing what OpenWork can do (spreadsheets, browser automation, files, etc.) and a single 'Get started' CTA that opens the workspace creation modal. Also adds a folder explanation to the local workspace panel so users understand that the folder they pick becomes their workspace and that OpenWork reads/writes files in it. Changes: - New /welcome route with WelcomePage component - WelcomeRoute wires CreateWorkspaceModal for first-run flow - hasCompletedOnboarding flag in LocalPreferences (persisted) - Session route redirects to /welcome when 0 workspaces + not onboarded - Local workspace panel shows folder purpose explanation with checkmarks - 21 new i18n keys for welcome screen + folder explanation - 7 eval flows (Flows 20-26) covering the onboarding experience * fix: wrap bare $getRoot() in editor.read() to prevent SyncPlugin crash serializePromptFromRoot() calls $getRoot() which requires an active Lexical editor state. The useEffect on line 409 was calling it outside of editor.update()/editor.read(), causing an uncaught error that took down the entire React tree on 0.12.7: Unable to find an active editor state. State helpers or node methods can only be used synchronously during the callback of editor.update(), editor.read(), or editorState.read(). Fix: wrap the bare call in editor.getEditorState().read(). * test: add Chrome MCP screenshots for onboarding eval flows Verified via Electron dev app + Chrome DevTools MCP: - Flow 20: Welcome screen renders with 6 capability cards - Flow 21: Get started opens CreateWorkspaceModal with 3 options - Flow 23: Folder explanation with checkmarks visible in local panel - Flow 25: Session page renders normally when workspaces exist (no redirect to /welcome despite hasCompletedOnboarding=false)
benjaminshafii
added a commit
that referenced
this pull request
May 15, 2026
* feat: add welcome/onboarding screen for first-time users When a user opens OpenWork with zero workspaces and has not completed onboarding, the app redirects to a full-screen /welcome page showing what OpenWork can do (spreadsheets, browser automation, files, etc.) and a single 'Get started' CTA that opens the workspace creation modal. Also adds a folder explanation to the local workspace panel so users understand that the folder they pick becomes their workspace and that OpenWork reads/writes files in it. Changes: - New /welcome route with WelcomePage component - WelcomeRoute wires CreateWorkspaceModal for first-run flow - hasCompletedOnboarding flag in LocalPreferences (persisted) - Session route redirects to /welcome when 0 workspaces + not onboarded - Local workspace panel shows folder purpose explanation with checkmarks - 21 new i18n keys for welcome screen + folder explanation - 7 eval flows (Flows 20-26) covering the onboarding experience * fix: wrap bare $getRoot() in editor.read() to prevent SyncPlugin crash serializePromptFromRoot() calls $getRoot() which requires an active Lexical editor state. The useEffect on line 409 was calling it outside of editor.update()/editor.read(), causing an uncaught error that took down the entire React tree on 0.12.7: Unable to find an active editor state. State helpers or node methods can only be used synchronously during the callback of editor.update(), editor.read(), or editorState.read(). Fix: wrap the bare call in editor.getEditorState().read(). * test: add Chrome MCP screenshots for onboarding eval flows Verified via Electron dev app + Chrome DevTools MCP: - Flow 20: Welcome screen renders with 6 capability cards - Flow 21: Get started opens CreateWorkspaceModal with 3 options - Flow 23: Folder explanation with checkmarks visible in local panel - Flow 25: Session page renders normally when workspaces exist (no redirect to /welcome despite hasCompletedOnboarding=false)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
/welcomepage for first-time users (zero workspaces)SyncPlugincrash that was taking down the entire React tree on 0.12.7Chrome MCP test evidence (Electron dev app)
Screenshots in
pr/.Files changed
apps/app/src/react-app/domains/onboarding/welcome-page.tsx— new welcome componentapps/app/src/react-app/shell/welcome-route.tsx— route wiringapps/app/src/react-app/shell/app-root.tsx— added/welcomerouteapps/app/src/react-app/shell/session-route.tsx— redirect logic + onboarding flagapps/app/src/react-app/kernel/local-provider.tsx—hasCompletedOnboardingprefapps/app/src/react-app/domains/workspace/create-workspace-local-panel.tsx— folder explanationapps/app/src/react-app/domains/session/surface/composer/editor.tsx— Lexical crash fixapps/app/src/i18n/locales/en.ts— 21 new i18n keysevals/onboarding-welcome-flows.md— 7 eval flows (Flows 20-26)