Skip to content

Instantly share code, notes, and snippets.

@meiqimichelle
Last active October 26, 2019 05:35
Show Gist options
  • Save meiqimichelle/b9564a1874479dcb5ee619ff17aaf778 to your computer and use it in GitHub Desktop.
Save meiqimichelle/b9564a1874479dcb5ee619ff17aaf778 to your computer and use it in GitHub Desktop.

John Q. Curious Public wants to stay in control of his data, and share pictures with his family.

North star

A non-developer end user should not need to know what ‘pinning’ is to get the benefits of IPFS. We should abstract the idea of ‘pinning’ away by re-branding MFS as “IPFS Drive” and build our GUI products as different interfaces into one user experience.

Priorities

In the short term, the low hanging fruit is to move our GUI applications from using the low-level Pin API to adding user data to MFS, where all files are implicitly pinned, and are also much easier to manage via Web UI. We should also transition the language in our GUI apps (both visual and words) away from ‘pinning’ and towards clear, non-technical vocabulary.

Note: we don't have any official presence on mobile yet, so any mobile app (iOS or Android) would a new endevour. This scope of work assumes, for now, focusing improvement on our existing IPFS Desktop and browser-based applications.

User workflow

“I want to share pictures with my family, but I don’t want to lose control of where my pictures are. Those computer companies can see everything! Who knows what they’re using my stuff for.”

