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

PeerBox, a distributed app for storing and sharing files #1

Open
JonKrone opened this issue Apr 9, 2018 · 3 comments
Open

PeerBox, a distributed app for storing and sharing files #1

JonKrone opened this issue Apr 9, 2018 · 3 comments

Comments

@JonKrone
Copy link

JonKrone commented Apr 9, 2018

PeerBox

a distributed web app for storing and sharing files

There is a lot of potential for a Dropbox-like 'cloud' storage app built on IPFS technologies. With IPFS performing most of the heavy lifting of a traditional file sharing and storage application, it is a great domain to demonstrate the ecosystem as a foundation for DApps.

What

PeerBox is a website where you can upload, download, and share content with yourself or anyone else. Content is uploaded under namespaces, or bins, like #interplanetary and can be public or private (behind keys). You can share specific files or entire bins and revert changes to a bin. You can be anonymous or not. That's the core.

Why

The foundation of cloud file storage apps is pretty much uploading and downloading with a bunch of additional features on top like sharing, access controls, in-app editing, and local <-> cloud sync. It seems like a fairly explored feature space (albeit with a day's research) where our work on decentralized protocols and incentive mechanisms like FileCoin gives us some unique differences.

How

With the research and work that's going on with dynamic-data, this is a good app to explore and push our peer-* building blocks and work on CRDT, ACL, and identity primitives. The core bin/content representation can utilize new or existing (a permutation of treedoc or one of the sets?) CRDTs along with ACL work to enable users and permissions (If I understand those correctly). We should build from what we've learned from PeerPad where we can but try to refine and push it.

Front-end wise, the client would follow our web app patterns: React + CSS 😅, maybe Redux. There are two main pages to the app: a homepage for the website and a Bin page. Authenticated users would also have an overview page displaying a user's accessible bins.

There are a lot of interesting integrations such as using FileCoin to ensure storage and provision of content, local <-> cloud sync through IPFS-Desktop, displaying a local node's pinned files like a web-view via IPFS-Companion, and web-based editing of PeerPad-able files.

I tried to keep this high level as I figured it's best to raise the idea before diving into details. I'm still ramping upipfs-shipyard and dynamic-data work so would love your thoughts.

What do you think? Worth pursuing?

A screenshot of an example UI (Dropbox's):

dropbox

@JonKrone
Copy link
Author

JonKrone commented Apr 9, 2018

Tagging @pgte @diasdavid @lidel @olizilla @alanshaw @fritzy. I'm not sure who else is relevant here, please ping others as you see fit :)

@lidel
Copy link

lidel commented Apr 10, 2018

FYSA we are currently designing user interfaces related to "File Browser" in new WebUI, relevant threads being (feel free to join, read existing ideas or provide examples of good GUIs for inspiration):

When done, we will implement these refined interfaces in the new WebUI and Companion, but these building blocks and established design patterns could prove to be useful elsewhere as well.
The key takeaway here is to avoid duplicated effort, especially when it comes to designing GUIs for the most common operations :)

If GUI design work is reused, I feel this could enable "PeerBox" work to focus more on the research side related to CRDTs, ACLs and sync.

An open question to me is if "PeerBox" should be a separate dapp spawning own node, communicating with user's node via window.ipfs, or is it something that we could slowly integrate as a set of standard features within existing apps, namely IPFS Desktop (and new WebUI), by adding things like ACLs, encryption, and sync over time. Personally, I think these features are "the core ones" (people often ask about them on discuss.ipfs.io) and should eventually end up as features of IPFS Desktop app.

Thoughts?

@JonKrone
Copy link
Author

JonKrone commented Apr 10, 2018

@lidel Thanks for the briefing! I've just spent some hours exploring the conversations that have happened over the past month. I'm still working through it but my thoughts on your thoughts so far are:

First, your open question on whether these features should just be a standard set of features in existing apps. Yeah, you guys have already done a lot of work with this general idea! Reusing some of that design work would be excellent and I think work on ACL, encryption, and some type of sync would be great integrations.

An app like PeerBox could connect to a gateway or a local node but is intended to communicate with the rest of the network, not necessarily view local content. We need the network to find the latest version of a bin and to also broadcast any operations we perform like adding/removing files to a bin. A local node could be very useful to help ensure content is available when requested from elsewhere through PeerBox, and a sync feature is super interesting there.

PeerBox is a simple way to interact with IPFS without needing to install anything, host a node (at least for downloading), or even know you're using a p2p swarm. It allows you to group items that aren't necessarily connected via the protocol by curating bins and then accessing them from anywhere with a memorable URL.

For example, when people in an organization add documents to IPFS from different nodes they can use this to organize and make them available to each other. It also makes it easier for an individual to interact with IPFS when at random computers like a library or a friend's because you can just remember your files are under "#lidels-bin" and download any files you need on whatever computer you're at, with an in-browser node.

I think it works as a standalone app and has a lot of pieces that are also useable elsewhere.

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

No branches or pull requests

2 participants