I’ve been running this website on IndieWeb principles and tech for over a year now, so I thought it was time for an updated edition.

I’ll not rehash everything in the original post because it’s all still basically relevent (apart from the bit about syndicating to Twitter, for obvious reasons), but I’ll cover some of the new stuff.

Twitter

At this point I’ve stopped using Twitter entirely, which is probably for the best. As I noticed last time I took a social media break, Twitter is simply not the real world, and while a lot of online culture has historically existed downstream from it, you don’t actually miss anything by not looking at it.

(I think even the point about internet culture being downstream from Twitter is increasingly less true in a world dominated by TikTok, a platform I find to be the digital representation of a headache, but I am now in my thirties and officially Old so don’t listen to me.)

All of this is to say: this site doesn’t syndicate to Twitter any more. I’d love to say this was a moral decision but in reality it was made for me when they killed their API.

Threads

I’m less fearful of Threads than many Fediverse-aligned folks, and I haven’t made any effort to block it from my Mastodon instance, even following a few people (mostly tech journalists). The few times I’ve looked at Threads it seems to be a mix of tepid normie takes, weird American liberal politics and truly bizarre pro-Israel propaganda. I’m good, thanks. I am not on Threads save to park my username for when they let Threads folks follow Fedi users.

Bluesky

It seems wild to think that when I wrote the previous post I didn’t have a Bluesky account but here we are, a year and change later, and it’s fully integrated into my publishing flow as well as maybe actually my favourite platform.

The Bluesky team seem to genuinely give a shit about adding moderation and anti-harassment tools, and while there have certainly been missteps it does seem to be moving in the right direction and without a lot of the Dorsey-aligned free-speech absolutism that Fedi folks seem to think it operates on. Jack Dorsey has expressed disappointment with the direction Bluesky has taken, which is honestly a pretty solid endorsement.

I also think AT Proto, the underlying protocol, has several key advantages over ActivityPub. It’s just a shame they aren’t compatible, though Ryan has been doing some excellent work in bringing them closer together.

I helped build the Bluesky integration for Bridgy, which is now almost full-featured. All my notes go to Mastodon and Bridgy, and replies and reactions are backfed from both.

Micropub

This is the biggest bit of work I’ve done to my own setup since I wrote the previous post. At the time, I wrote:

The only thing I’d really like to add is some kind of Micropub-compatible setup where I could post notes as easily as I do through a Mastodon app, rather than needing to use Git on my computer.

I managed to implement this using the Micropub spec. I explored a few self-hosted options, but none of them really play super nice with my static site setup.

I ended up writing the endpoint myself, in Go, and hosting it on an AWS Lambda, using an S3 bucket as a temporary uploading point for images using Micropub’s media endpoint. This works quite well, in that it’s cheap and integrates nicely with GitHub, but has a few key pain points:

  • Working with Lambda kind of sucks. I don’t really like serverless tech in general - I think it ties projects far to closely to specific cloud vendors - but for a personal project it’s fine. Not good. But fine.
  • The publishing flow goes like this:
    • Publish to Micropub endpoint
    • Micropub updates Git repository
    • GitHub Actions publishes to the web page.
    • GHA waits for the page to be publicly visible.
    • GHA tells Bridgy to syndicate the post, and updates its POSSE metadata accordingly.
    • I wait for that to get published to the website.

This is, to my mind, at least a couple more steps than it ought to be, and it’s largely due to my decision to host a static site. It’s fine for fire-and-forget, but then you have to remember to check a few minutes later to see if everything showed up. I’d move back to WordPress, but I really like having a Git repo be my authoritative data store. I think what I want is essentially a Hugo server. I don’t think that exists.

For publishing, I use Quill, a Micropub webapp by Aaron Parecki. It’s really good - simple enough to work on poor data connections, and has all the features I need.

I’ve added a couple of things to my Micropub endpoint which are not necessarily typical and might be considered extensions of the spec, but they’re nice for my use case.

Firstly, I interpret tags starting with a # symbol as hashtags, and these get appended accordingly to the syndicated posts on platforms supporting hashtags.

Secondly, I interpret the location data in the Micropub request not as a location that actually gets used, though I do store it, but as a switch to turn on geotags for photos I upload.

Photos taken on iPhone contain a lot of EXIF data, and this is neat and I like it, but I don’t want people to be able to find out my precise address from pictures of my cat. Instead, I strip all the location EXIF data from photos as part of the site’s build process, but include it in the post itself if the Micropub request includes a location. You can see an example here (at the bottom of the post).

What’s next

I’m pretty happy with the publishing flow at the minute. Something I’ve chipped away at for a while is my own Webmention endpoint, similar to my Micropub endpoint; Webmention.io is great but doesn’t support emojis and I’d like to own that data myself. It’s pretty low priority under the ten billion other side projects I have going, though.