Skip to content

feat: welcome/onboarding screen + Lexical SyncPlugin crash fix#1612

Merged
benjaminshafii merged 3 commits into
devfrom
feat/onboarding-welcome
Apr 29, 2026
Merged

feat: welcome/onboarding screen + Lexical SyncPlugin crash fix#1612
benjaminshafii merged 3 commits into
devfrom
feat/onboarding-welcome

Conversation

@benjaminshafii
Copy link
Copy Markdown
Member

Summary

  • Full-screen /welcome page for first-time users (zero workspaces)
  • Shows what OpenWork can do: spreadsheets, browser control, files, automation, content, APIs
  • Single "Get started" CTA opens the existing workspace creation modal
  • Folder explanation in the local workspace panel ("This folder becomes your workspace...")
  • Bonus: fixes the pre-existing Lexical SyncPlugin crash that was taking down the entire React tree on 0.12.7

Chrome MCP test evidence (Electron dev app)

Flow Result What
20 PASS Welcome screen renders with 6 capability cards
21 PASS "Get started" opens CreateWorkspaceModal with 3 options
23 PASS Folder explanation with checkmarks visible
25 PASS Session page renders normally when workspaces exist (no redirect)

Screenshots in pr/.

Files changed

  • apps/app/src/react-app/domains/onboarding/welcome-page.tsx — new welcome component
  • apps/app/src/react-app/shell/welcome-route.tsx — route wiring
  • apps/app/src/react-app/shell/app-root.tsx — added /welcome route
  • apps/app/src/react-app/shell/session-route.tsx — redirect logic + onboarding flag
  • apps/app/src/react-app/kernel/local-provider.tsxhasCompletedOnboarding pref
  • apps/app/src/react-app/domains/workspace/create-workspace-local-panel.tsx — folder explanation
  • apps/app/src/react-app/domains/session/surface/composer/editor.tsx — Lexical crash fix
  • apps/app/src/i18n/locales/en.ts — 21 new i18n keys
  • evals/onboarding-welcome-flows.md — 7 eval flows (Flows 20-26)

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)
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 29, 2026

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

Project Deployment Actions Updated (UTC)
openwork-app Ready Ready Preview, Comment Apr 29, 2026 9:49pm
openwork-den Ready Ready Preview, Comment Apr 29, 2026 9:49pm
openwork-den-worker-proxy Ready Ready Preview, Comment Apr 29, 2026 9:49pm
openwork-landing Ready Ready Preview, Comment, Open in v0 Apr 29, 2026 9:49pm
openwork-share Ready Ready Preview, Comment Apr 29, 2026 9:49pm

@benjaminshafii benjaminshafii merged commit 57a59c0 into dev Apr 29, 2026
16 checks passed
@github-actions
Copy link
Copy Markdown
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)
@benjaminshafii benjaminshafii deleted the feat/onboarding-welcome branch May 15, 2026 17:37
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