I'm happy to announce that my barebones ActivityPub server, implemented in Node.js/Express, is now open source! I intend for it to be a reference implementation for developers who are adding ActivityPub to their own services, but also it is an application server that you can build on if you want.

In other words, t's a few hundred lines of code that lets you create Mastodon-compatible accounts that can accept follow requests and post stuff to their followers.

github.com/dariusk/express-act

I actually built a little toy service (that I will also eventually open source) which converts any RSS feed to an ActivityPub actor that you can subscribe to in Mastodon (or any other AP-compatible client).

Play with it if you like! It is SUPER rough and most feeds end up horribly rendered in Mastodon but it's still kinda cool to see it work: bots.tinysubversions.com/conve

@darius it didn't work. :( It only took me to /u/test instead of the user page for the bot I tried making, and when I manually changed the URL, it said no bot was found.

@darius also it appears to have changed the test profile to the RSS feed I chose, or we both had the same weird idea for what feed to try... (your Mastodon profile's own RSS feed...)

Follow

@dave that is what happened! It redirected you because the feed already exists as "test", heh

@darius oh man, the ol' "it's not a bug, it's a feature" except legit this time! 😃

Sign in to participate in the conversation
Friend Camp

The decentralized web is about trust. You should only join Friend Camp if you personally trust Darius Kazemi with your social media data. You probably only have that level of trust if we are IRL friends or have been internet friends for a long time. Generally speaking this is a small, closed community. In the end, Darius is the arbiter of what is allowed here. If you don't have a good idea of the kind of behavior that flies with Darius, again, you probably shouldn't join this instance. In the interest of specificity, we do have a code of conduct and privacy policy which you should read.

Friend Camp features several modifications that were requested by our users.

  • you can log in via any subdomain, which means you can log in to multiple accounts in the same browser session (for example, log in once on friend.camp and then as another user on alt.friend.camp)
  • they are no longer called "toots", they are now "posts"
  • if you have a locked account and you get a follow request, a reminder appears under your "post" button (on normal Mastodon mobile it is otherwise buried in a sub-menu and you might not see it for a long time)
  • the emoji dropdown is a neutral smiley face instead of the cry-laughing smiley
  • @mentions are rendered as "@user" for a Friend Camp user and "@user@domain" for remote users. This helps clear up when you follow two people who have the same username on different servers.
  • there is a "never ask me again" checkbox on the confirmation for clearing your notifications -- more info here
  • images in a CW'ed post are collapsed behind the CW. When you expand the CW, you can see the whole image immediately. more info here
  • When an mp3 link is in a post, we also embed an inline mp3 player. git commit here
  • 500 characters of profile text git commit here, requested by @deerful

Important Bit from the Privacy Docs

If you want decent privacy (the info doesn't leave this server), the only way to do that is to set your account to private, only accept friend requests from other friend.camp users, and only ever @ mention other friend.camp users. Once you start talking to people on other servers, all bets are off. Any private message you send to someone on another server could be looked at by the admin of a different server. This is kind of like email: if you are on a private email server, and you send an unencrypted email to a gmail account, congrats, Google now has the content of that email. But also, you do this every day, so, hey. The internet!

Our beautiful icon is based on photo3idea_studio from www.flaticon.com, licensed CC 3.0 BY. It has been modified by @casey@friend.camp!