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 @firstname.lastname@example.org 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 sprang when I realized how small UI differences and allowed interaction paths help make mastodon and twitter, two otherwise very similar networks have such different culture: what if we could rapidly test such interaction and UI differences without having to develop a social network from scratch? Dragging and dropping stuff on a digital canvas should be enough to create a rudimentary social framework.
This application would also help wannabe #ActivityPub developers start from something that works and build upon that, shifting the development effort from spraying activities until one of them is accepted to trying not to break anything, which is much less frustrating.
The idea to caught on and soon after we had moved to the terrace and five of us were discussing this possibility.
The discussion went well and we soon had some rough notes on how this would work.
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 @email@example.com 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.
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.
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.
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.
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.
I don't know whether this is something I would ever find the time to pursue but I wanted to get the idea out there and see if anybody would be interested in creating something like this. I'd also like feedback on how this would be made easier for the uninitiated and ways that the social graph design page can incorporate more than one actor in meaningful ways so that it can represent different relationships and interactions between actors on the fediverse.