Add personal track goal onboarding screen#89466
Conversation
When a user selects "Track and budget expenses" (personal spend) during onboarding, they now see an additional screen asking what they want to track: Investment tracking, Household tracking, Side project tracking, or Something else (with a free text input). The selection is stored as personalTrackGoal and sent with the CompleteGuidedSetup API call. Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
This comment has been minimized.
This comment has been minimized.
…onary Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
|
Fixed the failing spellcheck: added |
…step counter tests Remove the unused `autoCreateTrackWorkspace` variable in BaseOnboardingPurpose (ESLint no-unused-vars). Update getOnboardingStepCounterTest to account for the new PERSONAL_TRACK_GOAL screen in PERSONAL_SPEND onboarding flows. Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
|
Fixed the failing checks:
Note: The |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@MelvinBot, now that this PR is merged, we have two tracking options: "Track expenses for my business" and "Organize my personal spending". merge the latest main and apply the related changes for option "Organize my personal spending". |
…ckGoalOnboarding Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com> # Conflicts: # src/hooks/useAutoCreateTrackWorkspace.ts # src/libs/getOnboardingStepCounter.ts # src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx
|
Merged latest
All 74 step counter tests pass and typecheck is clean. |
This comment has been minimized.
This comment has been minimized.
The downgrade from 3.0.71 to 3.0.69 with a patch caused a render count regression in the ReportActionCompose perf test. Version 3.0.71 already contains the hasMountedRef fix with shouldGetCachedValueRef correctly placed outside the guard, so the downgrade and patch are unnecessary. Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
|
Fixed the failing The patch applied to 3.0.69 put |
|
MelvinBot has made 5 consecutive commits trying to fix CI failures. Automatic CI fix dispatches are now paused for this PR. Next steps: A human should review the recent commits and resolve the conflicting CI errors manually. |
📲 Install BuildsAndroid
|
|
@MelvinBot merge main and resolve conflicts |
Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
|
Merged |
This comment has been minimized.
This comment has been minimized.
|
Sure, gimme a minute. |
|
Here you go: Illustrations.zip |
|
@MelvinBot, please use these #89466 (comment) icons on the |
- Add RealEstate, HouseMoney, and TargetWithArrow illustration SVGs - Switch from SelectionList to MenuItemList with icon support - Update strings to match design: title, option labels, and placeholder - Update all language files with new string values Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
|
Updated the Icons added:
Strings updated to match the screenshot:
Component changes:
|
This comment has been minimized.
This comment has been minimized.
|
@MelvinBot Let’s use the three compressed SVGs below to fix the failing check. |
joekaufmanexpensify
left a comment
There was a problem hiding this comment.
Design doc issue, good for product 👍
|
@NicolasBonet , I can't make the backend changes since I don't have access to the backend repo. We'll need someone from the BE team to handle the cc: @dylanexpensify |
|
Forgot to mention that I already reached out to let them know about the BE changes required, I can help with those and let you know. |
|
@NicolasBonet remind me the query? |
Referenced in here: https://github.com/Expensify/Expensify/issues/599678?issue=Expensify%7CExpensify%7C645011 @jayeshmangwani per how the onboarding works we will need to make a few minor adjustments in here, will get you the details when the rest is merged. |
Sure, we'll update the FE accordingly. |
|
@jayeshmangwani I added the method as Please pull the latest from main and make sure the entire flow works and that you can submit the data and retrieve it from the server |
|
@MelvinBot please merge main and resolve conflicts |
…ckGoalOnboarding Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com> # Conflicts: # tests/unit/getOnboardingStepCounterTest.ts
|
🤖 Merged Conflict:
How I resolved it:
While resolving, I also noticed the branch still had ~30 references to an undefined Verification: |
|
@NicolasBonet I tested the PR again, and it works well. We can successfully submit However, we still can't see the Screen.Recording.2026-06-08.at.11.00.05.AM.mov |
|
@jayeshmangwani that is correct, that is why I added the [Hold] to this PR. PS: Released 15 minutes ago, please re-test @jayeshmangwani |
|
@NicolasBonet Tested the PR, and we're now receiving the |
|
🚧 @NicolasBonet has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/NicolasBonet in version: 9.4.2-0 🚀
Bundle Size Analysis (Sentry): |
|
🤖 Help site review: no changes required. I reviewed the changes in this PR against the help articles under What this PR does: Adds a new onboarding screen ( Why no docs changes are needed:
Since no help site content describes this screen and no documented behavior changes, I did not create a draft docs PR. @jayeshmangwani, please confirm you agree no help site changes are needed. If you'd like a docs update anyway (e.g., to document the onboarding intent screens), reply with |
|
Deploy Blocker #93131 was identified to be related to this PR. |
|
🚀 Deployed to staging by https://github.com/NicolasBonet in version: 9.4.4-1 🚀
Bundle Size Analysis (Sentry): |
|
🤖 Help site review: no changes required I reviewed the changes in this PR against the help site files under What this PR does: Adds a new onboarding screen ( Why no docs update is needed:
No draft docs PR was created since no article changes are warranted. @jayeshmangwani, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |
|
🚀 Deployed to production by https://github.com/Julesssss in version: 9.4.4-3 🚀
|


Explanation of Change
Adds a new onboarding screen (
onboarding/personaltrackcase) that appears when users select "Track and budget expenses" (personal spend) during onboarding. This screen asks what they want to track with four options:The selection is stored locally in Onyx during onboarding and sent as
personalTrackGoalwith theCompleteGuidedSetupAPI call, which stores it in theintroSelectedNVP under thepersonaltrackgoalkey.Holding for
https://github.com/Expensify/Web-Expensify/pull/53404
Fixed Issues
$ #88221
Tests
Skip work email./onboarding/purposemodal, selectOrganize my personal spending./onboarding/personaltrackcasemodal.Something else.tracking valueis displayed.Offline tests
Skip work email./onboarding/purposemodal, selectOrganize my personal spending./onboarding/personaltrackcasemodal.Something else.tracking valueis displayed.QA Steps
Skip work email./onboarding/purposemodal, selectOrganize my personal spending./onboarding/personaltrackcasemodal.Something else.tracking valueis displayed.PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps./** comment above it */thisproperly so there are no scoping issues (i.e. foronClick={this.submit}the methodthis.submitshould be bound tothisin the constructor)thisare necessary to be bound (i.e. avoidthis.submit = this.submit.bind(this);ifthis.submitis never passed to a component event handler likeonClick)Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari