Fabio Manganiello

💬 Unlisted Posts

Short-form posts published to the Fediverse but not listed on the main blog. Follow @fabio@manganiello.blog on the Fediverse to see these in your timeline.

âœī¸ 4
Fabio Manganiello Author

#madblog has now added support for custom visibility for your posts and articles.

You may not want everything you write to be published on your index or federated everywhere.

Madblog now allows you to easily tweak the audience of your posts.

Visibility levels

Visibility
Level
Blog
Index
/unlisted
Page
Reactions
List
ActivityPub
Targets
public ✅ ❌ ✅ to: [Public]
cc: [followers]
unlisted ❌ ✅ ✅ to: [followers]
cc: [Public]
followers ❌ ❌ ❌ to: [followers]
cc: []
direct ❌ ❌ ❌ to: [mentions]
cc: []
draft ❌ ❌ ❌ Not federated

All the visibility levels (except for draft) map one-to-one with their corresponding meanings on the Fediverse.

  • public: articles are rendered on the blog indexes and replies are rendered in the comments section.
  • unlisted: articles are rendered under the /unlisted page, replies are rendered in the comments section.
  • followers: articles are not rendered on the blog, replies are not rendered in the comments section (only visible to ActivityPub followers).
  • direct: articles are not rendered on the blog, replies are not rendered in the comments section (only visible to tagged ActivityPub users).
  • draft content is neither rendered on the blog nor federated.

Default visibility

You can configure the default visibility level for all of your posts on a global level via config.yaml:

default_visibility: public

Or MADBLOG_DEFAULT_VISIBILITY environment variable.

Per-post visibility

You can configure the visibility level of a post by using the visibility Markdown header:

# A private post

 [//]: # (visibility: direct)

@alice@example.com only you should be able to see this message

ActivityPub constraints

If a post is federated then YOU CANNOT change its visibility level. This is a constraint on ActivityPub itself. You should delete and re-created the post with a different audience instead.

If a post was already federated and you move it to Draft then the previously federated version will not be removed. No changes that you apply while it's a draft will be published until you change the visibility level back, but the latest federated version will still be available. If you want to delete it, then you should delete the associated file.

Security observations

Remember that Madblog, by design, has NO USERS, NO AUTHENTICATION and NO WRITE API.

Everything lives on the file system, and every Markdown file in the supported folders will have a public URL.

It means that everyone with the URL can access the content.

Be mindful about not sharing sensitive data, even in drafts or private messages. And, if you can, use non-easy-to-guess filenames for posts you want to keep private.

Fabio Manganiello Author

A corollary to the concept of small tech neighbourhood is the idea of local tech communities.

It's easy for folks like me, who have been self-hosting on computers in our closets since high school, to lose track with the common non-tech person.

It's easy for us to say "just self-host your Nextcloud, Matrix, XMPP, Mastodon, Searxng, Wallabag etc.", adding a "it's just a docker run command".

I've also seen "just run your f*cking website" articles get to the top of HackerNews.

But then I thought: imagine if it was, say, the bakery industry rather than the software industry to go through a process of #enshittification.

Imagine that buying your bread or croissant tomorrow requires a $100/month Bread+ subscription with plenty of upsells, an age verification process that requires you to send your passport or retina scan to the Big Bread consortium, a tracking system that measures exactly how much bread you eat at home, and that keeps selling your eating habits to whoever wants to purchase them - all while your bread quality gets progressively worse over time, and the oligopoly that holds it, after acquiring or putting out of business any credible competitors, starts experimenting also with selling expired products, wrapped in paper littered with ads that you have to spend at least 30 seconds reading before you can make your sandwich.

Of course people would be outraged.

But many, no matter how outraged they are, will just swallow the bitter pill and stick with the Bread+ subscription (perhaps because they don't care enough yet to trigger a change in their habits, perhaps because they have other priorities and battles to fight), hoping that the next change to the T&C won't make it even worse.

And some will instead start looking for alternatives.

Would it make sense for a professional baker who's been in the business for decades to tell those folks "just bake your own f*cking bread" - and then complain that not enough are moving out of the Bread+ walled garden?

Or perhaps would it make more sense for that baker to volunteer for a competitive price to sell their bread to its friends, family and local community?

We all know that running your own stuff on your own machines is the best way to avoid enshittification. Just like wisely selecting and mixing your wheat and butter to bake your bread and cakes is the best way to make those products the way you like them. But not everyone will do it, nor they are supposed to do it.

People live different lives, have different priorities and choose different battles. Any pragmatic human must at some point delegate some tasks - that's how modern societies were born. We don't judge those outside of our area of competencies for not being able or willing to perform a certain task, no matter how trivial that looks to us.

An average neighbourhood has someone good enough at baking that they can sell their products to their local community.

And nowadays perhaps it also has someone good enough with computers that they can probably run on an old laptop or unused VPS stuff like a small Matrix server, a GoToSocial instance, a Nextcloud instance or an Immich server.

And they could probably serve that to small local groups of 10-20 people for something like $10/month (and at low volumes those services usually don't even require much maintenance).

It can be $100/200 month that can abundantly cover the cost of a small VPS, let alone the cost of running a miniPC at home.

It'd be a bargain for the subscribers too - nowadays for $10/month you don't even get a Netflix subscription, let alone a complete cloud alternative with no trackers and no ads.

It can even be a reliable source of income for IT folks in areas that would otherwise not provide other viable employment solutions.

In a healthy society with a high level of immunity against enshittification, your local self-hoster should probably become the digital equivalent of your local baker or your local pub.

#smalltech #techneighbourhoods #selfhosting

Fabio Manganiello Author

The latest version of #madblog introduces a separate page, under /unlisted, for posts that the author can send to the Fediverse (or simply keep in a separate area of their blog) without publishing them on the index.

This is useful for quick thoughts and interactions. Worth enough to mention, but not enough to deserve their own dedicate article on the blog frontpage.

To create an unlisted post, simply create a Markdown file under /replies/ with no like-of and reply-to metadata headers:

cd $MADBLOG_DATADIR
mkdir -p replies

cat <<EOF > replies/unlisted-post.md
# My first unlisted post

I thought that it'd be cool to share with my followers on Mastodon that now I can trace likes and replies with git bisect.

I'll also tag @friend@nerds.tech because he'll probably think it's cool.
EOF

Save the file, then you will find your post on the /unlisted page.

Example on my blog: https://blog.fabiomanganiello.com/unlisted.

Fabio Manganiello Author

That oddly satisfying feeling of browsing your blogging and social media history with git log and git grep #madblog #activitypub #indieweb

Screenshot of git log from a terminal directory. It's executed from my blog directory populated with Markdown files and served via Madblog. It shows all of my replies, posts, modifications and reactions as commits.