Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[$250] Give users on a domain the ability to join their colleagues when the company is already using Expensify #48189

Open
anmurali opened this issue Aug 28, 2024 · 179 comments
Assignees
Labels
Awaiting Payment Auto-added when associated PR is deployed to production Engineering External Added to denote the issue can be worked on by a contributor NewFeature Something to build that is a new item. Reviewing Has a PR in review Weekly KSv2

Comments

@anmurali
Copy link

anmurali commented Aug 28, 2024

Proposal: Allow a private domain sign up, whose company is already using Expensify to request to join relevant workspace(s)

Problem: One of the cool things about Expensify is that anyone can sign up without their company's permission or invitation. But this means when an employee signs up independently they are not aware their company is already using Expensify and so end up creating their own workspaces in error, causing a lot of confusion for themselves and their company

Solution: Mirror Classic when it comes to an employee that signs up with a private domain email of a company that already has one or more workspaces. It goes like this:

  1. Sign-up with an email address on a private domain that has existing workspace owners
  2. We ask for their first name/last name (Ice breaker)
  3. Next, we show a step that:
  • Let’s them know people on derp.com are already using Expensify.
  • We’ve sent a magic code to validate their account so they can join them
  • An input for said magic code to validate the account
  • An option to skip and move on with onboarding as normal if they prefer
  1. If they validate the account, the next step shown is a list of all the workspaces owned by members of their private domain.
  • The CTA is Ask to join or Join based on the workspace JSON's automaticJoiningEnabled parameter being set to false or true respectivey
  • They can only pick one workspace in the list
  1. If they click on the CTA we do one of two things depending on if the workspace pre-approves join requests (Join), or an admin needs to accept (Ask to join):
  • Pre-approval not required:
    • Add them to the workspace
    • Drop them in the LHN
    • populate their onboarding/ConciergeDM with the invited member set of tasks
  • Pre-approval required:
    • Drop them in the LHN to continue exploring the product
    • Send the actionable message in the #admins room to accept or decline (just like policy join links that require approval)
    • On the workspaces page, show the workspace row they’re pending to be accepted to join with the “[Requested]” badge (just like a policy join request that needs to be approved)
    • If they select New Workspace in the + menu or Workspace page, have a warning just to let them know we’re waiting on their colleagues to still accept the request to join
    • Once accepted, they’ll get an email as they’re added to the workspace and we populate their onboarding/ConciergeDM with the invited member set of tasks.
Upwork Automation - Do Not Edit
  • Upwork Job URL: https://www.upwork.com/jobs/~021832414536636098293
  • Upwork Job ID: 1832414536636098293
  • Last Price Increase: 2024-10-11
Issue OwnerCurrent Issue Owner: @
Issue OwnerCurrent Issue Owner: @allroundexperts
Copy link

melvin-bot bot commented Aug 29, 2024

Current assignee @dubielzyk-expensify is eligible for the Design assigner, not assigning anyone new.

@dubielzyk-expensify
Copy link
Contributor

dubielzyk-expensify commented Aug 29, 2024

Here's the overall flow:

CleanShot 2024-08-29 at 14 46 54@2x

Included workspace member count and owner after feedback in Slack. Btw, if there's no existing workspace that they can join, we continue with the intent picker like normal onboarding

cc @Expensify/design for thoughts and feelz

@shawnborton
Copy link
Contributor

Looks solid to me!

@shawnborton
Copy link
Contributor

How does this look on desktop?

@dannymcclain
Copy link
Contributor

Looks solid to me!

Same!

How does this look on desktop?

Also curious 🙃 👀

@dubielzyk-expensify
Copy link
Contributor

Here's the desktop mocks:

image
image

Do you think it's better if I don't stretch the validation code to be full-width with the modal?
image

@trjExpensify
Copy link
Contributor

I like the full width version, personally! ❤️

@shawnborton
Copy link
Contributor

Yeah, the full width does look nice. Thanks for the desktop mocks, they check out nicely ✅

@dannymcclain
Copy link
Contributor

Agree! Stretch it baby! Desktop mocks looking good. 🫶

@dubielzyk-expensify
Copy link
Contributor

The jury has spoken. Final Figma files can be found here: https://www.figma.com/design/ir27daDKHaB1g4iZCT22K5/Onboarding-v2?node-id=7147-9183

@anmurali
Copy link
Author

anmurali commented Sep 4, 2024

@trjExpensify - can this be built by the contributor or do we need BE code? Curious for a second set of eyes. Asking you as you wrote down the steps in the solution

@trjExpensify
Copy link
Contributor

I think this is mostly FE, but we might need some BE work for the "Select a workspace" page to get that list of accessibleDomainPolicies - I'm not quite sure if we have that available to NewDot.

@luacmartins & @mountiny we built the request to join stuff in simplified collect with the Share policyJoinLink a while back, so the #admins message to accept or decline (if pre-approval is required) should be in place and usable here already, right?

@luacmartins
Copy link
Contributor

Yes, we have the system message in #admins when users try to join via the link
Screenshot 2024-09-05 at 8 59 07 AM

@trjExpensify
Copy link
Contributor

Cool, so should be reusable to call that request to join from here when needed with Ask to join:

image

