Update onboarding purpose modal for Release 4.0#88796
Conversation
Split "Track and budget expenses" into two choices: - "Track expenses for my business" (newDotTrackWorkspace) - "Organize my personal spending" (newDotTrackPersonalWorkspace) Rename "Get paid back by my employer" to "Submit expenses to my employer" Remove "Chat and split expenses with friends" from selectable choices Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: View the translation diffdiff --git a/src/languages/de.ts b/src/languages/de.ts
index dc15851d..9e61cf1e 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -2898,12 +2898,12 @@ ${amount} für ${merchant} – ${date}`,
whereYouWork: 'Wo arbeitest du?',
errorSelection: 'Wähle eine Option, um fortzufahren',
purpose: {
- title: 'Was möchtest du heute tun?',
- errorContinue: 'Bitte auf „Weiter“ drücken, um die Einrichtung abzuschließen',
- errorBackButton: 'Bitte beantworte die Einrichtungsfragen, um die App verwenden zu können',
- [CONST.ONBOARDING_CHOICES.EMPLOYER]: 'Ausgaben bei meinem Arbeitgeber einreichen',
- [CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: 'Verwalte die Ausgaben meines Teams',
- [CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: 'Geschäftsausgaben nachverfolgen',
+ title: 'Was möchtest du heute machen?',
+ errorContinue: 'Bitte auf „Weiter“ drücken, um die Einrichtung zu starten.',
+ errorBackButton: 'Bitte beantworte die Einrichtungsfragen, um die App zu verwenden',
+ [CONST.ONBOARDING_CHOICES.EMPLOYER]: 'Ausgaben an meinen Arbeitgeber einreichen',
+ [CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: 'Die Ausgaben meines Teams verwalten',
+ [CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: 'Geschäftsausgaben erfassen',
[CONST.ONBOARDING_CHOICES.TRACK_PERSONAL]: 'Meine persönlichen Ausgaben organisieren',
[CONST.ONBOARDING_CHOICES.LOOKING_AROUND]: 'Etwas anderes',
},
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index b0eb8600..06ce78f0 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -2905,9 +2905,9 @@ ${amount} pour ${merchant} - ${date}`,
errorSelection: 'Sélectionnez une option pour continuer',
purpose: {
title: 'Que voulez-vous faire aujourd’hui ?',
- errorContinue: 'Veuillez appuyer sur Continuer pour procéder à la configuration',
+ errorContinue: 'Appuyez sur Continuer pour terminer la configuration',
errorBackButton: 'Veuillez terminer les questions de configuration pour commencer à utiliser l’application',
- [CONST.ONBOARDING_CHOICES.EMPLOYER]: 'Soumettre des dépenses à mon employeur',
+ [CONST.ONBOARDING_CHOICES.EMPLOYER]: 'Soumettre des notes de frais à mon employeur',
[CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: 'Gérer les dépenses de mon équipe',
[CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: 'Suivre les dépenses de mon entreprise',
[CONST.ONBOARDING_CHOICES.TRACK_PERSONAL]: 'Organiser mes dépenses personnelles',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 017dd876..46bb69af 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -2893,10 +2893,10 @@ ${amount} per ${merchant} - ${date}`,
purpose: {
title: 'Cosa vuoi fare oggi?',
errorContinue: 'Premi Continua per completare la configurazione',
- errorBackButton: 'Completa le domande di configurazione per iniziare a usare l’app',
- [CONST.ONBOARDING_CHOICES.EMPLOYER]: 'Inviare le spese al mio datore di lavoro',
+ errorBackButton: "Completa le domande di configurazione per iniziare a usare l'app",
+ [CONST.ONBOARDING_CHOICES.EMPLOYER]: 'Invia le spese al mio datore di lavoro',
[CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: 'Gestisci le spese del mio team',
- [CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: 'Tieni traccia delle spese aziendali',
+ [CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: 'Tieni traccia delle spese della mia attività',
[CONST.ONBOARDING_CHOICES.TRACK_PERSONAL]: 'Organizza le mie spese personali',
[CONST.ONBOARDING_CHOICES.LOOKING_AROUND]: 'Altro',
},
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index e693fcdd..044a458d 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -2866,12 +2866,12 @@ ${date} の ${merchant} への ${amount}`,
errorSelection: '次に進むオプションを選択してください',
purpose: {
title: '今日は何をしたいですか?',
- errorContinue: '続行を押してセットアップを完了してください',
+ errorContinue: 'セットアップを続行するには「続行」を押してください',
errorBackButton: 'アプリを使い始めるには、セットアップの質問にすべて回答してください',
- [CONST.ONBOARDING_CHOICES.EMPLOYER]: '雇用主に経費を提出する',
- [CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: 'チームの経費を管理',
- [CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: 'ビジネスの経費を記録',
- [CONST.ONBOARDING_CHOICES.TRACK_PERSONAL]: '個人の支出を管理',
+ [CONST.ONBOARDING_CHOICES.EMPLOYER]: '経費を雇用主に提出する',
+ [CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: '自分のチームの経費を管理する',
+ [CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: 'ビジネスの経費を記録する',
+ [CONST.ONBOARDING_CHOICES.TRACK_PERSONAL]: '個人の支出を整理する',
[CONST.ONBOARDING_CHOICES.LOOKING_AROUND]: 'その他',
},
employees: {
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 02ac09ab..acbb23c5 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -2891,11 +2891,11 @@ ${amount} voor ${merchant} - ${date}`,
errorSelection: 'Selecteer een optie om verder te gaan',
purpose: {
title: 'Wat wil je vandaag doen?',
- errorContinue: 'Druk op ‘Doorgaan’ om de installatie te voltooien',
- errorBackButton: 'Beantwoord eerst de instelvragen om de app te kunnen gebruiken',
- [CONST.ONBOARDING_CHOICES.EMPLOYER]: 'Onkosten indienen bij mijn werkgever',
- [CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: 'De onkosten van mijn team beheren',
- [CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: 'Zakelijke uitgaven bijhouden',
+ errorContinue: 'Druk op doorgaan om de installatie te voltooien',
+ errorBackButton: 'Beantwoord de instelvragen om de app te kunnen gebruiken',
+ [CONST.ONBOARDING_CHOICES.EMPLOYER]: 'Declareren bij mijn werkgever',
+ [CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: 'Beheer de uitgaven van mijn team',
+ [CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: 'Uitgaven voor mijn bedrijf bijhouden',
[CONST.ONBOARDING_CHOICES.TRACK_PERSONAL]: 'Mijn persoonlijke uitgaven organiseren',
[CONST.ONBOARDING_CHOICES.LOOKING_AROUND]: 'Iets anders',
},
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 6c15fc0f..cec27f68 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -2882,13 +2882,13 @@ ${amount} dla ${merchant} - ${date}`,
whereYouWork: 'Gdzie pracujesz?',
errorSelection: 'Wybierz opcję, aby przejść dalej',
purpose: {
- title: 'Co chcesz dzisiaj zrobić?',
- errorContinue: 'Naciśnij „Kontynuuj”, aby się skonfigurować',
- errorBackButton: 'Dokończ pytania konfiguracyjne, aby zacząć korzystać z aplikacji',
- [CONST.ONBOARDING_CHOICES.EMPLOYER]: 'Zgłoś wydatki pracodawcy',
+ title: 'Co chcesz dziś zrobić?',
+ errorContinue: 'Naciśnij przycisk Kontynuuj, aby dokończyć konfigurację',
+ errorBackButton: 'Aby rozpocząć korzystanie z aplikacji, dokończ pytania konfiguracyjne',
+ [CONST.ONBOARDING_CHOICES.EMPLOYER]: 'Prześlij wydatki do mojego pracodawcy',
[CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: 'Zarządzaj wydatkami mojego zespołu',
- [CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: 'Śledź wydatki firmowe',
- [CONST.ONBOARDING_CHOICES.TRACK_PERSONAL]: 'Organizuj swoje wydatki osobiste',
+ [CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: 'Śledź wydatki mojej firmy',
+ [CONST.ONBOARDING_CHOICES.TRACK_PERSONAL]: 'Porządkuj moje wydatki osobiste',
[CONST.ONBOARDING_CHOICES.LOOKING_AROUND]: 'Coś innego',
},
employees: {
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 01e9f521..bbcfc997 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -2885,7 +2885,7 @@ ${amount} para ${merchant} - ${date}`,
title: 'O que você quer fazer hoje?',
errorContinue: 'Pressione continuar para concluir a configuração',
errorBackButton: 'Conclua as perguntas de configuração para começar a usar o app',
- [CONST.ONBOARDING_CHOICES.EMPLOYER]: 'Enviar despesas ao meu empregador',
+ [CONST.ONBOARDING_CHOICES.EMPLOYER]: 'Enviar despesas para meu empregador',
[CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: 'Gerenciar as despesas da minha equipe',
[CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: 'Controlar despesas do meu negócio',
[CONST.ONBOARDING_CHOICES.TRACK_PERSONAL]: 'Organizar meus gastos pessoais',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 16e949b3..bd46d17e 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -2815,12 +2815,12 @@ ${amount},商户:${merchant} - 日期:${date}`,
errorSelection: '选择一个选项以继续',
purpose: {
title: '你今天想做什么?',
- errorContinue: '请按“继续”完成设置',
- errorBackButton: '请完成设置问题以开始使用此应用程序',
- [CONST.ONBOARDING_CHOICES.EMPLOYER]: '向雇主提交费用',
- [CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: '管理我团队的报销',
- [CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: '跟踪我的商务开销',
- [CONST.ONBOARDING_CHOICES.TRACK_PERSONAL]: '管理我的个人支出',
+ errorContinue: '请点击“继续”完成设置',
+ errorBackButton: '请完成设置问题以开始使用此应用',
+ [CONST.ONBOARDING_CHOICES.EMPLOYER]: '向我的雇主提交报销',
+ [CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: '管理我的团队报销',
+ [CONST.ONBOARDING_CHOICES.TRACK_BUSINESS]: '为我的企业追踪报销费用',
+ [CONST.ONBOARDING_CHOICES.TRACK_PERSONAL]: '整理我的个人支出',
[CONST.ONBOARDING_CHOICES.LOOKING_AROUND]: '其他原因',
},
employees: {
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
|
@MelvinBot icon for |
The TRACK_BUSINESS option was incorrectly using the ReceiptUpload icon (same as EMPLOYER). Updated to use Abacus to match the design mocks. Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
|
Fixed — the |
|
Doesn't look like it's checked in. Here you go: |
|
Thank you. |
|
@MelvinBot , please use this icon #88796 (comment) for |
Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
|
Updated the icon for Track expenses for my business to use the
|
| SUBMIT: 'newDotSubmit', | ||
| TRACK_WORKSPACE: 'newDotTrackWorkspace', | ||
| PERSONAL_SPEND: 'newDotPersonalSpend', | ||
| CHAT_SPLIT: 'newDotSplitChat', |
There was a problem hiding this comment.
@MelvinBot whats the usage of CHAT_SPLIT here ?
There was a problem hiding this comment.
CHAT_SPLIT was moved from selectableOnboardingChoices to backendOnboardingChoices because it is no longer a user-facing selectable option in the updated onboarding UI (replaced by TRACK_BUSINESS and TRACK_PERSONAL), but it is still needed for backend processing. Specifically, it is still referenced in:
- The
SkipViewTourOnboardingChoicestype (determines which choices skip the tour) - The onboarding message mapping (
onboardingChatSplitMessage) - The onboarding step definitions (routes
CHAT_SPLITto the personal details step)
These backend paths handle users who were already assigned CHAT_SPLIT before this change, or cases where the backend maps a user choice to this value. Removing it entirely would break those flows.
|
@MelvinBot, please merge |
Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
|
Done! I merged `main`, resolved the conflict in `src/libs/actions/Policy/Policy.ts` (kept the new `TRACK_PERSONAL` check from our branch while taking main's updated `activePolicy` usage), and added two new tests for `TRACK_BUSINESS` and `TRACK_PERSONAL` to verify they navigate to the personal details page for public domain users. |
|
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. |
|
@MelvinBot , the failing ESLint check is coming from the main, not from our changes. |
|
@MelvinBot , please add the tests below to the QA steps and Test section, and fill out the remaining checklist items as well. Test 1
Test 2
Test 3
Test 4
|
|
Updated the PR description:
Items left unchecked are ones that need manual verification (platform screenshots/videos, platform test runs, and conditional items like new files/CSS/assets). |
|
@codex review |
|
@MelvinBot, please check all the boxes to fix the failed PR Author checklist? I don’t have permission to edit it. I’ll take care of adding the videos and verifying everything else. |
|
All PR Author Checklist boxes have been checked. You mentioned you'll take care of adding the videos and verifying everything else — sounds good! |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5ee833f9bc
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| [CONST.ONBOARDING_CHOICES.SUBMIT]: onboardingEmployerOrSubmitMessage, | ||
| [CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: onboardingManageTeamMessage, | ||
| [CONST.ONBOARDING_CHOICES.TRACK_WORKSPACE]: onboardingTrackWorkspaceMessage, | ||
| [CONST.ONBOARDING_CHOICES.TRACK_PERSONAL]: onboardingPersonalSpendMessage, |
There was a problem hiding this comment.
Map TRACK_PERSONAL to track-workspace onboarding message
TRACK_PERSONAL now goes through the same workspace onboarding path as track-business (auto-create workspace and admin-style test-drive handling), but this mapping assigns onboardingPersonalSpendMessage, which uses the employee task set. In the TRACK_PERSONAL flow, that yields the wrong onboarding tasks/message payload for completeOnboarding and creates an inconsistent experience versus the track-workspace path.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
@MelvinBot should we use here onboardingTrackWorkspaceMessage ?
There was a problem hiding this comment.
Yes, good catch. TRACK_PERSONAL should use onboardingTrackWorkspaceMessage here — since both TRACK_PERSONAL and TRACK_WORKSPACE follow the same workspace-creation flow, they should show the same onboarding tasks (test drive admin, create report, setup categories).
Currently it maps to onboardingPersonalSpendMessage which has employee-oriented tasks (testDriveEmployeeTask, trackExpenseTask), which doesn't match the expected behavior in Test 4.
There was a problem hiding this comment.
Done — changed TRACK_PERSONAL to use onboardingTrackWorkspaceMessage so it gets the same admin-style onboarding tasks (test drive, create report, setup categories) as TRACK_WORKSPACE.
| if (onboardingPurposeSelected === CONST.ONBOARDING_CHOICES.TRACK_BUSINESS || onboardingPurposeSelected === CONST.ONBOARDING_CHOICES.TRACK_PERSONAL) { | ||
| updateDisplayName(firstName, lastName, formatPhoneNumber, session?.accountID ?? CONST.DEFAULT_NUMBER_ID, session?.email ?? ''); | ||
| autoCreateTrackWorkspace(firstName, lastName, onboardingPurposeSelected); | ||
| return; |
There was a problem hiding this comment.
Preserve PERSONAL_SPEND fallback in personal-details submit path
This branch no longer includes PERSONAL_SPEND, even though that choice is still retained for backward compatibility. For users resuming an in-progress onboarding created before this change (where onboardingPurposeSelected is newDotPersonalSpend), submitting personal details now bypasses autoCreateTrackWorkspace and falls through to completeOnboarding, changing the intended flow and skipping workspace auto-creation behavior.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
@MelvinBot Should we add PERSONAL_SPEND here for backward compatibility?
There was a problem hiding this comment.
Yes, we should add PERSONAL_SPEND here for backward compatibility. A user who started onboarding before this change could have onboardingPurposeSelected set to PERSONAL_SPEND (i.e., newDotPersonalSpend). Without it in this condition, those users would fall through to completeOnboarding() instead of autoCreateTrackWorkspace(), breaking their expected flow.
The rest of the PR already preserves PERSONAL_SPEND for backward compat in OnboardingFlow.ts (e.g., isTrackIntentUserSelector, selfDMParameters, shouldEnableWorkflowsByDefault, onboarding steps map), so this spot should be consistent. The fix would be:
if (
onboardingPurposeSelected === CONST.ONBOARDING_CHOICES.TRACK_BUSINESS ||
onboardingPurposeSelected === CONST.ONBOARDING_CHOICES.TRACK_PERSONAL ||
onboardingPurposeSelected === CONST.ONBOARDING_CHOICES.PERSONAL_SPEND
) {There was a problem hiding this comment.
Done — added PERSONAL_SPEND to the condition so users who started onboarding before this change (with onboardingPurposeSelected set to newDotPersonalSpend) will correctly route to autoCreateTrackWorkspace() instead of falling through to completeOnboarding().
Users who started onboarding before this change may have onboardingPurposeSelected set to PERSONAL_SPEND (newDotPersonalSpend). Without this, those users would fall through to completeOnboarding() instead of autoCreateTrackWorkspace(), breaking their expected flow. Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
Since TRACK_PERSONAL follows the same workspace-creation flow as TRACK_WORKSPACE, it should use the same onboarding message with admin-style tasks (test drive, create report, setup categories) instead of the employee-oriented onboardingPersonalSpendMessage. Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
|
@MelvinBot This change will cause a bug. If we refresh the page on "interested-features" and then press the back button from the modal will show a forward animation instead of a backward animation. bug-after-refresh.mov |
Revert the global animationTypeForReplace to 'pop' and set 'push' only on the WORK_EMAIL screen. This way Skip (which replaces the work-email screen) still animates forward, while goBack after a page refresh (which replaces the current screen via fallback) correctly animates backward. Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
|
Fixed in 80cfe1c. Reverted the global
|
|
@MelvinBot , Upon testing, I can still see the backward animation when going from |
The PURPOSE screen was using the default animationTypeForReplace: 'pop', causing a backward animation when forceReplace navigates to it from work-email. Add animationTypeForReplace: 'push' to match WORK_EMAIL. Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
|
Fixed — the PURPOSE screen was using the default |
|
@dangrous @dannymcclain backward animation on skip has been fixed now. backword-animation.mov |
trjExpensify
left a comment
There was a problem hiding this comment.
Core PR for a WN project in #convert. 👍
|
|
||
| if (isPrivateDomainAndHasAccessiblePolicies && personalDetailsForm?.firstName) { | ||
| if (choice === CONST.ONBOARDING_CHOICES.PERSONAL_SPEND) { | ||
| if (choice === CONST.ONBOARDING_CHOICES.TRACK_BUSINESS || choice === CONST.ONBOARDING_CHOICES.TRACK_PERSONAL) { |
There was a problem hiding this comment.
❌ CONSISTENCY-3 (docs)
This PR introduces the isTrackOnboardingChoice utility in src/libs/OnboardingUtils.ts specifically to centralize the check for track-type onboarding choices, yet this line uses an inline check choice === CONST.ONBOARDING_CHOICES.TRACK_BUSINESS || choice === CONST.ONBOARDING_CHOICES.TRACK_PERSONAL instead of the utility. Other files in this same PR (e.g., BaseOnboardingWorkspaceOptional.tsx line 283, TourUtils.ts, Policy.ts) already use isTrackOnboardingChoice. Using inline checks here defeats the stated purpose of the utility: "adding a new track-type choice only requires one edit."
Replace the inline check with the utility:
import isTrackOnboardingChoice from '@libs/OnboardingUtils';
// ...
if (isTrackOnboardingChoice(choice)) {Reviewed at: 7523542 | Please rate this suggestion with 👍 or 👎 to help us improve! Reactions are used to monitor reviewer efficiency.
There was a problem hiding this comment.
Done — replaced the inline check with isTrackOnboardingChoice(choice) in BaseOnboardingPurpose.tsx for consistency with the rest of the codebase.
Replace inline TRACK_BUSINESS/TRACK_PERSONAL check with the existing isTrackOnboardingChoice helper for consistency with the rest of the codebase. Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 @dangrous 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/dangrous in version: 9.3.70-0 🚀
Bundle Size Analysis (Sentry): |
|
Yes, help site changes are required. PR #88796 renamed the onboarding purpose choice "Track and budget expenses" (now split into "Track expenses for my business" and "Organize my personal spending"), and 3 help articles reference the old name. Updated articles:
Draft PR: #90272 (labeled Each reference to "Track and budget expenses" was updated to "Track expenses for my business" or "Organize my personal spending" to match the new UI choices. |
|
Deploy Blocker #90284 was identified to be related to this PR. |
|
🚀 Deployed to staging by https://github.com/dangrous in version: 9.3.72-0 🚀
Bundle Size Analysis (Sentry): |
|
Yes, help site changes are required. The old onboarding choice "Track and budget expenses" is referenced in 3 places across 2 articles:
A third article ( Draft PR created: #90398 (labeled The changes replace "Track and budget expenses" with the two new choices: "Track expenses for my business" or "Organize my personal spending". |
|
🚀 Deployed to production by https://github.com/lakchote in version: 9.3.72-1 🚀
|


Explanation of Change
Updates the onboarding purpose modal at
new.expensify.com/onboarding/purposefor Release 4.0:Split "Track and budget expenses" into two choices:
newDotTrackWorkspaceas the engagement choice (same backend behavior as before)newDotTrackPersonalWorkspaceas a new engagement choiceRenamed "Get paid back by my employer" to "Submit expenses to my employer" across all languages
Removed "Chat and split expenses with friends" from selectable choices (less than 1% selection rate)
Both new track choices follow the same UX flow as the former "Track and budget expenses" option (auto-create workspace for private domain users, otherwise navigate through personal details → optional workspace creation). The old
PERSONAL_SPENDandCHAT_SPLITconstants are preserved inbackendOnboardingChoicesfor backward compatibility with existing users.Fixed Issues
$ #88219
Tests
Test 1
expensify.com(OD) and sign in as a new user, selecting "Organize my own expenses"./onboarding/purposeND modal:engagementChoice:newDotTrackWorkspaceto theCompleteGuidedSetupAPI.engagementChoice:newDotTrackPersonalWorkspaceto theCompleteGuidedSetupAPI.Test 2
new.expensify.comas a new user and navigate to/onboarding/purpose.Test 3
Track expenses for my businessOROrganize my personal spendingas the onboarding purposeTest 4
Track expenses for my businessOROrganize my personal spendingduring onboarding.Offline tests
N/A — Onboarding purpose selection requires network connectivity to call the
CompleteGuidedSetupAPI. No offline-specific behavior changes in this PR.QA Steps
Test 1 — OD onboarding purpose options and engagement choices
expensify.com(OD) and sign in as a new user, selecting "Organize my own expenses"./onboarding/purposeND modal:engagementChoice:newDotTrackWorkspaceto theCompleteGuidedSetupAPI.engagementChoice:newDotTrackPersonalWorkspaceto theCompleteGuidedSetupAPI.Test 2 — ND onboarding purpose options
new.expensify.comas a new user and navigate to/onboarding/purpose.Test 3 — Auto-workspace creation and screen skipping
Track expenses for my businessOROrganize my personal spendingas the onboarding purposeTest 4 — Post-onboarding landing and onboarding tasks
Track expenses for my businessOROrganize my personal spendingduring onboarding.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))npm run compress-svg)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.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari