eordano.com

Regeneratio

2024-07-24

In 2022, I took a leave of absence from working on Decentraland to explore my curiosity over self-hosted systems, breaking away from using centralized social networks, malleable software, hardware that doesn't respect my rights, and avoiding cloud service providers. One of the experiments that came out of this exploration was Regeneratio, a small community in which we used a bundle of different self-hosted systems. I had a partner on this project, ras, with whom we managed the servers, providing an experience for the other members (maybe around 30 people, about 5 active on any single day). We had become fatigued by small and large abuses of power from centralized services and big technology companies. We organized weekly meetings and explored the practicality of replacing cloud services with open source alternatives, and hoped to create a personal digital habitat that felt more like a home, and less like a shopping mall.

This is a recollection of what worked, what felt odd, and lessons learned for the future. It's divided in three parts: an overview of our self-hosted setup, notes about our journey, and a final reflection.

Our Self-Hosted Setup

Infrastructure with Kubernetes

One of our early design decisions was to allow other communities to replicate our setup; and the most infrastructure-neutral way to achieve this was by configuring all services we ran with k8s. We made heavy use of helm charts, but at that time it was hard to find good examples. I don't know if the ecosystem has evolved since then (I believe that's the case), but back then, we were super grateful to Bitnami and their high quality charts. We set it up to run with Digital Ocean's managed solution. Access to the k8s API was available through a jump server, with our workstation's IPs allowlisted for entry.

In retrospect, the decision to use k8s was good, although onerous. I remember spending whole days debugging and patching container images to get some functionality working. But I still have a backup of this setup, it looks reproducible enough and there was no dirty state lying around. It is pretty lightweight, just a couple of dozen files in total, and no file has more than 40 lines of code.

Services

The first service for users that we wanted was email. It is one of my favorite internet protocols, although it has lost its luster in the past decade due to spam and monopolization/oligopolization. I remember it was hard to make it work within Digital Ocean's managed k8s solution, and that we also ended up using an external service for outgoing email. In the end I believe we gave up and set up a different VPS outside of k8s, and some solution like mail-in-a-box or similar. RoundCube was the most acceptable front-end we found at that time. I hope that by now, in 2024, someone has designed an open source webmail solution that doesn't look stuck in the UI paradigms of 2005. SnappyMail and conjoon look promising (I wonder why does it look like all open source webmail projects seem to be written in PHP).

To log users in, we used KeyCloak. It was great and easy to use. In the future, only using services supporting SSO heavily limited our choices, but it was best for our community's experience to not have one password for each service. I now see SSO support as a litmus test for whether a self-hosted project is serious and/or mature enough. I am a little appalled that many open-core startups tend to paywall this feature, but probably makes sense for their business model.

For talking with each other we spun up a server for Matrix, an end-to-end encrypted, decentralized, federated chat protocol. We used a Synapse server. While I was restoring a backup of that database, I noticed that all messages were end-to-end encrypted indeed, and although it would be great to read what we were talking about, I'm happy for the privacy we provided to our members, prohibiting access to others' private conversations by design. We also ran a Discourse forum, but did not promote it anywhere. This allowed better long-form discussions.

We had also a small GitLab instance with CI support, allowing anyone to create their own blog with GitLab pages. We found the integration between GitLab and k8s to be quite convenient, and fun to use and configure. We also set up a NextCloud service, but it had almost no usage.

Our Journey

During our regular weekly meetings, we discussed and evaluated developments from the prior week, examined forum posts, blog posts, and brainstormed new ideas for the upcoming week. They helped a lot to clarify what was our vision for the project. We asked every participant to pick a three-letter username, a handle representative of "an animal, vegetal, or mineral that you feel represented by". The subject of SmallTalk came up pretty often.

Among the ideas we prototyped, my favorite was called share, a simple webapp about writing small JavaScript programs and sharing them with other people connected (somewhat inspired by unison). The implementation was pretty simple: all users connect to a server with WebSockets, the server relays messages to other people. We spent a day working on this project, implementing it in the morning and spending the rest of the evening playing around with it. Since it only connected to other peers of Regeneratio, we didn't have to account for security considerations, making it very easy to build. You can build really fast when you are not in an adversarial scenario, and it felt refreshing, like collaboratively painting on the browser, with brushes of coding logic. The social dynamic was nice.

Another important one was a website called Activity, which would be a portal to connect all your personal data, bringing it from the Matrix, Discourse, email, and GitLab services. Our goal was to try to make personal data access more efficient by providing a single interface to all of it, without needing to know the particularities of how to access any particular API. We also used it to guide our weekly meetings.

And then one day I run into FUTO and I was positively surprised, we were very aligned in our ideas and intentions. So, pursuing the question: "is there any other organization or project of which I should know that I haven't heard of?", we started The Guide, mapping out various foundations, organizations, and open-source projects that aligned with the ideas of Regeneratio.

A few weeks later, developments on the Decentraland Foundation prompted me to return in a more involved way, until Yemel Jardi took on the leadership of the project (he's doing an amazing job there).

Final Reflection

I'm still motivated to explore the subjects on which Regeneratio hovered around. I self-host a number of services now, for the most part stopped using social media, try to bring about the ideas of malleable software in conversations, and favor buying hardware that is open source and allows me to decide which software to run on it.

It feels like all the ideas are still warm, that our society still has problems with finding a good balance with technology and the information onslaught that the internet brought about. We were on to something with Regeneratio, but our words were not quite efficient at describing what we wanted.

Reading things that I wrote back then (example) makes me feel good: two years later it still feels exciting, a path I'd like to explore. But it also triggers some inner conflict on me for abandoning this project and disconnecting its community.

Some of the Regeneratio ideas have a lot to do with fixing the Coding Army Conundrum, and some notes I wrote back then (before ChatGPT) already explored how to use AI assistants to navigate your personal data.

I think I'd like to start a similar project to it.


Comments can be found on eordano.com/3kyjq3dnczb2g