but we might need some BE work for the "Select a workspace" page to get that list of accessibleDomainPolicies - I'm not quite sure if we have that available to NewDot

Do you have any idea if we'd have a list of accessibleDomainPolicies available in NewDot or if that's going to need BE work here?

@luacmartins
Copy link
Contributor

Do you have any idea if we'd have a list of accessibleDomainPolicies available in NewDot or if that's going to need BE work here?

AFAIK we don't have this data in NewDot yet, so we'd need to fetch it when we open that page.

@trjExpensify
Copy link
Contributor

Kewl, so we do need BE here then yes?

@luacmartins
Copy link
Contributor

yes

@mountiny
Copy link
Contributor

mountiny commented Sep 6, 2024

Yeah, agreed we will need to fetch that; also, somehow, indicate which one is "Join now" and which one is "Ask to join". couple questions:

  1. How do the "Join Now" and "Ask to join" changes when you click on them?
  2. If user clicks skip for now, where will they access this modal/ list of workspaces to join with buttons later in the product?

@trjExpensify
Copy link
Contributor

trjExpensify commented Sep 6, 2024

How do the "Join Now" and "Ask to join" changes when you click on them?

Join now = workspace doesn't require approval to join
Ask to join = workspace needs admin approval to join

That's the distinction between the two buttons, so I assume that's something on the policy object we store for use with policy join links.

As for what happens when you click them, that's outlined in the OP in step 5. Let me know if you have any qs on that!

If user clicks skip for now, where will they access this modal/ list of workspaces to join with buttons later in the product?

If we're mirroring the Inbox on OldDot, they don't. So maybe "Skip" is better than "Skip for now" which implies you can get back to it. We could look at something on the workspaces page with a list of available workspaces to join instead of the empty state when applicable, but I'm also fine to descope that to start and keep it to this one-time onboarding modal flow.

@anmurali
Copy link
Author

anmurali commented Sep 7, 2024

That's the distinction between the two buttons, so I assume that's something on the policy object we store for use with policy join links.

I have clarified the exact workspace setting in the original description!

@anmurali
Copy link
Author

anmurali commented Sep 7, 2024

Final mockuops

Mobile - Employee
image

Web - Employee
image

Actionable whisper in # admins (Exists)

image

Copy link

melvin-bot bot commented Jan 21, 2025

@parasharrajat, @allroundexperts, @isabelastisser, @marcaaron 12 days overdue. Walking. Toward. The. Light...

@parasharrajat
Copy link
Member

In progress. Waiting on some updates from internal team.

@anmurali
Copy link
Author

@allroundexperts - where did we land on this question?

Going to assign you @flodnv so we can see this last bit through.

@parasharrajat
Copy link
Member

@allroundexperts What's new here?

@melvin-bot melvin-bot bot added the Overdue label Jan 27, 2025
Copy link

melvin-bot bot commented Jan 27, 2025

@flodnv, @parasharrajat, @allroundexperts, @isabelastisser, @marcaaron Eep! 4 days overdue now. Issues have feelings too...

@flodnv
Copy link
Contributor

flodnv commented Jan 27, 2025

We are discussing here: https://expensify.slack.com/archives/C07HPDRELLD/p1737992562644379?thread_ts=1736817885.544729&cid=C07HPDRELLD

@flodnv flodnv added Weekly KSv2 Daily KSv2 and removed Daily KSv2 labels Jan 27, 2025
@melvin-bot melvin-bot bot removed the Overdue label Jan 27, 2025
@flodnv flodnv removed the Weekly KSv2 label Jan 27, 2025
Copy link

melvin-bot bot commented Jan 31, 2025

@flodnv, @parasharrajat, @allroundexperts, @isabelastisser, @marcaaron Uh oh! This issue is overdue by 2 days. Don't forget to update your issues!

@melvin-bot melvin-bot bot added the Overdue label Jan 31, 2025
@isabelastisser
Copy link
Contributor

@allroundexperts, can you please provide an update? Thanks!

@allroundexperts
Copy link
Contributor

@flodnv Are your changes deployed?

@melvin-bot melvin-bot bot removed the Overdue label Feb 3, 2025
@flodnv
Copy link
Contributor

flodnv commented Feb 3, 2025

As of 1 hour ago, yes they're in production!

@parasharrajat
Copy link
Member

What is next here? @allroundexperts @flodnv. I don't have access to that Slack thread, so I can't tell what's happening in the background.

@flodnv
Copy link
Contributor

flodnv commented Feb 5, 2025

I am done making the API that was blocking the issue. I don't know what else remains, @allroundexperts ?

@allroundexperts
Copy link
Contributor

It's on me now. I'll try to add screen recordings tomorrow.

@parasharrajat
Copy link
Member

Please tag me to the PR.

@flodnv flodnv removed their assignment Feb 6, 2025
@allroundexperts
Copy link
Contributor

Here's the draft PR @parasharrajat

@melvin-bot melvin-bot bot added Reviewing Has a PR in review Weekly KSv2 and removed Daily KSv2 labels Feb 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Awaiting Payment Auto-added when associated PR is deployed to production Engineering External Added to denote the issue can be worked on by a contributor NewFeature Something to build that is a new item. Reviewing Has a PR in review Weekly KSv2
Projects
Development

No branches or pull requests