In this course, you will be building a Peer-to-Peer distributed system using the nostr protocol while applying the principles and theory learnt from classes. The project will be split into 5 phases, corresponding to the materials covered in classes, and you will be required to provide a short written summary of the progress of your project as part of your weekly assignments.
The goal of this project is to create a playground for you to experiment with building distributed systems. As long as you complete the necessary features (regardless of their “reliability”) and participate in the live load testing session on the last live session, it would count as completing this project.
There has been renewed interest in federated or decentralized social media platforms in recent years. In contrast to typical social media platforms, decentralized social media platforms must be resilient to many possible and different types of failures, such as network issues, protocol incompatibilities, and more. These challenges make for an ideal project to learn more about distributed systems, or specifically, Peer-to-Peer distributed systems.
You may have heard of diaspora*, the Fediverse, and more recently, the nostr protocol. These are some of the more notable attempts at making decentralized or federated social media platforms and protocols over the years. In this project, we will be using a subset of the nostr protocol to build a decentralized social media platform with each participant building their own relays and clients.
During the last live session for this course, we will be performing load testing on our decentralized social network, so it is important that you plan your time properly and complete this project on time.
Your goal for this project is a build a nostr client, nostr relay, and a tool named DISTRISE, that is capable of aggregating posts from multiple nostr relays and presenting all these posts via a single timeline view, as shown in Figure 1.
Figure 1: DISTRISE Overview
DISTRISE may be in the form a website, backend service, or a command-line application, as long as we are able to view and read a timeline of updates posted across all relays. Your DISTRISE application will be connecting to multiple relays at once to fetch updates - expect to connect to n relays where n is the number of students in this class.
You will be only sending updates to your own personal relay, and fetching updates from everyone else, as shown in Figure 2.
Information on nostr protocol is split across multiple documents known as NIPS, or Nostr Implementation Possibilities. For this project, we will only be using a subset of all the NIPS to build DISTRISE.
Passing Grade
You will achieve the passing grade if you complete the following: