Publications for the Fediverse?

As an editor of a Medium publication, I've been wondering how publications will work out in the Fediverse, and how they could be implemented. I'll start with what a “Publication” is on Medium, so if you already know that feel free to skip the next one or two sections.

Different posting models

Before I go into publicaitons, let's look at the standard social-media model. You create an account and start posting.

Those posts appear on your Profile Page, as well as in he feeds of those who “follow” you, and so on. It works the same way on most websites, whether it's LinkedIn or Mastodon.

Tubmlr took this a step further. Your posts appear as standards social-media posts in the feed but your Profile Page is customisable. In fact, you can style it and theme it any way you like, setting a title and so on, just like a personal blog.

(This has led to two kinds of Tumblr users: those who're in it for the social network, and those who use it as a nice simple interface for hosting their blog)

As an aside, WriteFreely works in a similar way: where you can customise your owr blog as you like it. And adding the ActivityPub plugin to your WordPress blog will probably have the same result. Tumblr, however, is probably the most balanced mix between the two worlds: it has two faces, and people can spend a lot of time interacting with one and never seeing the other.

Now, notice one thing about Tumblr: it's your own Profile Page that you're changing.

Medium doesn't let you change your profile page, but it lets you create a completely different entity called a “Publication”.

What is a Publication?

Publications have customisable homepages that are distinct from the authors' ones. When I published my post about the Fediverse in the Snipette publication, you could see it in several places:

Yes, publications can be “followed” just like users. That's not all: a publication can hold posts from many different users, and a user can post to multiple publications. (That makes it different from Write.as, where a user can have multiple “blogs” but each blog can only be posted to by the user who created it).

Publications can have multiple “authors” and “editors”: Any of the authors can submit a post to the publication, but the editors get to decide whether the posts get accepted or not. Editors can also edit submissions before publishing them.

Editors aren't all-powerful though. Authors can decide to remove an article from a publication (and maybe submit it to another one): in this case, the post will remain on their Profile Page and follower feeds, but will no longer show up in the publication.

Why Publications?

Publications are a very powerful system—because authors can write what they want, but editors get to curate what shows up on their publication, giving it a certain quality standard. What's more, authors may like to wirte on a wide variety of topics while publications focus on only a certain subject.

This way, when authors write, they can submit to the appropriate publications. Interested people can follow these publications, and get focused content on that topic, or in that style, or with those standards, or whatever the speciality of that particular publications happens to be.

What I'm trying to get at is this: publications offer a level of curation: one that's decentralised, community-driven, and—most importantly!—not algorithmic. Your posts are curated by humans.

Publications on the Fediverse?

I could go on (maybe I will, in a future post) but let's get on to how publications could be implemented in the Fediverse. This is where things get vague, so I'm just going to be throwing some ideas around. Feel free to discuss them or throw your own in the comments*.

Another disclaimer: I don't know too much about ActivityPub and Write.as, so I'm going to make some assumptions fgrom what I can figure out, which could turn out to be wrong. Take all my assertions with a pinch of salt.

First, let's see how things work right now. Write.as blogs are first-class “Actors” in ActivityPub-speak, basically the same as an account on Pleroma or Mastodon (and, incidentally, like a “channel” in PeerTube). Your user account doesn't appear anywhere except to log in and manage the blogs: as far as the rest of the Fediverse is concerned, it doesn't exist.

We could of course extend this setup on the backstage, by allowing multiple accounts to add to a blog and show their posts under the same ActivityPub enity. But that's probably not the best solution: ideally authors would somehow also be represented in the post.

A quick-fix solution may be to let authors link their accounts to (say) Mastodon profiles. Posts under the hypothetical @snipette@medium.com coust start with the note “Written by @badrihippo@fosstodon.org” or whoever the author is, and automatically be boosted by @badrihippo's profile on Mastodon.

Write.as could internally store the author, and externally display it as a note while federating.

The problem is: this gives @snipette too much control over the post. They can modify or even remove the post without notifying the author.

One more solution is to implement the whole publication system on top of the existing setup. This is the best solution I've managed to come up with so far, but also the one that'll take the most work.

Here, publications would be ActivityPub entities too just like normal authors (or rather, blogs). But instead of posting new stuff, they'll just reshare (“boost” in Mastodon-speak) other peoples' posts.

Let's say I (or rather, my blog @badrihippo@write.as) writes a post on Snipette (@snipette@medium.com). ActivityPub-wise, the post would be published by @badrihippo and boosted by @snipette.

This makes sense, in a way, because that's more or less what publications are doing: boosting posts.

On the backend, the publication could be managed by multiple editors—who could accept or reject posts, and, ideally, edit them too. Accepted posts could be listed on the user's profile (i.e. “blog”), but redirect to the publications “boosted” version when clicked on, to retain the publication's theming and formatting.

Doing this cross-server would be harder to set up: maybe a combination of OAuth and custom protocols. I'm especially wondering how cross-instance editing could be handled.

Finally, seeing Write.as as it is now, I'm not sure how the transition to work. Right now, users have “blogs” so if “publications” were added on top, it would add yet another layer and could be confusing.

On the other hand, if blogs were “upgraded” to work like publications, there's the question of users suddenly becoming public-facing—something they may not want to do.

Given that, and the fact that any upgrade could cause inconsistencies when different instances run different versions, I wonder if it'd be better to start a new project from scratch. Of course, that would take a lot of effort too.

Anyway, I've outlined what I could come up with at the moment. Now, it's over to you.