Repository navigation
Closed
Closed
[$175] [UseDot] Add a Join modal with Terms of Service and Privacy Policy to all sign-up paths#106366
Task
Copy link
Labels
DailyKSv2KSv2ExternalAdded to denote the issue can be worked on by a contributorAdded to denote the issue can be worked on by a contributorImprovementItem broken or needs improvement.Item broken or needs improvement.
Description
Problem
Sign-up paths on use.expensify.com (UseDot) should consistently show the Terms of Service and Privacy Policy alongside a sign-up CTA before the user creates an account. Add a Join-style pop-up modal, mirroring the experience on expensify.com, across every UseDot page with a sign-up path.
Proposed plan
- Audit every UseDot page and sign-up entry point, including hero and closing forms, inline forms, sign-up links/buttons, existing sign-up modals, and Google sign-up options. Cover all pages, not only the new landing page.
- Route these entry points through a consistent Join-style modal. Update existing sign-up modals rather than opening a second modal on top of them.
- Show the email field, a
JoinCTA, any supported Google sign-up option, and this footer:By logging in, you agree to our terms of service and privacy policy.
Link the relevant text to https://www.expensify.com/terms and https://www.expensify.com/privacy. - Do not include the “I want to” qualifier. Remove the question and its client-side validation so no selection is required for email or Google sign-up.
- Carry any email already entered on the page into the modal.
- Opening the modal must not submit the sign-up form or initiate Google OAuth. Only the corresponding CTA inside the modal, with the footer visible, should continue sign-up.
- Preserve existing tracking, attribution, referral information, and supported sign-up parameters when moving from the page to the modal and completing sign-up.
- Ensure future sign-up entry points, including in-article fields, use the same modal experience.
Scope
This is frontend work for the UseDot website, not a change to the NewDot app's sign-in UI. Keep existing account-creation and Google authentication behavior; no backend changes are expected for the proposed experience. Storing a server-side record of terms acceptance is outside this scope.
Acceptance criteria
- Every UseDot page with a sign-up path presents the Join-style modal before account creation.
- All sign-up entry points are covered, including inline/email forms, links/buttons, existing modals, and Google sign-up options where supported.
- The modal displays the existing Join footer alongside its CTAs, with working Terms of Service and Privacy Policy links.
- No “I want to” question is shown or required for either email or Google sign-up.
- Previously entered email addresses are prefilled in the modal.
- Neither account creation nor Google OAuth starts until the user clicks its corresponding CTA inside the modal.
- Existing tracking, attribution, referral information, and supported sign-up parameters are retained.
- Existing modals are reused or updated without nested/duplicate modal steps.
Suggested verification
- Exercise each distinct sign-up entry point across UseDot pages on desktop and mobile layouts.
- Confirm the footer is visible before either email sign-up or Google OAuth starts.
- Confirm sign-up works without a qualifier selection.
- Confirm email prefill and attribution/referral parameters survive the modal transition.
- Confirm closing the modal does not create an account or start OAuth, and reopening it remains usable.
Upwork Automation - Do Not Edit
- Upwork Job URL: https://www.upwork.com/jobs/~022119774438448654738
- Upwork Job ID: 2119774438448654738
- Last Price Increase: 2026-11-09
Issue Owner
Current Issue Owner: @roryabrahamMetadata
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 contributorImprovementItem broken or needs improvement.Item broken or needs improvement.
Activity
melvin-bot commentedon Nov 9, 2026
Triggered auto assignment to Contributor-plus team member for initial proposal review - @cretadn22 (
External)[-][UseDot] Add a Join modal with Terms of Service and Privacy Policy to all sign-up paths[/-][+][$175] [UseDot] Add a Join modal with Terms of Service and Privacy Policy to all sign-up paths[/+]melvin-bot commentedon Nov 9, 2026
Job added to Upwork: https://www.upwork.com/jobs/~022119774438448654738
kevinjosh10 commentedon Nov 9, 2026
Proposal
What is the root cause of that problem?
Currently, sign-up entry points across
use.expensify.com(UseDot) handle account creation through multiple disparate mechanisms (inline email submit forms, hero sections, article sign-up inputs, and direct Google sign-up buttons) rather than a centralized, unified Join modal. Furthermore:By logging in, you agree to our terms of service and privacy policy.).What changes do you think we should make in order to solve the problem?
Centralized Join Modal Architecture:
Form Elements & Legal Footer:
JoinCTA button, and the supported Google OAuth button.https://www.expensify.com/termsandhttps://www.expensify.com/privacywithtarget="_blank"andrel="noopener noreferrer".Qualifier Removal:
Prefill & State Propagation:
JoinCTA or Google button inside the modal dialog while the legal footer is visible.Tracking & Attribution Preservation:
What alternative solutions did you explore? (Optional)
Displaying inline Terms of Service checkboxes across every individual page section, which was rejected as it clutters individual landing pages and fails to provide a cohesive, auditable sign-up experience across mobile and desktop viewports.
TassioSales commentedon Nov 9, 2026
Contributor details
Your Expensify account email: tassiolucian.ljs@gmail.com
Upwork Profile Link: https://www.upwork.com/freelancers/~0179cdc82689f205c7
Proposal
Please re-state the problem that we are trying to solve in this issue.
Sign-up entry points across use.expensify.com (UseDot) do not consistently present the Terms of Service and Privacy Policy agreements in a standardized Join modal prior to account creation.
What is the root cause of that problem?
Marketing landing pages on UseDot contain disparate CTA buttons that link directly to onboarding or auth entry paths without channeling through a unified
JoinModalcomponent that enforces the standardized legal disclosure view.What changes do you think we should make in order to solve the problem?
JoinModalcomponent containing the Terms of Service, Privacy Policy, and sign-up CTA.JoinModalcomponent.What alternative solutions did you explore? (Optional)
What automated tests can you add to prevent this from re-occurring?
In
tests/unit/JoinModalTest.ts:JoinModalrenders valid links to Terms of Service and Privacy Policy and correctly fires the sign-up submission handler.melvin-bot commentedon Nov 9, 2026
✅ Contributor details stored successfully. Thank you for contributing to Expensify!
dylanexpensify commentedon Nov 11, 2026
@cretadn22 let's use Mel
cretadn22 commentedon Nov 11, 2026
@MelvinBot Investigate this issue
MelvinBot commentedon Nov 11, 2026
Investigation findings
The reported behavior is supported by UseDot’s publicly served HTML and JavaScript, but the implementation is outside the inspected App source.
What is the root cause of that problem?
The UseDot homepage contains an existing sign-up modal and separate inline forms. Inspection found:
This is static-code evidence, not browser verification or a complete audit of every UseDot page.
Why changing NewDot would not address this
NewDot already renders its legal disclosure alongside the Join button in SignUpWelcomeForm.tsx:53–77, using Terms.tsx:9–16.
UseDot serves a separate marketing-site implementation. I did not find the proposed React
JoinModalimplementation in App, so the existing proposals’ component and test-file suggestions are not verified implementation targets.What changes do you think we should make in order to solve the problem?
Escalate to an internal engineer with access to the UseDot website source. The owning source repository was not established, so an App implementation proposal would be premature.
The remaining investigation needs to establish:
No code changes were made.
view run
cretadn22 commentedon Nov 11, 2026
UseDot isn't built from the App repo, so a JoinModal in App wouldn't affect use.expensify.com, and NewDot already shows the Terms/Privacy footer in SignUpWelcomeForm. I agree with MelvinBot's findings. @dylanexpensify, can we move this to an internal engineer with access to the UseDot website source?
🎀👀🎀 C+ reviewed
melvin-bot commentedon Nov 11, 2026
Triggered auto assignment to @roryabraham, see https://stackoverflow.com/c/expensify/questions/7972 for more details.
roryabraham commentedon Nov 11, 2026
@MelvinBot close this issue and reopen it in https://github.com/Expensify/Expensify
MelvinBot commentedon Nov 11, 2026
Closed this issue and reopened it in Expensify/Expensify: Add a Join modal with Terms of Service and Privacy Policy to all sign-up paths, assigned to
roryabraham, with the requirements and investigation context preserved.view run
dylanexpensify commentedon Nov 13, 2026
thanks @roryabraham!