Skip to content

feat(web): redesign onboarding connect step as a cloud sign-in landing#4513

Open
elihahhahahah11 wants to merge 8 commits into
nexu-io:mainfrom
elihahhahahah11:onboarding-cloud-signin-resubmit
Open

feat(web): redesign onboarding connect step as a cloud sign-in landing#4513
elihahhahahah11 wants to merge 8 commits into
nexu-io:mainfrom
elihahhahahah11:onboarding-cloud-signin-resubmit

Conversation

@elihahhahahah11

@elihahhahahah11 elihahhahahah11 commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Why

The onboarding first screen previously led with a runtime/AMR card and a three-way "select runtime" picker before users had any sense of what they were choosing. For the common case — sign in to the cloud and go — that is several decisions too many, and the dense card layout buried the primary action. This reworks the first screen into a single, calm cloud sign-in landing (LobeHub-style), and folds the local-CLI / bring-your-own-key paths into clearly secondary links so the default path is one click.

What users will see

  • New first screen: a centered landing with the brand glyph, a headline, a short subtitle, and one primary Sign in button for the cloud runtime. Underneath, two quieter text links — local Coding Agent and your own model Key — separated by "or", each opening its own setup page. The old AMR card and the three-way runtime picker page are gone.
  • Already signed in: the primary button reads Continue (signed in) and advances straight into the app instead of re-prompting a login. While the login state is still resolving it shows a brief loading state (the status is now fetched in parallel on mount, so the button settles quickly).
  • Top-right controls: a compact language switcher (shows just the globe; the menu opens down-left) and a one-click light/dark theme toggle that flips instantly.
  • About-you step: the role/usage fields are now flat tappable chips laid out in the open, instead of dropdowns. A new Marketing agency role is pinned first.
  • Consistent navigation: the three-step stepper is removed across onboarding, and the Back link sits top-left on every sub-page.
  • Footer fix: the onboarding footer is no longer clipped at the bottom of the window.
  • No stray chrome on first run: the "Search tabs" popover is suppressed during onboarding (it could otherwise survive a back/forward into /onboarding as an undismissable floating dialog).

Surface area

  • Web UI (apps/web) — onboarding connect step (EntryShell), WorkspaceTabsBar first-run chrome.
  • i18n keys — adds onboardingCloud{Title,Body,SignIn,Continue,Alternative,Or,Rights}; renames onboardingRoleMarketingonboardingRoleAgency across all 19 locales.

CLI: not applicable — onboarding is a first-run web/desktop surface with no od capability equivalent.

Validation

  • pnpm guard ✅ · pnpm --filter @open-design/web typecheck ✅ · pnpm --filter @open-design/e2e typecheck
  • pnpm --filter @open-design/web test ✅ — 334 files / 3333 tests green (includes the updated EntryShell.onboarding, App.onboarding-amr-e2e, and a new WorkspaceTabsBar red-spec regression for the popover leak).
  • e2e Playwright ui/amr-onboarding.test.ts ✅ — 23 passed against the local tools-dev harness.
  • Visual ui/visual-entry.test.ts retargeted to the cloud landing (capture-only, no baseline diff).
  • Packaged @electron-smoke onboarding specs (mac.spec.ts / win.spec.ts) updated to the new landing DOM; validated via e2e typecheck (they run in the release pipeline).
  • Analytics: onboarding_complete_result.runtime_type is reported only after the connect gate is satisfied (signed-in AMR / selected local agent / verified BYOK); the already-signed-in Continue path now pins runtime='amr' so it records amr_cloud correctly.

Full CI passed green on a prior head of this branch (all non-skipped checks).

Reworks the onboarding first screen into a centered cloud sign-in
landing: brand glyph, headline, one primary cloud sign-in button, and
two secondary links (local CLI / your own key) that each open a
dedicated setup page. Removes the AMR card + three-way runtime picker.

