Repository navigation
[$175] Close the side panel after onboarding for all intents #104027
Copy link
Copy link
Open
Labels
DailyKSv2KSv2ExternalAdded to denote the issue can be worked on by a contributorAdded to denote the issue can be worked on by a contributorHelp WantedApply this label when an issue is open to proposals by contributorsApply this label when an issue is open to proposals by contributors
Description
Problem
(Neil's AI agent)
After onboarding, some paths still open the side panel (RHP) next to Home or Expenses. That onboards the user in two places at once: Getting started on Home, plus a chat in the side panel. Home's Getting started already supports these intents (useGettingStartedItems.ts), so the side panel isn't needed. We agreed the panel should stay closed for every intent, including new employees joining a workspace they were invited to.
Where each path lands today:
- Track workspace / Track personal (
trackExpensesWithConcierge): Home with the side panel open to Concierge on web (RHPVariantTest/index.ts). On small screens it opens the Concierge DM instead (navigateAfterOnboarding.ts). - Get paid back by my employer (Submit workspace) and joining an existing workspace during onboarding: Expenses with the side panel open to #admins (navigateAfterOnboarding.ts). The join path is called from BaseOnboardingWorkspaces.
- Manage my team: new signups go to the onboarding experiment, whose
inboxAdminsBespokeandhomePageNoRHParms both keep the side panel closed. Accounts already assigned the retiredrhpHomePage,rhpAdminsRoomorrhpConciergeDmarms still open the panel.
Reported in Slack, and extended to all intents here.
Solution
(Neil's AI agent)
Never open the side panel automatically after onboarding:
- Track intents: land on Home with the side panel closed, on all screen sizes. Opening Concierge from Home still shows the Concierge DM.
- Employer / Submit workspace and joining a workspace: keep landing on Expenses, with the side panel closed. Which page Submit users land on is a separate A/B test (https://github.com/Expensify/Expensify/issues/671738), so don't move them to Home here.
- Manage my team: stop opening the side panel for the retired
rhpHomePage,rhpAdminsRoomandrhpConciergeDmvalues. Don't change the liveinboxAdminsBespoke/homePageNoRHPexperiment, tracked in https://github.com/Expensify/Expensify/issues/679256. - Invited employees: check every way an invited employee can join for the first time (invite link, auto-join by domain, the join-workspace step in onboarding) and confirm none of them open the side panel.
- Add unit tests covering where each intent and variant lands and that the side panel stays closed.
Upwork Automation - Do Not Edit
- Upwork Job URL: https://www.upwork.com/jobs/~022110430927387470649
- Upwork Job ID: 2110430927387470649
- Last Price Increase: 2026-10-14
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
DailyKSv2KSv2ExternalAdded to denote the issue can be worked on by a contributorAdded to denote the issue can be worked on by a contributorHelp WantedApply this label when an issue is open to proposals by contributorsApply this label when an issue is open to proposals by contributors
Activity
[-]Close the side panel after onboarding for all intents[/-][+][$250] Close the side panel after onboarding for all intents[/+]melvin-bot commentedon Oct 14, 2026
Triggered auto assignment to Contributor-plus team member for initial proposal review - @rojiphil (
External)melvin-bot commentedon Oct 14, 2026
Job added to Upwork: https://www.upwork.com/jobs/~022110430898583764205
Dip-G-Git commentedon Oct 14, 2026
[-][$250] Close the side panel after onboarding for all intents[/-][+][$175] Close the side panel after onboarding for all intents[/+]melvin-bot commentedon Oct 14, 2026
Job added to Upwork: https://www.upwork.com/jobs/~022110430927387470649
github-actions commentedon Oct 14, 2026
[-][$175] Close the side panel after onboarding for all intents[/-][+][$175] Close the side panel after onboarding for non-manage-team intents[/+]wildan-m commentedon Oct 14, 2026
🚨 Edited by proposal-police: This proposal was edited at 2026-10-14 18:08:29 UTC.
Proposal
Please re-state the problem that we are trying to solve in this issue.
After onboarding, the Track (workspace/personal) and "Get paid back by my employer" intents still open the side panel next to the landing page, so the user is onboarded in two places at once (Getting started on Home plus a chat in the side panel). These intents should land on Home with the side panel closed, on every screen size, without touching the Manage my team experiment variants.
What is the root cause of that problem?
There are two separate paths that explicitly open the side panel after onboarding.
1. Track intents (
trackExpensesWithConciergevariant).shouldOpenRHPVariant()unconditionally returnstruefor this variant, regardless of company size:App/src/components/SidePanel/RHPVariantTest/index.ts
Lines 46 to 48 in 2b01bcf
so
navigateAfterOnboarding()routes it intohandleRHPVariantNavigation(), whose track branch navigates to Home and then callsSidePanelActions.openSidePanel(true):App/src/components/SidePanel/RHPVariantTest/index.ts
Lines 70 to 77 in 2b01bcf
On small screens, before that,
navigateAfterOnboarding()has a dedicated branch that sends the user straight into the Concierge DM instead of Home:App/src/libs/navigateAfterOnboarding.ts
Lines 106 to 109 in 2b01bcf
(The variant is assigned for Track intents in
useAutoCreateTrackWorkspace:)App/src/hooks/useAutoCreateTrackWorkspace.ts
Line 107 in 2b01bcf
2. Employer / Submit workspace.
navigateToSubmitWorkspaceAfterOnboarding()sets the variant torhpAdminsRoom, navigates to Spend > Expenses, and then callsSidePanelActions.openSidePanel(!shouldUseNarrowLayout):App/src/libs/navigateAfterOnboarding.ts
Lines 163 to 174 in 2b01bcf
It is called from both
useAutoCreateSubmitWorkspaceandBaseOnboardingWorkspaces(joining an existing workspace), so both entry points open the panel.The only arm that already behaves as desired is
homePageNoRHP, which is handled first innavigateAfterOnboarding()and just navigates to Home (unless a report is already topmost) without opening the side panel:App/src/libs/navigateAfterOnboarding.ts
Lines 97 to 104 in 2b01bcf
What changes do you think we should make in order to solve the problem?
navigateAfterOnboarding(), handletrackExpensesWithConciergetogether withhomePageNoRHPin the early branch, so it lands on Home (preserving the existing "don't navigate if a report is already topmost" guard) and returns without opening the side panel, on all screen sizes. Remove the small-screen branch that navigates to the Concierge DM. Opening Concierge from Home afterwards keeps working through the normal Concierge entry points, which are untouched.trackExpensesWithConciergeearly-return inshouldOpenRHPVariant()and the corresponding branch inhandleRHPVariantNavigation(), since that variant no longer reaches them. The micro-companyrhpConciergeDm/rhpAdminsRoom/rhpHomePagelogic is left exactly as is, so the Manage my team experiment is unaffected.navigateToSubmitWorkspaceAfterOnboarding()already has a branch for a missing workspace ID that only navigates to Home, with noopenSidePanel()call and norhpAdminsRoomvariant write. So the onboarding entry points stop passing the workspace ID to it:useAutoCreateSubmitWorkspacepasses no ID when it is completing onboarding, andBaseOnboardingWorkspaces(joining an existing Submit workspace) calls it without one. Both now land on Home with the side panel closed. The helper itself is left unchanged because the same hook also serves already-onboarded callers (the Submit plan welcome modal and the submit-intent deep link), which intentionally go to their Submit workspace, and those keep their current behavior. If the outstanding decision is to keep employer users on Expenses, the change instead becomes dropping theopenSidePanel()call (and the variant write) from the helper while keeping the Expenses navigation.tests/unit/navigateAfterOnboardingTest.ts(running the web implementation of the RHP variant helpers, where the side panel exists) to assert that Track lands onROUTES.HOMEand never on the Concierge report on both small and large screens, keeps a report that is already on top, also applies when the variant comes from Onyx rather than the API response, and never callsopenSidePanel; and that the micro-companyrhpHomePage/rhpAdminsRoom/rhpConciergeDmarms still open the side panel. Updatetests/unit/hooks/useAutoCreateSubmitWorkspace.test.tsso onboarding callers navigate without a workspace ID (Home) while the welcome modal still navigates to the newly created or existing Submit workspace, and drop the Track cases fromtests/unit/components/SidePanel/RHPVariantTest.test.tssince that branch is removed. The new Track and Submit assertions fail onmainand pass with the change.Compare branch: https://github.com/Expensify/App/compare/main...wildan-m:App:wildan/104027-close-side-panel-after-onboarding?expand=1
What alternative solutions did you explore? (Optional)
Close the side panel after the fact (e.g. call
closeSidePanel()once onboarding navigation finishes). Rejected because the panel would briefly flash open, and it leaves the variant code paths that open it in place, so the intent-specific behavior stays hard to reason about.github-actions commentedon Oct 14, 2026
🤖 ProposalPolice™ is tracking duplicate proposals for this issue using an OpenAI Conversation. This comment stores that Conversation's ID and can be safely ignored.
63 remaining items
github-actions commentedon Oct 18, 2026
Akopyan0 commentedon Oct 18, 2026
Proposal
What is the root cause of that problem?
The post-onboarding navigation is split across several paths that still perform the older right-hand-panel (RHP) experiment's side effects:
RHPVariantTesttreatstrackExpensesWithConciergeand retired Manage-my-team variants as reasons to reveal the panel.#adminsin the side panel.These behaviors conflict with the Getting Started experience already available on Home and with the desired single landing surface for each intent.
What changes do you think we should make in order to solve the problem?
openSidePanel(true)calls.What alternative solutions did you explore? (Optional)
Only hiding the panel in the UI would leave the navigation side effects and mobile Concierge redirect in place. Moving Submit to Home would incorrectly change a separate experiment. The safer fix is to remove the outdated automatic RHP decisions at their sources while preserving existing destinations.
I can start on implementation and tests if this proposal is approved.
melvin-bot commentedon Oct 18, 2026
📣 @Akopyan0! 📣
Hey, it seems we don’t have your contributor details yet! You'll only have to do this once, and this is how we'll hire you on Upwork.
Please follow these steps:
Format:
jdymitarai commentedon Oct 19, 2026
Upwork Profile: https://www.upwork.com/freelancers/~01f541511c3fcd21d9
Expensify Account: [email protected]
Proposal
What is the root cause of that problem?
The post-onboarding navigation logic in
src/libs/navigateAfterOnboarding.tsand the variant helper logic insrc/components/SidePanel/RHPVariantTest/index.tsstill contain legacy branching that explicitly opens the side panel (viaSidePanelActions.openSidePanel) on large screens or navigates directly to the Concierge/workspace chat report on narrow layouts after navigating to Home. These triggers were originally built for earlier onboarding variants before the Home page's Getting Started section (useGettingStartedItems.ts) supported checklist items for all onboarding flows.What changes do you think we should make in order to solve the problem?
Update
src/libs/navigateAfterOnboarding.tsacross all onboarding intent paths (including personal and workspace expense tracking, submitting expenses, managing a team, and joining an invited workspace) to remove calls that automatically open the side panel after onboarding.In
src/libs/navigateAfterOnboarding.ts, remove post-onboarding redirects to the Concierge DM or workspace/admin chat reports on small screens so that both small and large screens consistently land on Home (or the primary destination route) with the side panel closed and Getting Started visible.Clean up
src/components/SidePanel/RHPVariantTest/index.ts(and its callers in onboarding completion) to remove automatic side panel opening and Concierge report navigation triggers for onboarding variants, ensuring manual side panel usage and deep links outside onboarding remain unaffected.Update unit tests in
tests/unit/navigateAfterOnboardingTest.tsto verify that completing onboarding across all intents and screen sizes lands on the expected page without opening the side panel or redirecting to chat reports.What alternative solutions did you explore? (Optional)
An alternative would be to explicitly call
SidePanelActions.closeSidePanel()afternavigateAfterOnboardingfinishes or inside the Home page mount lifecycle. However, that would be reactive, could cause a brief visual flash of the side panel opening and closing, and would leave dead onboarding navigation branching innavigateAfterOnboarding.ts. Preventing the side panel and chat routes from being opened at the navigation dispatch source directly addresses the root cause cleanly.pvaghasiya087-has commentedon Oct 19, 2026
Proposal
What is the root cause of that problem?
The onboarding exit flow still treats legacy right-hand-panel (RHP) variants as instructions to open the panel. In the Submit-workspace path,
navigateToSubmitWorkspaceAfterOnboardingexplicitly saves the retiredRHP_ADMINS_ROOMvariant and then opens the panel after navigating to Expenses (navigateAfterOnboarding.ts, lines 198–212). Separately,shouldOpenRHPVariantstill returns true for the Track-with-Concierge variant, andhandleRHPVariantNavigationopens the panel (RHPVariantTest/index.ts, lines 43–49, lines 68–90). Removing only one open call would leave the remaining variant-based path able to reopen it.What changes do you think we should make in order to solve the problem?
navigateToSubmitWorkspaceAfterOnboarding, remove the retiredRHP_ADMINS_ROOMvariant write and the automaticopenSidePanelcall, while preserving the Expenses navigation (source).shouldOpenRHPVariantandhandleRHPVariantNavigation, prevent retired onboarding variants from triggering automatic panel navigation/opening, without changing active experiment variants (source).tests/unit/navigateAfterOnboardingTest.ts; update assertions that currently encode legacy routing as needed.What alternative solutions did you explore? (Optional)
Calling
closeSidePanel()only after navigation would be reactive and could cause the panel to flash open. Removing the panel component entirely would be broader than necessary and could affect intentional panel use. The safer scope is to remove the onboarding-specific triggers at their source while preserving destinations and active experiment behavior.Upwork Profile: https://www.upwork.com/freelancers/~015e06e45c63820f13
github-actions commentedon Oct 19, 2026
pvaghasiya087-has commentedon Oct 19, 2026
Proposal Updated
RajGahoi commentedon Oct 19, 2026
Contributor details
Your Expensify account email: [email protected]
Upwork Profile Link: https://www.upwork.com/freelancers/~014898525b9c53fc32
Proposal
Please re-state the problem that we are trying to solve in this issue.
The post-onboarding navigation logic automatically opens the side panel (RHP) across several intents even after the onboarding flow finishes, preventing users from landing cleanly on the Home screen or intended target with the side panel closed.
What is the root cause of that problem?
In src/libs/navigateAfterOnboarding.ts and src/components/SidePanel/RHPVariantTest/index.ts:
avigateToSubmitWorkspaceAfterOnboarding explicitly sets the retired RHP_ADMINS_ROOM variant and dispatches side-panel open calls.
What changes do you think we should make in order to solve the problem?
What alternative solutions did you explore? (Optional)
Calling closeSidePanel reactively after navigation was explored, but rejected because it causes a noticeable visual flicker of the panel opening and closing. Removing the triggers directly at the navigation source provides a seamless user experience.
melvin-bot commentedon Oct 19, 2026
✅ Contributor details stored successfully. Thank you for contributing to Expensify!
rojiphil commentedon Oct 19, 2026
🎀👀🎀 @neil-marcellini
@yuvrajangadsingh's proposal looks good to me: #104027 (comment)
The root cause is the two onboarding exits that call
openSidePanel: the RHP variant handler (Track, and the retired micro-company arms) andnavigateToSubmitWorkspaceAfterOnboarding. The change keeps the current landing pages and closes the panel. Track lands on Home on every screen size. Submit and joining a Submit workspace stay on Expenses. The retiredrhpHomePage,rhpAdminsRoom, andrhpConciergeDmarms keep their pages.inboxAdminsBespokeandhomePageNoRHPstay as they are.rhpAdminsRoomis still stored for Submit, so a later manual open shows #admins.This is the earliest proposal that matches the final scope. Earlier ones send Submit to Home or leave the retired arms opening the panel.
Two details:
intent=submitdeep link, so those already-onboarded callers also stop opening the panel.rhpAdminsRoomorrhpConciergeDmarm and a micro company size, can still land onworkspaces/undefined/overview. The panel stays closed. That page can be a follow-up.melvin-bot commentedon Oct 19, 2026
Current assignee @neil-marcellini is eligible for the choreEngineerContributorManagement assigner, not assigning anyone new.
nabi-ebrahimi commentedon Oct 19, 2026
Hi @rojiphil, I’d appreciate another review of my proposal. I believe it addresses the issue’s full scope more reliably.
The selected proposal routes Track users to Home when the Track variant is available. If
completeOnboarding()fails on web, [the Track hook](App/src/hooks/useAutoCreateTrackWorkspace.ts
Lines 105 to 149 in 7cb35bb
The selected change also removes panel opening for already-onboarded callers of the shared Submit helper. My proposal keeps their existing behavior while closing the panel during onboarding. It also falls back to Home when a retired workspace variant has no policy ID, avoiding a possible
workspaces/undefined/overviewroute.My proposal preserves the required landing pages and live experiment behavior, and specifies tests for these edge cases and invited-employee paths. For these reasons, I believe it is the more complete solution with less regression risk. Would you please take another look at my proposal against the issue’s final requirements?
rojiphil commentedon Oct 19, 2026
@nabi-ebrahimi Thanks for the follow-up. I had already considered your proposal before.
The failed Track request, the already-onboarded Submit callers, and the missing workspace id are real edges. yuvrajangadsingh's proposal covers the final requirements, and that text was in place on 16 Oct. Yours still sent Submit onboarding to Home and left the retired arms opening the panel until the 17 Oct edit.
So, I'm still going with #104027 (comment) as that was the earliest proposal matching the final scope. The missing-policy page can be a follow-up. We'll keep the Submit welcome modal and the intent=submit deep link in mind during implementation. Having said thus, @neil-marcellini can take the final call on this.
nabi-ebrahimi commentedon Oct 19, 2026
@rojiphil, thank you for explaining the timing. My October 17 update corrected the earlier Submit and retired-variant behavior.
I manually checked the onboarding flows and updated my proposal to cover cases the selected proposal does not address: Track navigation when the completion request fails, the existing behavior of already-onboarded Submit callers, and a missing workspace ID producing an invalid route. My test plan also covers the different invited-employee paths.
cc: @neil-marcellini
Thank you!