Skip to content

Add personal track goal onboarding screen#89466

Merged
NicolasBonet merged 31 commits into
mainfrom
claude-addPersonalTrackGoalOnboarding
Jun 9, 2026
Merged

Add personal track goal onboarding screen#89466
NicolasBonet merged 31 commits into
mainfrom
claude-addPersonalTrackGoalOnboarding

Conversation

@MelvinBot

@MelvinBot MelvinBot commented May 4, 2026

Copy link
Copy Markdown
Contributor

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:

  • Investment tracking
  • Household tracking
  • Side project tracking
  • Something else (shows a free text input)

The selection is stored locally in Onyx during onboarding and sent as personalTrackGoal with the CompleteGuidedSetup API call, which stores it in the introSelected NVP under the personaltrackgoal key.

Holding for

https://github.com/Expensify/Web-Expensify/pull/53404

Fixed Issues

$ #88221

Tests

  1. Sign up with a new user.
  2. Press Skip work email.
  3. On the /onboarding/purpose modal, select Organize my personal spending.
  4. Verify that you are navigated to the /onboarding/personaltrackcase modal.
  5. Verify that the following 4 options are visible:
    • Costs for an investment property
    • Household expenses
    • Side project expenses
    • Something else
  6. Press Something else.
  7. Verify that the input for adding the tracking value is displayed.

Offline tests

  1. Sign up with a new user.
  2. Press Skip work email.
  3. On the /onboarding/purpose modal, select Organize my personal spending.
  4. Verify that you are navigated to the /onboarding/personaltrackcase modal.
  5. Verify that the following 4 options are visible:
    • Costs for an investment property
    • Household expenses
    • Side project expenses
    • Something else
  6. Press Something else.
  7. Verify that the input for adding the tracking value is displayed.

