qwazix.com / projects

Automated ActivityPub Application Generator

At #APConf, the second day was called the unconference.


Everybody could add his subject to the board and we rearranged the post-its so that most of us could attend everything that sounded interesting.

I didn’t have anything to present nor I had very strong feelings about which sessions I was going to participate in so I stayed a bit to the back of the crowd. Talking with @matt I floated the following idea:

“What if there was a simple node-based interface, like blender or scratch, where the building blocks are the ActivityPub activities and types, and a user would be able, with minimal or no code, to create a simple social network?”

The idea caught on and soon after we had moved to the terrace and five of us were discussing this possibility.

Each of the building blocks will include a minimal web component tailored to the type of item such as a textarea for a note or article, an image upload component for an image and so on.

By the way, when I presented pherephone @cjd@mastodon.social proposed a kind of bot that just boosts whatever item it’s being mentioned in. Let’s see how we would go about to create this social service.

At first we’d have to create the actor that has the endpoints we require. This actor doesn’t like or follow anyone so it just requires an inbox, an outbox, and a followers list.

Here’s how we would configure the actor in AAAG.

social graph

Endpoints can be added to the actor by dragging and dropping from the available endpoints on the left. Each connection can be edited by choosing from the options on the right.

This here is an actor that provides a blacklist of some spammer accounts, and auto-accepts follows by other actors.

When we finish editing the external relationships of our actor, we can double-click on it so we can inspect its inner workings. The interface changes to something like this.

actor mechanics

When an activity reaches our inbox we pass it through several conditional blocks and depending whether the answer is yes or no it follows the respective path, until its object reaches (or not) the outbox, wrapped in an Announce activity.

Another, more fine-grained but more complicated approach to the same thing would be the following graph.

actor mechanics, but operating on properties

In this graph we operate on activity properties instead of whole activities, but this breaks chaining so it requires gates if you need to express more complicated relationships.

UI design

There is a possibility to devise a system where AAAG will concoct a basic UI from the relationships described in the previous two screens, however it is probably more useful and flexible if we include a UI designer in the project.

This designer might look like this


In this interface, we can drag and drop UI elements into a browser window and assign nodes to them. For example, a list can be assigned a “followers” node, a “likes” node, an outbox and so on.