Micropub

Although I would have enough things to do for my studying, I took some time today to do some programming on my Micropub endpoint. I can now use other git hosting than Gitea and can add alternative text to images. Here is a little test:

I use BunnyCDN as storage for my Micropub media endpoint, where I upload all the photos and other media files I publish on my blog. When I upload a new photo the media endpoint first uploads the original file with the name of it’s SHA-256 hash value (so when I upload the same file multiple times, it doesn’t create multiple files). When I upload an image (JPEG or PNG) it also gets optimized and resized to a maximum width of 2000 pixels using the Tinify API (and then uploaded to BunnyCDN too), doing that significantly reduces the file size of the images displayed on my blog.

It would be probably awesome to also serve different formats based on the Accept HTTP header (WebP for browsers that support it) or different sizes, but I decided I want to hold my perfectionism (and the complexity) in check and settle for using just one optimized file version in the original file format. If at some point all browsers support WebP, I might consider using only WebP files, but until then it still takes time.

At the moment I don’t backup the files from BunnyCDN (I trust that they - or I - don’t accidentally delete them), but I could probably setup a cron job to regularly copy new files via FTP from their storage to another storage.

Tinify or TinyPNG or TinyJPEG is the service I use to automatically compress and resize images uploaded to my micropub media endpoint. It’s a great service with a nice developer API that also offers a free limit of 500 compressions per month and has a pay-what-you-use policy after that (but I won’t upload more than 500 images per month anyway). I use a library written in Go to use the API.

The first things I did this year was to create a media endpoint for my Micropub server. It works by uploading files to BunnyCDN via their storage API (great service and easy API!). However, now that I have this endpoint, I would also like to use it. It seems that there is a lack of clients that support uploading media to the media endpoint and then returning me the correct URL. I can use Indigenous to upload photos from my phone, but it seems like other file formats aren’t supported. How am I supposed to create posts with audio or other files? Also Micropublish (the client I usually use on PCs) doesn’t seem to support media at all.

Can someone please give me a tip, which client I should use or do I need to develop my own? Thanks!

Please also remind: My operating system are Linux, Windows and Android. Clients for macOS or iOS are pretty useless to me.

Update: Kristof De Jaeger replied to this post and promised some new features for Indigenous on Android. Thanks a lot! I’m still in search for a desktop solution though. I thought a bit about it and will probably create a basic web interface that allows me to upload any file until there’s better support in other Micropub clients.

Update 2: It seems like Jamie Tanna is in a similar situation. He gave the tip to look at Quill.

I plan to add a bit of ActivityPub to my blog to be able to interact with the fediverse, without the need to use Mastodon, Pleroma or my current microblog. Just my static Hugo blog with it’s dynamic Go-backend. Because I don’t want to implement everything from scratch - I haven’t yet added media support for MicroPub - I am in search for libraries that help implementing ActivityPub, or at least give me a starting point. I discovered the library activityserver, which is used by a tool called pherephone by write.as, maybe that can help me.

What I still have to think about though, is how I’m going to connect it with the rest of the system. And what’s also still missing: The media endpoint and update support for MicroPub (I should do this first).

Or should I just cancel my plans with ActivityPub and wait until Fediverse software supports IndieWeb technologies? 🤔

The great thing about my custom Micropub endpoint for Hugo is, that I can add all the features I need. Today I added a feature, that purges the BunnyCDN cache 10 seconds after a new entry got published. Sometimes it happens that I open its URL before the Hugo build is finished and then a 404 page gets cached. Currently Hugo needs around three seconds to build my blog (on the server, on my desktop PC it’s even faster).
I can now make use of Micropub to post on my blog! More information: I am in search for an easier way to blog from the go for quite some time now. Recently, I implemented a web-based form to submit new posts using the API of my self-hosted Gitea. While that worked, it was still not optimal. I already heard of Micropub before, since I joined the IndieWeb, but I was always a bit scared of complexity to develop my own solution.

A few days ago, I built my own publishing form on my blog to be able to create new posts on the go. It works great, but Micropub would be even better, because I could also use Micropub-compatible apps. Just today I found Indiekit, which is exactly what I am looking for:

The immediate goal of this project is to provide a Micropub endpoint that can be hosted on a service like Heroku, configured via files stored on a GitHub repo, and save posts back to that repo for publishing with a static site generator such as Eleventy, Hugo or Jekyll. The software is fully documented and tested.

I probably just need to find a way to use Gitea instead of Github, but that shouldn’t be a big problem. I need to further investigate Indiekit.

Jan-Lukas Else
20 years old student who writes about everything he cares about.