It was a rainy, chilly day this past Sunday. I had been meaning to work on Picodon. But I was feeling low enthusiasm for that project. So, I spun my Wheel of Side Projects. It landed on “ActivityPub insult bot”–a similar theme but it felt like something I could actually get working in a day. So, Insultron2000 was born!
I’ve also had “ActivityPub Lambda” on my maybe do list for awhile now. All the pieces are there in Amazon Web Services for a decent, low-maintenance ActivityPub node:
CloudFront can do SSL, caching, and use my own subdomain. An API gateway can handle all the inbox & outbox parts of ActivityPub via Lambda functions. SQS can take care of the delivery work queue by feeding jobs to functions. CloudWatch alarms can trigger periodic scheduled functions. And then, there’s DynamoDB and S3 for storing & publishing data.
While not as neglect-able as a fully static web site, AWS seems to be cheap at hobby scale and easy to let lie fallow when I get bored with the project. By speaking ActivityPub directly, I don’t need to maintain a fediverse server like Mastodon or Pleroma. I don’t need to rely or impose on anyone else’s community server. It’s very light. I’ll be watching to see how the bill on this thing shakes out, but I expect it to cost pennies per year.
I’m also hoping to refine this thing to be more generic. Push the ActivityPub machinery into the background. Support a simple local API for implementing future bots. Maybe reduce per-project code down to a single file with hooks for events and helpers for interacting with the fediverse.
This could even make it easier to stand up a single-user (or few-user) ActivityPub node. That’s also problem space at which Picodon is aimed: Lowering the trouble & cost of fediverse participation. The main difference with Picodon is living on Glitch. Being there should mean that it’s easier (and more fun?) to remix your own version of it. Conversely, AWS is kind of a slog for tinkering. I mean, Ironically, AWS felt more fun this weekend–but I chalk that up to novelty vs fatigue.
I’ve also got some notions to see how much of this thing I can push into static hosting. Not the inbox / outbox endpoints that expect POST requests, of course. But, the ActivityStream objects and collections can be served up from a static S3 bucket or similar. Since everything in the ActivityPub protocol is generally addressable via arbitrary URLs like a good REST service, I should be able to gin up a somewhat generic service that could be dropped into an otherwise static site not unlike Disqus for comments.
Anyway, I could delve into more technical specifics here, but I think I’ll wrap up for now. If you’re interested, come follow along at my GitHub repo.
And if you’re up for a dumb insult, drop a mention to @Insultron2000@insultron.lmorchard.com on the fediverse!