Also:
- Drop the three-step stepper across onboarding; Back link moved
  top-left on every sub-page.
- Top-right language (compact, opens down-left) + theme (one-click
  light/dark) controls; theme applies synchronously to avoid lag.
- About-you fields become flat tappable chips instead of dropdowns.
- Replace Marketing role with Marketing agency (pinned first).
- Cloud button is state-aware: shows Continue (signed in) when already
  signed in and advances directly; shows a brief loading state while the
  login status resolves (fetched in parallel on mount).
- Fix onboarding container height (100vh -> 100%) so the footer is not
  clipped below the tab bar.

Adds onboardingCloud{Title,Body,SignIn,Continue,Alternative,Or,Rights}
i18n keys; renames onboardingRoleMarketing -> onboardingRoleAgency
across all locales.
@lefarcen lefarcen requested review from chaoxiaoche and mrcfps June 18, 2026 07:29
@lefarcen lefarcen added size/XL PR changes 700-1500 lines risk/medium Medium risk: regular code changes type/feature New feature needs-validation Runtime change detected; needs human or /explore agent validation. labels Jun 18, 2026
@lefarcen

Copy link
Copy Markdown
Contributor

🧪 This PR changes a user-facing onboarding flow, so it will need a manual QA pass before merge — please hold off self-merging for now. We'll loop QA in once it's merge-ready.

💡 To drive this PR to merge hands-free, paste this to your AI coding agent (Claude Code / Codex / opencode / Cursor …):
Take over nexu-io/open-design#4513 until it merges — read https://raw.githubusercontent.com/nexu-io/looper/main/skills/pr-takeover/SKILL.md and follow it.

@lefarcen lefarcen left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hey @elihahhahahah11, the user-facing walkthrough here is clear and the onboarding direction is easy to follow. Before pool review picks it up, could you complete the Surface area checklist and add a short Validation section with what you actually ran for this flow? That will make the design/QA handoff much easier.

The redesigned onboarding cloud landing shows a Continue (signed in)
button when the user is already signed in, which advanced to the next
step via setStep without recording any AMR entry attribution. Only the
sign-in flow (handleCloudSignIn) recorded onboarding_amr_card /
onboarding_amr_sign_in_continue, so already-signed-in users who clicked
Continue were invisible to the AMR attribution funnel — systematically
under-counting that conversion path.

Record the same card + sign_in_continue entries before advancing so the
two cohorts (fresh sign-in vs. already signed in) are attributed
consistently. Runtime/mode/agent are already set to amr by the existing
amrAgent effect, so this is attribution-only with no behavior change.
@chaoxiaoche

Copy link
Copy Markdown
Contributor

Thanks for the clear walkthrough here. The onboarding direction makes sense to me: making cloud sign-in the primary path and moving local CLI / BYOK into quieter secondary links should make the first-run flow easier to understand.

Before UI review/sign-off, could you please add a few screenshots of the key states?

  • The new first cloud sign-in screen
  • The already-signed-in state with "Continue (signed in)"
  • The local Coding Agent and BYOK entry pages opened from the secondary links
  • The updated About-you chip selection step

Since this changes the onboarding flow pretty visibly, those screenshots would make the design/QA pass much easier. Thanks!

@lefarcen lefarcen requested a review from free666799 June 18, 2026 07:40

@mrcfps mrcfps left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@elihahhahahah11 Thanks for the onboarding refresh — I found one main-path regression that needs a fix before this is ready to merge.

🔁 Powered by Looper · runner=reviewer · agent=opencode · An autonomous AI dev team for your GitHub repos.

Comment thread apps/web/src/components/EntryShell.tsx
@github-actions

github-actions Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Visual regression review

Head: c9845a4 · Base: 5be5ba7

⚠️ 1 case(s) failed during diff generation; partial captures are shown below.

8 changed · 29 unchanged · 0 missing baseline · 1 failed

Changed cases

