1
0
mirror of https://github.com/fazo96/ipfs-boards synced 2025-03-12 21:48:39 +01:00
a truly distributed social platform for the browser with no backend and no external applications required
Go to file
2015-11-04 23:02:04 +01:00
static implement http server 2015-11-04 16:41:17 +01:00
.gitignore first commit 2015-11-04 16:08:33 +01:00
package.json implement http server 2015-11-04 16:41:17 +01:00
README.md update README 2015-11-04 23:02:04 +01:00
server.js implement http server 2015-11-04 16:41:17 +01:00

IPFS Boards

Image and discussion boards, forums and the like have many problems:

  • Centralized

    • What if it gets shut down?
    • What if the servers are down?
    • What if a phisical network link breaks and the data is on the other side?
    • What if the owners of the board get eaten by aliens?
  • Fragile

    • what if there's a DoS attack?
    • what if there is a usage explosion and the servers can't handle it?
    • what if the datacenter is flooded and data is lost?
  • Closed Down, limited in possibilities

    • What if I want to write a custom client?
    • What if I want to change the user interface?
    • What if I want a name that someone else already has?
    • What if I want to move my data to another service/subreddit/forum ?
    • What if I want more control (think a private forum), or less control (think 4chan) ?
    • What if I want ?

This project was conceived to solve that. With the help of modern web technologies, the IPFS and IPNS protocols and some optional cache servers, we can solve these problems and create a true universal platform which can act as:

  • Discussion board
  • Wiki
  • File Sharing platform
  • E-Learning platform

With security, control, reliability, rock solid stability, fully distributed architecture or, optionally, none of these!

How

...

Control

Each user can create a board with any name. A board is identified like this: admin-id@board-name

admin is the administrator of the repo. He decides the rules. He can name moderators and their modifications will be merged with his boards' profile by his Admin Node.

A board can be configured to be:

  • completely open allowing anything to be posted
  • completely closed with a whitelist of people allowed to post
  • having every post or comment be approved by the administration. Users can still view disapproved or not yet judged content but it will be marked as such and will be hidden by default.
  • moderated by a vote system similar to reddit (not sure about this as it's too easily exploited by bots)
  • any sane combination of the above

Auto Moderator Proposal: this is an idea of a system to automatically find potential moderators for a board. It works like this: users can vote if a content should be approved before it actually gets approved or denied by moderators. If a user's votes are really close to the moderators' actions, then he is a valid candidate. If this gets implemented it should go in the Admin Node.

Faq

To be continued...

Components

  • Client
    • a static web application to access IPFS Boards
  • Cache Server
    • can cache boards, helping to serve them via IPFS and via an HTTP gateway to the static web application and the boards' data
  • Admin Node
    • small service that allows an admin to outsource moderations to other users.

Note: until the IPFS Javascript Implementation is done:

  • the client (a static web application) requires a full IPFS node because it needs to be able to discover content via the IPFS API.
  • the cache server (written in node) requires a full IPFS node.

Note: if you want to write data, your IPNS needs to be taken over by the application. This problem will be addressed in the future

Data Storage

Each user exposes via IPNS a folder containing:

  • boards
    • board name(s)
  • posts
    • board name(s)
      • admin name(s)
        • post(s)
  • comments
    • board name(s)
      • admin name(s)
        • comment(s)
  • votes
    • board name(s)
      • admin name(s)
        • vote(s)
  • compatibility: could be used to store compatibility information

Post

{
  "title": "Title of the post",
  "date": "date of the post",
  "text": "Content of the post"
}

Optionally a post could have a text-url field so that crossposting is possible for lange texts without duplicating data.

Comment

Comment text

Vote

ipfs-board:vote-for:object_url

Versioning

a version file or something should be included in the user's files to ensure compatibility between different versions or forks.

License

GPLv3? MIT? Something else? Needs to be chosen