daimo-eth / daimo

Dollars, anywhere in the world
https://daimo.com
GNU General Public License v3.0
371 stars 32 forks source link

Create Note clarity #77

Closed dcposch closed 1 year ago

dcposch commented 1 year ago

Ulas: "I didn't realize I was creating a burner wallet"

nalinbhardwaj commented 1 year ago

Messaging

One potential story for notes messaging on user side:

Primary Button: “🔗 Create Payment Link” Secondary text: “Send to someone without an account via iMessage, Signal…”

During create flow:

During claim note flow, replace claim messaging with just “Redeem payment” on website and in-app.

Irreversible flow

A second, partially related thought on the architecture/UX flow of notes is that the current UX flow of creating notes is somewhat irreversible between the creation of the note on-chain and the actual sending from the share sheet. In particular if you are a curious user just trying out flows because you're not sure what they do yet, you'll reach the end and realise what it means, and be unsure if you can undo the creation. So currently this flow has a “cost” to try for user, ideal smooth UX flow should allow for exploration of features like this without requiring the user to worry about it

I wonder if we can make the note creation “lazy” instead and make it so no on-chain activity happens until a) the user actually successfully shares them to an external app (we learn of this from the share sheet as to whether or not the user dismissed the share) or b) more aggressively, until someone actually claims the money (this would mean they just have an off chain signature in the URL allowing them to make a tx on behalf of the user)

If we do a) it's possible the share fails due to RPC error etc and the link is already sent out -- this would really suck and not the experience we'd want. If we do b) it's possible a link becomes invalid in future if user's balance drops below the required for it. However we can enforce that not happening on client side.

Revoking these links has some friction in both these cases but there's probably some simple way to do it with on-chain storage.

This should probably be pulled out into its own issue/discussion in future though.

dcposch commented 1 year ago

Hmm, the challenge with lazy creation is that by the time we get the ShareSheet back:

I agree we can communicate more clearly. Create Payment Link sounds great to me.

I also like your point about reversibility. Maybe once the payment link is created, something like

🔗 Payment Link Created This link is like cash. Anyone with the link can redeem $25 USDC.

🟩 [Send payment link] Send via Signal, WhatsApp, or iMessage.

⬜️ [Cancel link] This redeems $25 USDC back into your account.

nalinbhardwaj commented 1 year ago

I also like your point about reversibility. Maybe once the payment link is created, something like

this adds an extra step to the flow but seems worth it here, sounds good to me to move forward with that for now :)