Case Main PR Diff
visual-avatar-local-agent-list main pr diff
visual-critical-workspace main pr diff
visual-home-context-picker main pr diff
visual-integrations-use-everywhere main pr diff
visual-settings-byok main pr diff
visual-settings-byok-model-dropdown main pr diff
visual-settings-byok-openai main pr diff
visual-workspace-staged-contexts main pr diff

Capture or diff failures

Unchanged cases
Case Main PR Diff
visual-avatar-menu main pr diff
visual-critical-settings main pr diff
visual-critical-workspace-preview main pr diff
visual-design-system-detail main pr diff
visual-design-systems main pr diff
visual-home main pr diff
visual-home-catalog main pr diff
visual-home-plugin-filter main pr diff
visual-home-plugin-use-staged main pr diff
visual-home-plugin-use-with-query main pr diff
visual-home-staged-attachment main pr diff
visual-integrations main pr diff
visual-integrations-mcp main pr diff
visual-new-project-modal main pr diff
visual-plugin-details main pr diff
visual-plugin-share-menu main pr diff
visual-plugins main pr diff
visual-project-avatar-model-dropdown main pr diff
visual-project-workspace main pr diff
visual-projects main pr diff

Visual diff is advisory only and does not block merging.

The already-signed-in Continue branch advanced without setting runtime,
relying on the amrAgent effect to backfill runtime='amr'. If amrAgent
hadn't resolved yet at click time, the onboarding_complete_result event
could record runtime_type='none' instead of 'amr_cloud'. Set runtime/
mode/agent explicitly here (as handleCloudSignIn already does) so the
completion event records the cloud runtime regardless of effect timing.
@lefarcen lefarcen requested a review from mrcfps June 18, 2026 08:11

@mrcfps mrcfps left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@elihahhahahah11 I re-checked the onboarding cloud landing changes in the latest diff, especially the signed-in AMR fast path, the onboarding tab handling, and the new language/theme controls. The previous runtime-selection regression is fixed on this head: the signed-in continue path now pins the AMR runtime, daemon mode, and agent before advancing, so the cloud path stays aligned with the rest of onboarding. Thanks for tightening this up and for the thoughtful onboarding polish. ✨

🔁 Powered by Looper · runner=reviewer · agent=opencode · An autonomous AI dev team for your GitHub repos.

The connect-step redesign replaced the AMR runtime card + runtime picker
with a centered cloud sign-in landing, so the onboarding suites still
asserted removed UI (the /Open Design AMR/ card, AMR version text, the
'Sign in to continue' CTA, dropdown About-you fields).

Remap to the new UI while preserving coverage:
- AMR auth flows (pending/polling/cancel/error/timeout/recovery) now
  trigger via the landing 'Sign in to Open Design Cloud' button; assert
  'Signing in…', the Cancel sign-in button, and role=alert errors.
- 'Continue (signed in)' advances past the signed-in connect step.
- Gate-tooltip coverage retargeted to the still-existing BYOK-unverified
  and Local-no-agent gates on the bottom Continue CTA.
- About-you picks go through chip buttons (chooseChipOption) instead of
  dropdowns; analytics-payload assertions unchanged.
- The two AMR-card skeleton tests now assert the surviving behavior: the
  landing stays usable during agent detection with no card/skeleton.

apps/web suite: 334 files / 3333 tests green.
…suite

The visual-entry suite waited on the removed runtime-selection surface
(the 'Choose a runtime' heading and the .onboarding-view__amr-cloud-card
model picker), so its precondition assertions failed before the
screenshot — element(s) not found. Retarget the capture to the new
Open Design Cloud sign-in landing (cloud CTA + secondary runtime links).
captureVisual only writes an artifact (no baseline diff), so no baseline
regeneration is needed.
@lefarcen lefarcen requested a review from mrcfps June 18, 2026 08:42

