peer-base / peer-star

Distributed Applications and their internal building blocks exposed as reusable components that can be used for all kinds of p2p usecases
MIT License
44 stars 8 forks source link

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

Open JonKrone opened 6 years ago

JonKrone commented 6 years ago

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 commented 6 years ago

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

lidel commented 6 years ago

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 commented 6 years ago

@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.