QA Steps

  1. Sign up with a new user.
  2. Press Skip work email.
  3. On the /onboarding/purpose modal, select Organize my personal spending.
  4. Verify that you are navigated to the /onboarding/personaltrackcase modal.
  5. Verify that the following 4 options are visible:
    • Costs for an investment property
    • Household expenses
    • Side project expenses
    • Something else
  6. Press Something else.
  7. Verify that the input for adding the tracking value is displayed.
  • Verify that no errors appear in the JS console

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I followed proper code patterns (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
      • If any non-english text was added/modified, I used JaimeGPT to get English > Spanish translation. I then posted it in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
  • I verified that if a function's arguments changed that all usages have also been updated correctly
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • I added unit tests for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
  • I verified that similar component doesn't exist in the codebase
  • I verified that all props are defined accurately and each prop has a /** comment above it */
  • I verified that each file is named correctly
  • I verified that each component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
  • I verified that the only data being stored in component state is data necessary for rendering and nothing else
  • In component if we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes
  • For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
  • I verified that component internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
  • I verified that all JSX used for rendering exists in the render method
  • I verified that each component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

Screenshots/Videos

Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari

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>
@OSBotify

This comment has been minimized.

…onary

Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

Fixed the failing spellcheck: added personaltrackcase, personaltrackgoal, and sideproject to the cspell dictionary.

…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>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

Fixed the failing checks:

  1. ESLint — Removed unused autoCreateTrackWorkspace variable from BaseOnboardingPurpose.tsx (the PERSONAL_SPEND flow now navigates to a new screen instead of calling this hook directly).
  2. Tests (job 8) — Updated getOnboardingStepCounterTest.ts to include the new PERSONAL_TRACK_GOAL screen in all PERSONAL_SPEND flow expectations (step counts, totals, and percentages).

Note: The ReimbursementAccountLoadingIndicator.tsx ESLint deprecation warning (absoluteFillObject) is unrelated to this PR.

@codecov

codecov Bot commented May 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ Changes either increased or maintained existing code coverage, great job!

Files with missing lines Coverage Δ
src/CONST/index.ts 93.84% <100.00%> (+0.04%) ⬆️
src/ONYXKEYS.ts 100.00% <ø> (ø)
src/ROUTES.ts 20.39% <100.00%> (+0.07%) ⬆️
src/SCREENS.ts 100.00% <ø> (ø)
src/components/Icon/chunks/illustrations.chunk.ts 0.00% <ø> (ø)
src/hooks/useAutoCreateTrackWorkspace.ts 85.29% <100.00%> (+45.29%) ⬆️
...pNavigator/Navigators/OnboardingModalNavigator.tsx 89.58% <100.00%> (+0.22%) ⬆️
src/libs/Navigation/linkingConfig/config.ts 76.92% <ø> (ø)
src/libs/actions/Policy/Policy.ts 71.59% <ø> (ø)
src/libs/actions/Report/index.ts 69.39% <ø> (ø)
... and 7 more
... and 11 files with indirect coverage changes

@jayeshmangwani

Copy link
Copy Markdown
Contributor

@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
@MelvinBot

Copy link
Copy Markdown
Contributor Author

Merged latest main and applied the TRACK_PERSONAL ("Organize my personal spending") changes:

  1. BaseOnboardingPurpose.tsx — When the user selects "Organize my personal spending" (TRACK_PERSONAL), they now navigate to the PERSONAL_TRACK_GOAL screen before continuing to personal details
  2. getOnboardingStepCounter.ts — Added PERSONAL_TRACK_GOAL to the TRACK_PERSONAL flow so the step counter/progress bar reflects the extra screen
  3. useAutoCreateTrackWorkspace.ts — Resolved conflicts to use the new useOnboardingWorkspaceCreationState() hook while keeping onboardingPersonalTrackGoal for the completeOnboarding call
  4. BaseOnboardingPersonalTrackGoal.tsx — Updated RadioListItemSingleSelectListItem (renamed on main)
  5. Tests — Updated getOnboardingStepCounterTest.ts with new TRACK_PERSONAL test cases and adjusted PERSONAL_SPEND tests (no longer includes the personal track goal screen). Updated OnboardingPurpose.tsx test to expect navigation to PERSONAL_TRACK_GOAL for TRACK_PERSONAL.

All 74 step counter tests pass and typecheck is clean.

@OSBotify

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>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

Fixed the failing perf-tests check by reverting the unnecessary react-native-onyx downgrade from 3.0.71 to 3.0.69.

The patch applied to 3.0.69 put shouldGetCachedValueRef.current = true inside the hasMountedRef guard, but 3.0.71 already has this fix with shouldGetCachedValueRef correctly placed outside the guard (it doesn't cause extra renders on its own). This behavioral difference caused 2 extra renders in ReportActionCompose, which has multiple useOnyx hooks.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

⚠️ MelvinBot CI Fix Loop Detected

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.

@sentry

sentry Bot commented May 12, 2026

Copy link
Copy Markdown

📲 Install Builds

Android

🔗 App Name App ID Version Configuration
Expensify org.me.mobiexpensifyg 9.3.75-6 (509037506) Release

⚙️ app Build Distribution Settings

@jayeshmangwani

Copy link
Copy Markdown
Contributor

@MelvinBot merge main and resolve conflicts

Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

Merged main and resolved conflicts. The only conflict was patches/react-native-onyx/details.md (deleted on this branch, modified on main) — resolved by keeping it deleted to match the branch's revert.

@OSBotify

This comment has been minimized.

@jayeshmangwani

Copy link
Copy Markdown
Contributor

@Expensify/design, I wasn’t able to find the first 3 icons used in our app. Can anyone please provide the icons for Costs for an investment property , Household expenses and Side project expenses?
583559674-90bdf572-a015-4d2f-820a-8db4c4be4e11

@shawnborton

Copy link
Copy Markdown
Contributor

Sure, gimme a minute.

@shawnborton

Copy link
Copy Markdown
Contributor

Here you go: Illustrations.zip

@jayeshmangwani

Copy link
Copy Markdown
Contributor

@MelvinBot, please use these #89466 (comment) icons on the personaltrackcase page, and also match the strings with the screenshot #89466 (comment).

- 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>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

Updated the personaltrackcase page with the design icons and matching strings:

Icons added:

  • RealEstate — "Costs for an investment property"
  • HouseMoney — "Household expenses"
  • TargetWithArrow — "Side project expenses"
  • Binoculars (existing) — "Something else"

Strings updated to match the screenshot:

  • Title: "What are you looking to track?"
  • Option labels and placeholder text updated across all language files

Component changes:

  • Switched from SelectionList to MenuItemList to support illustration icons (matching the purpose page pattern)

@OSBotify

This comment has been minimized.

@jayeshmangwani

Copy link
Copy Markdown
Contributor

@MelvinBot Let’s use the three compressed SVGs below to fix the failing check.
Also, lint is failing , is that coming from our PR?
Additionally, when clicking Something else on the personaltrackcase page, the input does not auto-focused.

simple-illustration__house-money simple-illustration__realestate simple-illustration__targetwitharrow

@joekaufmanexpensify joekaufmanexpensify 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.

Design doc issue, good for product 👍

@jayeshmangwani

Copy link
Copy Markdown
Contributor

@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 personalTrackGoal value there.

cc: @dylanexpensify

@NicolasBonet

Copy link
Copy Markdown
Contributor

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.

@dylanexpensify

Copy link
Copy Markdown
Contributor

@NicolasBonet remind me the query?

@NicolasBonet

Copy link
Copy Markdown
Contributor

@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.

@jayeshmangwani

Copy link
Copy Markdown
Contributor

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.

@NicolasBonet

Copy link
Copy Markdown
Contributor

@jayeshmangwani I added the method as personalTrackGoal in Auth and Web/E, they are still not deployed, but I also added the method inside the create policy command as there could be a race condition triggering it in there, all those changes are in: d5da1b4

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

@jayeshmangwani

Copy link
Copy Markdown
Contributor

@MelvinBot please merge main and resolve conflicts

…ckGoalOnboarding

Co-authored-by: Jayesh Mangwani <jayeshmangwani@users.noreply.github.com>

# Conflicts:
#	tests/unit/getOnboardingStepCounterTest.ts
@MelvinBot

Copy link
Copy Markdown
Contributor Author

🤖 Merged main and resolved conflicts. Pushed as a merge commit (c21d83a5bb7) — your original commits are preserved.

Conflict: tests/unit/getOnboardingStepCounterTest.ts

main landed Exclude skipped work email step from onboarding flow, which changed behavior: when the work email step is skipped (isMergeAccountStepSkipped: true), it's no longer part of the navigable flow, so it's excluded from the step counter (renaming several tests from N-step → (N-1)-step). Your branch added new TRACK_PERSONAL tests on the same lines.

How I resolved it:

  • Kept your new TRACK_PERSONAL flow tests.
  • Applied main's new excluded-work-email behavior to them: the skipped TRACK_PERSONAL flow is now a 4-step flow without WORK_EMAIL ([PURPOSE, PERSONAL_TRACK_GOAL, PERSONAL_DETAILS, WORKSPACE_OPTIONAL]), matching getDomainPrefix returning [] when the work email step is skipped.
  • Also fixed the non-conflicting getOnboardingStepCounter test public + skipped + individual + TRACK_PERSONAL (no gaps) for the same reason — it still asserted WORK_EMAIL at step 1/5; it now expects WORK_EMAILundefined and a total of 4, consistent with the adjacent PERSONAL_SPEND/MANAGE_TEAM skipped tests.

While resolving, I also noticed the branch still had ~30 references to an undefined O alias (the alias was removed in c7d81360cbe, "use SCREENS.ONBOARDING directly", but those usages were left behind). I converted them all to SCREENS.ONBOARDING. to match that review decision and keep the file compiling.

Verification: npm run typecheck-tsgo passes and npx prettier reports the file as already formatted. I was not able to run jest in this environment, so please run npx jest tests/unit/getOnboardingStepCounterTest.ts locally to confirm the suite is green before relying on it.

@jayeshmangwani

Copy link
Copy Markdown
Contributor

@NicolasBonet I tested the PR again, and it works well. We can successfully submit personalTrackGoal.

However, we still can't see the personalTrackGoal value in the nvp_introSelected response. I think that's because the backend PR hasn't been deployed yet.

Screen.Recording.2026-06-08.at.11.00.05.AM.mov

@NicolasBonet

NicolasBonet commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

@jayeshmangwani that is correct, that is why I added the [Hold] to this PR.

PS: Released 15 minutes ago, please re-test @jayeshmangwani

@NicolasBonet NicolasBonet changed the title [Hold] Add personal track goal onboarding screen Add personal track goal onboarding screen Jun 8, 2026
@jayeshmangwani

Copy link
Copy Markdown
Contributor

@NicolasBonet Tested the PR, and we're now receiving the personalTrackGoal value under nvp_introSelected and everything looks good.
Screenshot 2026-06-09 at 12 16 13 PM

@NicolasBonet
NicolasBonet merged commit 3a3b804 into main Jun 9, 2026
39 checks passed
@NicolasBonet
NicolasBonet deleted the claude-addPersonalTrackGoalOnboarding branch June 9, 2026 13:39
@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

🚧 @NicolasBonet has triggered a test Expensify/App build. You can view the workflow run here.

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/NicolasBonet in version: 9.4.2-0 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

Bundle Size Analysis (Sentry):

@MelvinBot

Copy link
Copy Markdown
Contributor Author

🤖 Help site review: no changes required.

I reviewed the changes in this PR against the help articles under docs/articles and concluded no HelpDot updates are needed.

What this PR does: Adds a new onboarding screen (onboarding/personaltrackcase) that appears after a user selects Organize my personal spending during signup. It asks "What are you looking to track?" with four options (Costs for an investment property, Household expenses, Side project expenses, Something else) and stores the selection as a preference (personaltrackgoal in the introSelected NVP).

Why no docs changes are needed:

  • This is an internal onboarding personalization/data-collection step. It doesn't change any user-facing feature behavior, workspace setup steps, or expense-tracking flows that the help articles document.
  • The relevant getting-started article, Track Personal Expenses, walks through workspace setup, adding expenses, connecting cards, and categories — none of which are affected by this new prompt. The onboarding purpose/intent sub-screens are not documented step by step.
  • Expensify Home Overview references the top-level onboarding intent (track and budget my expenses) only as it relates to the Getting started checklist visibility — behavior this PR does not change.

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 @MelvinBot and I'll draft one.

@mitarachim

Copy link
Copy Markdown

Deploy Blocker #93131 was identified to be related to this PR.

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/NicolasBonet in version: 9.4.4-1 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 cancelled 🔪

Bundle Size Analysis (Sentry):

@MelvinBot

Copy link
Copy Markdown
Contributor Author

🤖 Help site review: no changes required

I reviewed the changes in this PR against the help site files under docs/articles.

What this PR does: Adds a new onboarding screen (onboarding/personaltrackcase) shown after a user selects Organize my personal spending during signup. It asks "What are you looking to track?" with four options (Costs for an investment property, Household expenses, Side project expenses, Something else) and stores the selection as personalTrackGoal to personalize the experience.

Why no docs update is needed:

  • This is an internal onboarding survey/intent-selection screen. It collects a preference to personalize setup; it does not add or change a user-facing feature that the help site documents (how to create expenses, connect cards, add categories, etc.).
  • The help site does not document any of the onboarding survey screens. There is no coverage of the onboarding/purpose selection ("Organize my personal spending"), the employee-count question, or any similar intent prompt. Adding this one screen would be inconsistent with how the rest of onboarding is (intentionally) treated.
  • The most relevant article, Track Personal Expenses, begins at Create a Workspace and walks through actually using the product. The new screen sits before that flow and doesn't alter any of the documented steps.

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 Ready for review

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to production by https://github.com/Julesssss in version: 9.4.4-3 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants