feat: Onboarding Welcome Page#2435
Conversation
🎩 PreviewA preview build has been created at: |
be1cab9 to
475b1de
Compare
475b1de to
b2ef001
Compare
33d4a5c to
c38d713
Compare
b2ef001 to
46b33cb
Compare
c38d713 to
5f5d39b
Compare
4833c25 to
a93cf71
Compare
5f5d39b to
c994062
Compare
a93cf71 to
e0ce7f1
Compare
bbdf96e to
5ea2aaa
Compare
e0ce7f1 to
8c45c84
Compare
8da83d6 to
fa0fbc4
Compare
eeefe26 to
7b70ec6
Compare
0d98bcd to
4172fc3
Compare
7b70ec6 to
601fa2a
Compare
4172fc3 to
b36f16e
Compare
601fa2a to
0da37a4
Compare
b36f16e to
2f5fd7c
Compare
0da37a4 to
5a2f860
Compare
2f5fd7c to
5cff5ee
Compare
camielvs
left a comment
There was a problem hiding this comment.
Welcome route + IndexRedirect wrap up the series nicely. The split — routing on isReady (valid with no backend), sidebar on isResolved — matches the provider contract. Verified APP_ROUTES.DASHBOARD moving from / to /dashboard has no other call-sites depending on the old value. Two small inline notes.
5a2f860 to
b5d4e02
Compare
5cff5ee to
9167166
Compare
b5d4e02 to
f838ac6
Compare
9167166 to
4cef7e8
Compare
f838ac6 to
0b64d0e
Compare
4cef7e8 to
f0956cc
Compare
97aa0d0 to
f772aea
Compare
61f4548 to
97f6ae5
Compare
- Gate OnboardingWelcome on !isReady with a spinner (match IndexRedirect) - Import APP_ROUTES from appRoutes instead of the router shim Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
97f6ae5 to
9daead8
Compare
f772aea to
90f6e8b
Compare
|
|
||
| if (!isResolved) { | ||
| return ( | ||
| <BlockStack align="center" inlineAlign="center" className="h-full"> |
There was a problem hiding this comment.
🤖 This is an AI-generated code review comment.
The new redirect loading state passes className into a Tangle UI primitive for sizing. The project instructions explicitly reserve primitive styling for semantic props or a local Layer-3 pattern.
Suggestion: Use the primitive's semantic sizing API, e.g. <BlockStack fill>, and omit explicit alignment props when they match the fill defaults.
Rule: CLAUDE.md UI rule: never pass className to a Tangle UI primitive; ui-primitives skill: use semantic primitive props

Description
Final PR in the onboarding series (stacked on #2440). Gives new users a dedicated landing experience instead of dropping them into an empty dashboard.
/welcomeroute — a focused, centered welcome page hosting the onboarding card, so onboarding doesn't take over the "My Dashboard" view.IndexRedirect) —/now resolves based on onboarding state: new users (onboarding not complete and not dismissed) go to/welcome; everyone else goes to/dashboard. The dashboard is moved off/to its own route so manual navigation to either still works.isResolvedto avoid flicker.Related Issue and Pull requests
Closes https://github.com/Shopify/oasis-frontend/issues/622
Stacked on #2421 → #2440
Type of Change
Checklist
Screenshots (if applicable)
Test Instructions
/— you should be redirected to/welcomewith the onboarding card centered in the available space./— you should land on/dashboard./welcomeand/dashboard— both should be reachable regardless of redirect logic./welcomeand confirm subsequent visits to/land on the dashboard.Additional Comments
Routing decisions wait on
isReady(queries settled, valid even with no backend) while the sidebar entry gates onisResolved, matching the provider contract introduced earlier in the stack.