New beginnings

Published by Beto Dealmeida on

About joining Mastodon and Gemini


A week ago I joined Mastodon looking for a social network where I could have more meaningful conversations, away from ads and algorithms. I've used Mastodon in the past, creating accounts on a few different instances based on my interests (music and OSS) and using them regularly for a while. I've also set up a small instance for my group of childhood friends, at a time when the group was concerned with online privacy, but unfortunately it never got any usage and I eventually turned it off.

I never really liked using Mastodon accounts on other people's instances. It feels unwise to invest in an account that I don't fully control, even though I know that Mastodon supports migrating accounts. If I'm going to use a decentralized and federated social network I'd rather run my own instance, under a domain that I control and a server that I have access to.

At home I run a Raspberry Pi server from my closet. My home internet is offered by a small local provider via a line-of-sight connection, and unfortunately the router doesn't get a real IP address that can be reached from the internet. To have the Pi working as a server I use, which gives the Pi a real unfiltered IPV4/6 IP address for $8 via WireGuard.

I'm already running a few services on the Pi. It runs a custom-made home automation service that I wrote called Señor Octopus, which I use for turning lights on & off, monitoring air quality, keeping track of my and my dog's locations, and more. It needs to run a message queue (MQTT) and a database (Postgres) for some of the automations. Additionally, it also runs a Slack bot that allows people to send each other shout-outs, which I developed for my company's Slack server.

The only problem with the Pi server is my internet connectivity. The bandwidth is somewhat limited (20↓/10↑ Mbps), and it can be down sometimes for longer than a day. But since the home automation won't work if the internet is down anyway, and the Slack bot is not a critical service, I've been really happy with the Pi server, and I'm still amazed by how much we can do with a $35 machine these days.

For Mastodon, I realized I also didn't care if my instance was occasionally down. So I installed my own instance on the Pi. I've been following a few people on topics of politics, programming, and music, and it's been a refreshing experience. Interesting posts, nice conversations, no ads, and I'm not overwhelmed with content — I can read my feed in a couple minutes and close the app.


One of the things I learned about on Mastodon in the past week was Gemini:

Gemini is a new application-level internet protocol for the distribution of arbitrary files, with some special consideration for serving a lightweight hypertext format which facilitates linking between files.

I loved the idea of having a "web, stripped right back to its essence"!

The internet has changed a lot since I started using it back in 1993, going from a collection of well-tended personal gardens of content to a handful of sterile websites controlled by huge corporations. I was already a fan of the IndieWeb, I was already running my own blog (and blog engine), but one of my concerns was the increasing complexity of web browsers: it's practically impossible for a developer to write their own browser these days.

I remember thinking that someone should write a browser that only reads Markdown, and Gemini is very close to that.

This week I started working on my blog engine, Nefelibata. Nefelibata is a static site generator that "announces" new posts on social media, linking back to the original blog post. When the website is rebuilt it will then collect any replies and store them locally, so that the comments are displayed in the blog along the post.

Nefelibata is very modular, but unfortunately one of its core assumptions is that it's going to produce HTML for the web. The assumption was strong enough that I decided to start a new branch from scratch. I implemented a Gemini builder and an FTP publisher (Nefelibata can publish to many places, including S3, NeoCities and IPFS), the minimum I needed to get a capsule running.

Instead of hosting it on my Raspberry Pi, for now I'm uploading the gemtext files to a VPS, where I have the domain running. I run a custom-built identify server on the VPS, that I use for IndieAuth, and I'm not sure if I'd want to have that moved to the Pi, given the connectivity limitations. Something that I need to think about.

On the VPS I installed Jetforce to serve the Gemini capsule, and — I never thought I'd ever say this again! — I'm excited to start adding a few CGI files.

This is fun.