How to go block-less with the WordPress ActivityPub plugin

Being the web performance zealot I am, I strive to having as little JavaScript on my sites as possible. JavaScript after all has to be downloaded and has to be executed, so extra JS will always have a performance impact even when in the best of circumstances it exceptionally does not impact Core Web Vitals (which are a snapshot of the bigger performance and sustainability picture). Hence when adding blocks in WordPress, I check if the block is entirely rendered server-side and if not I look for alternatives to avoid multiple files from wp-includes/js/dist (and in the case of some 3rd party blocks the entire React JS and more) being loaded.

For that reason I tested the WordPress ActivityPub plugin with the reactions block loaded as per these guidelines and indeed it triggers the loading of hooks.min.jsi18n.min.jsurl.min.js, api-fetch.min.js (all in wp-includes/js/dist) and 2 files from the plugin itself (/wp-content/plugins/activitypub/build/reactions/view.js and /wp-content/plugins/activitypub/build/remote-reply/view.js).

To be able to reduce the dependency on those JavaScript files, 2 questions needed to be answered; how to have reactions (which I like a lot) without the JavaScript-driven rendering and what is that remote-reply thing.

Starting with the latter; “remote-reply” handles the federation of local comments on reactions (comments) from the Fediverse, showing a modal window where the commenter is asked what ActivityPub account they want to post the reaction from. I decided this was not that important for me and –with some help from Matthias @pfefferle who always gives great support- came up with a couple of lines of code to not “do” remote-reply on this blog.

Now that Fediverse reactions block is very nice and I did want reactions showing on my blog, so I started looking at the database and the ActivityPub plugin code and saw that all Fediverse reactions were stored in the wp-comment en wp-comment-meta db-tables and were in fact accessible with the WP_Comment_Query class. With quite a bit of trial and error I ultimately ended up with a totally server-side generated solution that looks pretty nice (and similar to the JavaScript-rendered one).

If you’re interested, you can find the code in this gist, but don’t expect it to be good. Some negatives include no language handling, unminified CSS inline and the placement of the reactions might not work on every theme as I hook into the comments_template action to try to show them just before the comments. But who knows it might just work for you as well?

As seen on YouTube; Angine de Poitrine live on KEXP

Angine de Poitrine live on KEXP. French-Canadian Dada-ist instrumental rock-techno-jazz maybe? A bit of Can, Primus, King Crimson and Sun Ra and a whole lot of virtuoso drums and guitar loop-pedal juggling. If I could I’d go straight for the moshpit but it’s just me in my homeoffice so …

Some of the YouTube comments (not a cesspool, for once) are spot on;

Aside from their insane technical skills, the fact that the guitarist can keep the looper in time whilst playing a microtonal guitar on top of odd timesignatures blows my mind. All hail!

No artificial intelligence without original thought could come up with something this bizarre and enthralling.

my wife isn’t going to appreciate a single second of this

Anyway, just look & listen;

Angine de Poitrine - Full Performance (Live on KEXP)

w.social invite code

Screenshot of the w.social landing page where an invitation code has to be entered.So regarding that new EU social network (which is said to be decentralized but unclear if that implies ActivityPub which would make it more relevant in my book); entering a string in the “invitation code” and clicking “continue” does not result in an XHR request to the server and there’s a lot of JS on the page to handle the invitation code.

This implies the code is checked in the browser so the correct code(s) is somewhere in the JavaScript. So it should be possible to reverse-engineer it, no? 😉

Any takers for this challenge?

blog.futtta.be on the fediverse

Pretty sure no-one is waiting for this, but after having spent a couple of years on the Fediverse (Mastodon in my case) I decided to add ActivityPub support to my WordPress installation via the ActivityPub plugin.

I have the WP Rest Cache plugin active, so I’m expecting things to gently hum along, without (most likely) or with these posts gaining traction.

Kudo’s to Stian and Servebolt for assisting me to get the webfinger endpoint to work, which is … not self-explanatory on hosts that have unoverrideable configuration on the .well-known folder 🙂

Joni’s “Both Sides Now”

I watched a movie this evening which featured the main actress singing “Both sides now” and is was moving until it became too musical-like for my taste. But now I’m in a Joni rabbit hole again, listening to all great versions of Joni performing that song. One of the earliest live video’s I found was from 1969 and on the other end of the timescale there’s the Grammy one from 2024 with Brandi Carlile, but for me the most touching rendition by far is this orchestral one from 2000;

Joni Mitchell - Both Sides Now (Live Tribute concert, 2000)

AOPro soon to have a wizard tab

Currently the last lines of code are being added/ reviewed to integrate a “wizard” tab in Autoptimize Pro, which should help new users to switch between different presets all while keeping backups of original settings so one can easily try out different optimization levels. Have a look at below screenshot to see where we’re taking this 🙂

screenshot of the soon to be available "wizard" tab in AOPro

And while we’re at it; have a great 2026, whether you’re using Autoptimize, AOPro or if you’re just reading this out of curiosity!

Radiohead 2025 jukebox

As a long-time Radiohead fan I was happy to see video of their first gig in many years and although did enjoy the set I don’t have the feeling I’m missing out on anything really. Great songs, great musicians but nothing new, nothing really unexpected (not counting a couple of songs that they only very rarely perform live).

I watched the vid and then switched to a The Smile live show from 2024 and (although) it’s very different and -to me- a lot more relevant than what Radiohead is doing now which (to me) seems “just” a rehash of past greatness maybe?

Radiohead - FULL SHOW - live Madrid 2025-11-04 night 1 European Tour complete concert

Opt-out of LinkedIn’s AI scheme now (last day Nov. 3rd 2025)

If you prefer your content/ data not to be used to train LinkedIn’s AI, you can opt out at https://www.linkedin.com/mypreferences/d/settings/data-for-ai-improvement (but only until tomorrow, Nov 3rd?).

Crazy that this requires an explicit opt-out by the way, it really should be opt-in (so off by default).

More info about this can be found at tweakers.net by the way.

Feel free to share 😉

Improving LCP the wrong way

Performance hack seen on a customer site; fix the bad LCP (due to an animation in revslider) by loading an inline (base64’ed) png image which according to FF is broken and later in the rendering process hiding & removing it.

Even though that image is not *really* used, tools such as Google Pagespeed Insights pick it up as the LCP image and the score is “in the green”.

Not sure this is really helping performance (spoiler: it’s not), but Pagespeed is happy and so is the customer. Crazy!