@mrcfps mrcfps left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@elihahhahahah11 Thanks for tightening up the onboarding cloud landing — I re-checked the latest head and found one small follow-up in the onboarding tab chrome that would be worth addressing.

🔁 Powered by Looper · runner=reviewer · agent=opencode · An autonomous AI dev team for your GitHub repos.

Comment thread apps/web/src/components/WorkspaceTabsBar.tsx
The redesign replaced the AMR runtime card + runtime picker with the
Open Design Cloud sign-in landing, so the shared gotoOnboarding helper
(waiting on the removed 'Choose a runtime' heading) failed all tests.

Remap to the new UI while preserving coverage: AMR sign-in/poll/cancel/
recovery now drive the landing cloud button; About-you picks go through
chips; gates assert against the BYOK/Local panel headers. The three
tests that exercised the removed per-runtime model picker on the connect
card are narrowed to the surviving coverage (signed-in AMR completes
setup / carries agentId 'amr' into the first run). 23 tests green
locally via the Playwright harness.
…anding

The packaged @electron-smoke onboarding specs probed the removed
runtime-card DOM (.onboarding-view__amr-cloud-card / __alternatives /
__model-picker, aria-pressed selection). Retarget the eval snapshot,
type, validator, and click expression to the new cloud sign-in landing:
the primary cloud CTA (.onboarding-cloud__primary) plus the two
secondary runtime links (.onboarding-cloud__secondary), and add a Back
(.onboarding-view__back-to-cloud) step so the smoke can expand BYOK then
Local without the (landing-only) links. Verified via e2e typecheck;
these env-gated packaged-Electron smokes run in the release pipeline.
@lefarcen lefarcen requested a review from mrcfps June 18, 2026 09:17

@mrcfps mrcfps left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@elihahhahahah11 Thanks for the continued iteration here — the onboarding landing polish and signed-in cloud path both look much better on this head. I found one small tab-chrome follow-up worth addressing before QA leans on the onboarding route.

🔁 Powered by Looper · runner=reviewer · agent=opencode · An autonomous AI dev team for your GitHub repos.

Comment thread apps/web/src/components/WorkspaceTabsBar.tsx
The onboarding redesign hid the Search-tabs trigger button while
onboardingActive is true, but the popover portal below rendered
unconditionally on tabsMenuOpen. A popover left open across a route flip
to /onboarding (e.g. browser back/forward, which bypasses activateTab/
createNewTab) survived as a stray 'Search tabs' dialog floating over the
first-run flow with no visible control to dismiss it.

Close the menu in an effect when onboarding activates, and gate the
portal on !onboardingActive so it cannot render even for the frame
before the effect runs. Adds a red-spec regression test (opens the
popover, rerenders to the onboarding route, expects the dialog gone).

Addresses reviewer feedback on PR nexu-io#4513.
@lefarcen lefarcen requested a review from mrcfps June 18, 2026 10:06

@mrcfps mrcfps left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@elihahhahahah11 I re-checked the latest head across the onboarding cloud landing, the signed-in AMR fast path, the onboarding tab chrome fix, and the updated web/e2e coverage. I did not find any new correctness or maintainability issues in the changed ranges on 0cfa4ad. Thanks for the careful follow-through on the regressions and the test updates. ✨

🔁 Powered by Looper · runner=reviewer · agent=opencode · An autonomous AI dev team for your GitHub repos.

@lefarcen

Copy link
Copy Markdown
Contributor

Heads-up: draft PR #4206 is also open against the same onboarding surface. Both PRs touch apps/web/src/components/EntryShell.tsx, apps/web/src/styles/home/entry-layout.css, and the onboarding test files, so there is real overlap in the first-run flow work.

You and @chaoxiaoche may want to compare approaches before more review time goes in here. We'll let the maintainer team decide which path should land.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-validation Runtime change detected; needs human or /explore agent validation. risk/medium Medium risk: regular code changes size/XL PR changes 700-1500 lines type/feature New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants