Ibiyemi Abiodun

« main page

Ditto (v2)

Totally customizable social media as a service

April 2023 to August 2023

rustawsreactreact-nativeastropostgresqlelasticsearch

Check out a copy of Ditto’s home page on the Internet Archive.

Ditto (v2) was my second try at entrepreneurship after I graduated from university. With the help of a cofounder, I built a product that lets people easily manage a custom social media site on the internet. I’m talking about custom themes, custom community rules, custom recommendation algorithms, custom domains. All of the services running on Ditto shared data with each other and with other ActivityPub-compatible sites like Mastodon.

That wasn’t what Ditto referred to when we started. Back then, it was a search engine that harnessed the power of large language models and web scraping to provide a more complete picture of what’s going on on the web. Read all about it here.

An assortment of screenshots of Ditto's mobile app. The value add was flexibility: you could make your content look however you want it to with custom feeds and custom rules, allowing creators to construct an experience that better fit their communities.

The engineering

For Ditto v2, I built two services: fed and bigfed.

fed

Each Ditto Space corresponded to one instance of fed, which was responsible for providing an API for the mobile app and website and managing users, posts, and permissions.

fed was designed so that it could run in as a server or as an AWS Lambda function in anticipation of the load we would experience upon scaling to thousands of sites (only a fraction of which would be super active at any given time).

In addition to serving as the backend for Ditto, fed was also the source of truth for federation. Federation refers to servers exchanging data with each other to create a distributed network of information. In this case, the posts of Ditto users were being federated between Ditto Spaces and to remote servers.

bigfed

There was only one instance of bigfed. This was an ActivityPub relay that collected activity from relays and fed instances, annotating each post with key words and vector embeddings before dumping them into an Elasticsearch index so that they could be discovered by a recommender algorithm.

The mobile app

Ditto was mobile-first, and so it needed an app. I wrote this app in React Native. It communicated directly with fed instances, and users could easily switch which fed instance they were on (much like switching between subreddits in the Reddit app).

The business

Ultimately, Ditto didn’t end up working out. Let’s call it bad luck. But hey, at least I saved the landing page on the Internet Archive before my former business partner took the site down.