Beantown — A social network for coffee lovers built on ActivityPub

Nick Felker
4 min readMar 26, 2024

Six years ago I downloaded Untappd, a social network based around beers (and ciders). As I documented in an earlier blogpost, I forked the open-source project Sharkey, which itself is based on the open-source project Misskey.

This new project is designed as a sort of Untappd but for coffee, allowing you to rate each one and build up a corpus of your favorites. The last time, I had just gotten everything to run in a Docker container on my PC. But now the app is live! You can check it out at

I decided to get the domain and set it up on a cheap Linode server. It is just enough that I can SSH into it and have it run the project’s docker-compose file. I had to upload a few files from my .config directory into the server’s home directory.

It’s fairly easy to setup a domain with a Linode server.

Once all that was done, I could go to my domain and start using it as a regular account.

However, there were still a few more changes I needed to make.

In my config.yml, I needed to update the url field to and then my setup was ready to go.

Or was it?

Not yet! Beantown runs on port 3000 when you’d expect it to run on port 80 like a regular HTTP application. Unfortunately it’s not that simple. Misskey requires a reverse proxy to support HTTPS connections. That means I need to setup Nginx first.

Thankfully the Misskey docs have instructions on how to do this. I can get a cert through Let’s Encrypt, which requires me to use their certbot CLI to update my Nginx configuration file.

You need to watch out for the correct order of operations. You need to

  1. Install nginx
  2. Setup Let’s Encrypt
  3. Then you can add a misskey.conf file
  4. Replace all instances of example.tld with your domain, ie.

Otherwise I ran into a lot of obscure errors.

I also had to force-restart the TCP process before my nginx could run correctly.

Sometimes the SSH window just stops

Once all of those things were set, I could launch a browser tab and get to my website.

I understand that a social network for people who are so obsessed with coffee they’ll fill out regular checkins is very small. I think that’s good in some ways, but it limits access.

Why I picked Sharkey as the base was its ActivityPub integration. From Mastodon, you can find my account. In fact, you can follow my coffee adventures from any ActivityPub client.

Now you can follow my coffee escapades across the Fediverse.

A challenge for any Fediverse app is going to be ensuring everything meets standards. There’s not really a good test suite I found where I can see how my profile appears in other services, certainly not a robust validator that exists for other standards. And because projects like Sharkey are made by volunteers doing open-source, there’s no speedy SLA.

I’m still getting the hang of what tools and services are available for ActivityPub applications.

When you check-in a coffee, you can start typing and options will appear in a dropdown. Where does this list come from? Good question! I haven’t been able to find a good database to source, so I just started creating one from scratch. It’ll take a while to be populated, so filing GitHub requests might be the fastest way to figure out priority.

Also make sure you check file permissions on the `files` directory!

So the state of the app right now is that it works! I’ll start using it. My goal is to develop a better sense of my own flavor palette. What kinds of coffees do I actually like? I think it’ll be interesting to find out the answer.



Nick Felker

Social Media Expert -- Rowan University 2017 -- IoT & Assistant @ Google