project-proposal-2025

Decentralized Forum/Social Media Platform

Abstract

The increasing centralisation of large social media platforms under a few companies has created an expectation of opaque data practices, manipulative algorithms, and predatory policies. This centralisation is a product of the appeal of a single, unified interface for all interactions, however it can be another way.

This project proposes creating a unified social media platform (starting with a forum or reddit-like interface) hostable by any individual or organisation on decentralized but interconnected servers. By creating a flexible protocol for communication of actions and data between servers, users can maintain the benefits of a single platform while having the freedom to choose hosts that most benefits them - rather than hosts which have a monopoly on the market. Such an open and extensible protocol should also allow much easier interoperability of different styles of social media application, and make developing supporting tooling and performing analytics easier.

Author

Name: McArthur Alford

Student number: 46967307

Functionality

Frontend/User Experience

Communication Protocol

Server

Administration

Scope

  1. Communication Protocol
    • Implement basic inter-server actions: posting, replying, up/downvoting.
  2. Simple Server Implementation
    • Provide vector-based search.
    • Offer an API for account management and the minimal set of actions.
    • Allow linking to other servers (one-way or two-way).
    • Sorting and filtering by date or popularity over a set period.
  3. Frontend
    • Basic web interface where users can:
      • Create accounts (email verification), log in (no 2FA in MVP).
      • Browse posts with sorting/filters.
      • Search by keywords.
      • Create posts, up/downvote, and comment.
      • View user histories.
  4. Administration
    • Not part of the MVP. (Needed for real deployments but excluded for this demonstration.)

Quality Attributes

Extensibility

With multiple hosts offering different features, the protocol must flexibly handle unsupported actions or custom extensions. Hosts should be free to adopt or ignore new features without breaking compatibility. This means:

Modularity and Interoperability

The degree of decentralization is best solved by breaking infrastructure into a variety of modules. All of these modules—server, frontend, and any additional modules—must be interchangeable and interopereable. Interoperability is achieved using a common, well-defined protocol and API so that:

Reliability

A real reliability concern for a decentralized approach is desynchronisation of state between hosts. Such desynchronisation may occur if the receiver of an action is unreachable briefly, or actions are recieved in an incorrect order. To resolve this:

Scalability

Scalability is important for any social media site - traffic to individual servers may fluctuate heavily based on the time of day, over the year, or during certain events. Decentralization helps distribute the load, however that is not enough if one particular server is seeing spikes in usage. This should be solved using horizontal scaling for the reference server implementation.

Evaluation

The procedure described here can be re-used for testing of several quality attributes. Testing will involve creating several instances

  1. Scalability
    • Method: Evaluated using load testing. This involves sending increasing levels of traffic (up to some maximum greater than expected in practice in the worst case).
    • Metrics: Response time, request throughput, cpu/memory usage, and error.
    • Goal: To keep response time and request throughput within a comfortable range. Verify that high stress does not cause errors.
  2. Modularity and Interoperability:
    • Method: Set up a small network of hosts with slight variations. Variations include a host sending/responding to messages incorrectly, supporting special functionality, or producing errors. Send a suite of automated actions (post creation, voting, etc) to the various hosts.
    • Metrics: Compare the final state of all hosts with some expected final state for the given set of automated actions. Track mismatches and errors.
    • Goal: To ensure that all modules individually interact in a consistent and predictable manner with no errors regardless of the implementation details of other modules. To ensure the API is used properly for communication and works in unexpected combinations.
  3. Reliability:
    • Method: Repeat the process described in point 2. As part of this, shut down a host during testing, or prevent messages from receiving the destination. As part of the implementation process, manually verify that the server implementation only stores data local to itself (this can not easily be tested, but can be prevented if accounted for in development).
    • Metrics: Compare the states of hosts.
    • Goal: Ensure there is no lost or duplicatae data.
    • Dogfooding and user testing may also be utilized to verify all behaviour is as expected in practice.
  4. Extensibility:
    • Method: Attempt to extend the protocol for a single host in the testing network (e.g. introduce a new action). As part of developing the MVP protocol, add in each new action one at a time to ensure extensibility is on the mind of developers.
    • Metrics: Verify correct error handling, contemplate the developer experience for extending and how it might be improved. This is a very subjective metric.
    • Goal: Smooth out pain points for developing extensions. Ensure the protocol is easy to extend, and that the server implementation can correctly handle unsupported messages gracefully.