User workflow IPFS interaction
John Q. downloads and installs the IPFS Drive app (from the location that works for his computer) On installation, IPFS Drive sets up common default folders in a pre-defined location on the user’s machine. These include Public and Private folders. [^1]
John Q. drags and drops pictures into his new IPFS Drive/Private folder. Everything in IPFS Drive (née MFS) is implicitly pinned (ie, it won't be garbage-collected unless explicitly removed from MFS). The pictures/data in the Private folder are *not* announced to the network.
John Q. wants to share a specific photo with his daughter. He opens his email in his browser, and drags and drops a file from his IPFS Drive into a new email, like he always does. When a file is attached to something outside of the IPFS Drive/Private folder, the equivalent of “share with anyone who has this link” is created for access to that file. [<-- this needs more feedback from the team]
John Q.’s daughter gets an email from her dad, and can see a thumbnail of the image he sent in email preview, and can download by clicking on the link (which has a recognizable name her dad gave it). IPFS Drive allows you to share a permalink to every file or directory, which can be accessed via http for those who do not use IPFS.
As John Q. learns more about IPFS, he wants to help host information. He saves or moves the things he wants to help host to his IPFS Drive/Public folder. The pictures/data in the Public folder are announced to the network. This is where participation in the global IPFS network happens.
John Q. deletes an accidental copy of a photo in his Private folder by dragging and dropping the photo into his computer’s trash. When the photo is moved out of IPFS Drive/Private and into Trash, IPFS Drive deletes all local blocks that the deleted object linked to, as long as they’re not relied on by another block.
John Q. is running out of space on his machine, and decides to stop hosting some photos he downloaded from Wikipedia by dragging and dropping them from his Public folder into his computer’s trash. When the photo is moved out of IPFS Drive/Public and into Trash, IPFS Drive deletes all local blocks that the deleted object linked to, as long as they’re not relied on by another block.

Success metrics

  • User engagement rates via opt-in metrics
    • Number of interactions with IPFS Drive per week
    • Number of ‘shares’
  • Number of downloads
  • User frustration/happiness self-reporting
    • “Was this helpful”-type questionnaire where appropriate, with open-ended box or issue for optional feedback
  • Ease of user task completion via usability tests
    • Adding information to Private and Public folders, and understanding what this means
    • Deleting information
    • Sharing information
    • Viewing/downloading information that has been shared with a user via IPFS or http

Long-term user workflow vision

  • John Q. hears about this IPFS Drive (MFS) that works like Google Drive, but keeps his data secure, private, and in his control.
  • He downloads IPFS Drive from the app store on his phone, and is able to move files into IPFS without knowing what a “pin” is. To John Q., it looks like he’s sharing a picture the way he’s used to; browsing to it on his phone, selecting it, hitting the ‘share’ button, and then selecting the IPFS app.
  • He can also open the IPFS app directly and browse his files there, or add to his IPFS Drive from the app (which allows his to browse other files on his phone and select those he wants on his drive.)
  • To manage his information, John can interface with his IPFS Drive via the app on his phone; via a browser; or via an app that he downloads to his desktop computer. In any interface, he can rename, move, and delete files. His changes are reflected on all platforms, and he understands what he is doing because the visual and written design choices are consistent throughout, and the interfaces are clear. [^1]
  • Back to sharing those local pix with family. John Q. convinced his daughter to download IPFS Drive, too, so they can both have access to shared picture folders. Pictures John Q. shares in IPFS Drive are available to his daughter to browse.
  • John Q. can also can share files with people who do not use IPFS. IPFS Drive allows you to share a permalink to every file or directory, which can be accessed via http.

Notes

  • [^1] In a distributed system in which other people can save/pin information, sometimes data is neither available in the way folks have gotten used to, and nor is it ‘deleted’ in the way folks understand that concept today, and so the collection of ‘IPFS Drive’ interfaces need to treat these interactions with care and intention.

    Suggestion: intentional implementation of Public v Private folders in IPFS Drive, where Public means if you put something in here, expect it to be on the internet forever (like the burrito pic I put on Yelp), and Private means that you have strong, nuanced controls over who sees and interacts with what.

    Technically everything you have in MFS is announced to the network -- you can share permalink to every file/directory -- so it's best not to talk about MFS and 'privacy' right now. However, this mismatch between technical network privacy and what end users expect 'local' and 'privacy' to mean is a UX hurdle that should be treated with care because people will expect their local machine to automatically be 'private' in the way they understand 'this is my house versus this is your house and I need to invite you in before you can see what's inside.' \

  • The relationship between pinning and MFS: https://gist.github.com/meiqimichelle/1e4601b4418bf4f46007f4777aff395d

@lidel
Copy link

lidel commented Oct 21, 2019

Thank you for making this!
Dropping quick notes/thoughts:

  • I like the idea of Mobile app focused on Sharing.

  • On Desktop IPFS Drive app will probably mean improving IPFS Desktop rather than introducing a new project.
    "Dropbox-like mounting of MFS" is part of my notes on Native OS Integrations Provided by IPFS Desktop: ipfs/ipfs-desktop#679

  • When a file is attached to something outside of the IPFS Drive/Private folder, the equivalent of “share with anyone who has this link” is created for access to that file. [<-- this needs more feedback from the team]

    • "Copy shareable link" (that works even without IPFS client) action available for every file in Public/
      • Not sure how Private/ would work, perhaps it could have the same menu item, but clicking on it would ask user if they want to copy file to Public/ directory first? OR maybe there could be "Encrypt and copy shareable IPFS link" which asks for a password before encrypting and copying data to Public/? tbd
    • In both cases we could copy link to a prettier UI than default gateway file/directory listing
      (example: https://github.com/ipfs-shipyard/ipfs-share-files)
  • John Q.’s daughter gets an email from her dad, and can see the image he sent in email preview.

    More realistic is that she would see a link with familiar filename, but if it is .jpg email client can show a thumbnail, I guess.

  • When the photo is moved out of IPFS Drive/Private and into Trash, IPFS Drive deletes all local blocks that the deleted object linked to, as long as they’re not relied on by another block.

    I think moving to Trash on regular system does not remove data from disk. It should work the same here. If we introduce concept of "IPFS Drive Trash", removing from Trash would be the step at which we remove blocks from local repo.

  • [and lets the network know that it is not a host for these blocks anymore ← not sure this is needed, have to chat with peeps].

    Not needed ✨ :)

@meiqimichelle
Copy link
Author

Thank you for this feedback @lidel! ❤️ I will make a new version/gist that incorporates your feedback. ✨✨✨

@meiqimichelle
Copy link
Author

On second thought, I will edit this gist with strike-thru etc so we don't end up with versions all over the place quite yet :) We can sve that joy for later.

@meiqimichelle
Copy link
Author

On Desktop IPFS Drive app will probably mean improving IPFS Desktop rather than introducing a new project.
"Dropbox-like mounting of MFS" is part of my notes on Native OS Integrations Provided by IPFS Desktop: ipfs/ipfs-desktop#679

Yes! I would hope none of this is a new project, more like a migration across our GUI apps. Do you think that needs to be more explicit in this workflow?

"Copy shareable link" (that works even without IPFS client) action available for every file in Public/

❤️

Not sure how Private/ would work, perhaps it could have the same menu item, but clicking on it would ask user if they want to copy file to Public/ directory first? OR maybe there could be "Encrypt and copy shareable IPFS link" which asks for a password before encrypting and copying data to Public/? tbd

Exactly, tbd. It's an interesting opportunity to make it clear what your options really are, in terms of public and private information. Like, is it: "Private for real private"; "Public because you want this picture on your Yelp review and you can't get privacy back from it"; "Share == stick in an encryption 'envelope' and send/mail to your friend". 🤔

I think moving to Trash on regular system does not remove data from disk. It should work the same here. If we introduce concept of "IPFS Drive Trash", removing from Trash would be the step at which we remove blocks from local repo.

🤔 My intentional with this user need was more like "Oops, I don't want this photo to be on IPFS anymore, I'm taking it 'out'." Say a user moves that file to the Trash, or to just their machine's desktop. I think the expectation would be that the blocks are GC'd from IPFS immediately, though the file still may exist locally on a users machine. (Setting that step up as 'delete' only may have been misleading.) What do you think with this extra info @lidel ?

@lidel
Copy link

lidel commented Oct 22, 2019

Yes! I would hope none of this is a new project, more like a migration across our GUI apps. Do you think that needs to be more explicit in this workflow?

@meiqimichelle I'd add note that we have IPFS Desktop, but we don't have any official presence on Mobile, so a mobile app (iOS & Android) would be something new.

Like, is it: "Private for real private"; "Public because you want this picture on your Yelp review and you can't get privacy back from it"; "Share == stick in an encryption 'envelope' and send/mail to your friend".

We have some notes on "Sharing" services at ipfs/ipfs-gui#34.
I believe most users expect/assume end-to-end encryption by default, so only the recipient of the link is able to see the content. My fav implementation of this is at https://send.firefox.com (link contains unique decryption key after #, which is not sent to server, but can be copied and shared along with the URL, no password to remember unless you explicitly choose to enable it)

"Oops, I don't want this photo to be on IPFS anymore, I'm taking it 'out'." [..] . I think the expectation would be that the blocks are GC'd from IPFS immediately, though the file still may exist locally on a users machine.

Yeah this is also tbd, feels like an implementation detail :-)
Personally, I think a better model is for Trash/ to work like Private/ – blocks still in repo, still take space, but not announced. Removal from Trash removes blocks from repo, saves space.

@meiqimichelle
Copy link
Author

@meiqimichelle I'd add note that we have IPFS Desktop, but we don't have any official presence on Mobile, so a mobile app (iOS & Android) would be something new.

Added! :D

I believe most users expect/assume end-to-end encryption by default, so only the recipient of the link is able to see the content. My fav implementation of this is at https://send.firefox.com (link contains unique decryption key after #, which is not sent to server, but can be copied and shared along with the URL, no password to remember unless you explicitly choose to enable it)

Neat. That'll be a fun UX problem to solve (and see what helps users understand what's going on, and if we need to build anything to support that, or if it's more a words/communication challenge).

Yeah this is also tbd, feels like an implementation detail :-)
Personally, I think a better model is for Trash/ to work like Private/ – blocks still in repo, still take space, but not announced. Removal from Trash removes blocks from repo, saves space.

👍 re: implementation detail.

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