Working through displaying Webmentions

Now that this site supports Webmentions, I’ve been having some fun digging into how I’d like them to be presented.

The theme I’m using is very bare-bones. I created it using Underscores a couple years ago when I decided I had lost touch with the code I was using and for some reason wanted to get back in touch? I don’t know, but I like it.

I created a plugin specifically for my adjustments to the IndieWeb, Webmention, and Semantic Linkbacks plugins. There are a couple scripts and styles I decided I didn’t need as well as a custom comment walker I decided to remove.

At the same time, I created another plugin specifically for adjustments to WordPress. I removed all default emoji handling to see if things would display better in feed readers and adjusted some of the markup output by default—sorry, Windows Live Writer.

Back to comments.

Before I started, the theme’s comment template output everything stored in the comments table as if it was a comment. This makes sense because WordPress doesn’t have a complete idea of “custom comment types”, so it treats them all the same.

The first thing I did was break the query for all comments into comment types so that I could display them in separate sections. WordPress has a function that should do this, separate_comments(), but it is hard coded to support only comment, trackback, pingback, and pings. I have my eye on proposing a filter there, but I’m guessing there are wider concerns with comment types that need to be addressed at the same time.

I’ll revisit that code in the near future. I was just winging it today and never actually went back to review some of those decisions. 🙂

I’m starting with a section for “Likes”, a section for “Mentions”, and a section for “Replies”. Once I get more familiar with other actions and how I see them being used, I’ll likely mix things up a little more.

For Likes and Mentions, I decided to keep things simple and display the avatar, name, action, and date. This displays a bit more than a facepile, but less than a full comment.

It’s been interesting seeing what data actually comes along with a Like or a Mention—sometimes it’s the full post—and it’d be fun to figure out the right way to display that in the future. I could see manually editing some mentions and displaying them differently so that the context is displayed. I envision something like the first 100 characters before and after the actual mention itself.

I removed support for comment navigation, as it’s something I don’t want to deal with right now and I have the option to paginate comments turned off in WordPress.

I was low-key annoyed that wp_list_comments() only supported a style of ol or li, but then went further to the comment walker and saw div was also a supported option. I created a new trac ticket for that and tagged it as a good first bug for anyone who may want to contribute.

My next annoyance is that comment author names are wrapped with <b> and so here I am deciding that of course I should add a custom walker. Exciting!

Of course now I’ve screwed this all up somehow and the reply links aren’t working.

Ahhh, I see! I tried to shrink the amount of markup used around each comment, but the default reply script used in WordPress expects a bit more structure. Added that back for now.

I’ve temporarily adjusted the “Reply” text below each comment to “Reply to {comment author name}”. I think I’d like to adjust this even more so that on nested comments, it includes everyone’s name. Something like “Reply to Jeremy Felt, Alice, and Bob” on a thread in which all have participated would be cool. Part of me wants to shorten that to first names only, though that starts to make assumptions.

One quirk now that I have this all in place is that I’ve replied to “mentions” in the past, which are now displayed in their own area of the page. These replies are now displayed outside of that context. I’m guessing this won’t be an issue in the future, though if I ever do want to reply to a mention, it’d be cool if there was a way to convert the mention into a reply for purposes of display. I’ll think some more on that.

Almost there. Time for another bad decision.

It looks like some multi-paragraph Webmentions are coming in or being stored without paragraph tags. Rather than dive into really testing that, I took the lazy way out and replaced single line breaks with double line breaks so that wpautop() can add paragraphs as intended. This seems to have worked, but I’m sure I’ll run into an edge case at some point.

Okay! Theme deployed. Deployments setup for the new plugins. All is right.

Version 0.0.2 of a new vibe for Webmentions is live on the site. 🕺🏻

Now supporting Webmention

I think? If you know how to send a Webmention, please do so that I know it works! 😂

I’ve installed the IndieWeb plugin as well as its companions, Webmention and Semantic-Linkbacks.

The IndieWeb plugin adds a few semantic things to the user profile in WordPress and acts as a launch platform for installing a bunch of other IndieWeb related plugins.

The Webmention plugin adds support for, imagine this, the Webmention protocol. This should enable support for sending and receiving mentions.

The Semantic-Linkbacks plugin treats Webmentions and other linkbacks as proper comments and formats things in a nice rich way.

I have added all of these, but I haven’t tested any of them yet. So this post should play the role of general announcement and playground.

Trying out

Services like should spend more time telling everyone about features like “oh, by the way, we have a dedicated discovery page for posts about pizza“. 🍕

That kind of pitch and I would have signed up for an account 2 years ago.

Here I am discovering new things though.

I got here because of a series of articles. I started reading “Twitter to decentralize… something” after having it open in a tab for a few days. And while I nodded along to that quite a bit, there was a link to another post titled “Open gardens” that I really nodded along to.

The issue isn’t that Twitter doesn’t care. It’s instead a design flaw in the platform. Because tweets don’t exist outside of Twitter, when you’re banned from Twitter, you need to start over with a new format or on a new social network. For this reason, and because their business depends on a large user base, Twitter is hesitant to throw anyone off their service. They’re unwilling to tend the garden for fear of pulling too many weeds.

– Manton Reece, Open gardens

That paragraph had me hooked, but it still wasn’t until the middle of the post when the author mentioned the Kickstarter that I connected the dots to whom I was reading. Paragraphs like those are the gotchas when you’ve heard about a service but haven’t paid enough attention and now you know you really should check it out.

It’s not over.

At the end of that article was a link to yet another, “The way out“, linked to as “the way forward“, an exceptional play on title and URL that caused me to open the link twice because I wasn’t sure I had clicked the right thing.

This one talks more about in the context of content ownership and hones in on a good difference between it and things like Mastadon: (emphasis mine)

Mastodon helps by encouraging smaller social networks, distributing the task of moderation, but doesn’t prioritize content ownership. An account on an instance like has no more ownership of its content than an account on Twitter. Both let you export your data but both live at someone else’s domain name.

– Manton Reece, “The way out

A link then drops to “Starting a new photo blog“. At this point I’m thinking to myself how excellent of a series of perfectly placed links this has been because here I am on blog post four and I’ve read every post and often when this happens those tabs sit unread for weeks!

That post is great and it was cool to see how easy it is to import past Instagram posts into using the MacOS app. There’s also a nice looking Sunlit app for iOS that I won’t be able to use, but I’m definitely interested in giving this all a shot.

When I left Instagram, one of the final triggering events was my discovery of the open-source and hosted service pixelfed. I setup an account and immediately declared it was the replacement I would use. I posted a few photos, followed a couple people, added the site as a home screen bookmark so that it would be app like, and then…

Forgot to login after a few days.

The browser cookies expired and I had to login again, and I had that ownership question poking in my brain—If I start adding photos here, how long will it be before I have to move them somewhere else.

Still a little upset about URL shorteners in general and especially 2009, the year I used for everything 😞

Me, on Twitter a few weeks ago

Of course there’s more history.

Way way back in 2009, Posterous ( was a thing. A year before Instagram came around, a lot of people had photo blogs and Posterous made it easy to post via email or web. In 2012, the team was acquired by Twitter, and in 2013 the service was shut down.

A custom domain at Posterous made it easy for me to move to self hosted with working 301 redirects. Happy for that. Own your stuff.

Me, on Twitter almost 7 years ago

Luckily, Posterous was cool in that you could point a domain of your own to your account so that was really When they shut down, I was able to export all of my data and have control over the redirects. I imported everything into WordPress, setup redirects to posts and now I can still go back and see how absolutely horrid a Blackberry Pearl’s camera was 10 years ago.

Here we are several years later.

Even though I’ve seen how these cycles go, I’ve published a whole bunch of content so that if I move it somewhere else, I break every reference to it.

Instagram was never web friendly anyway, so there are barely any references—you couldn’t even link to photos within the app.

Twitter, on the other hand—even though it’s perfectly fine to treat it as an ephemeral stream and just delete it all—has also been a log of work, feelings, annoyances, experiences, and all kinds of junk that becomes fun to look back at every once and a while.

That’s going to suck when Twitter shuts down or everyone stops using it.

So. I should learn that lesson a bit here while also being open to trying new hosted services that seem to be driven by good people. I setup a account and pointed a sub-domain at it. Thanks to my HSTS configuration on this root domain (, I need to wait just a bit… 🛌

Ok. I’m back to finish the post, and only two weeks later!

It was getting late and I had to request an HTTPS certificate for from the team. Manton actually replied early the next morning and had the cert and domain all configured for me. I also received a very welcoming set of replies to my first post from the community. All great touches!

I then got busy with not being busy for the holiday and left all these tabs and this post open with the intention of finishing every day since.

I’m going to figure out the right way to incorporate this into my flow now. I think I’ll start by trying to import my Instagram archive. Then I’ll need to work out a mobile solution and determine how this may all fit as a separate piece from my main site.

In an ideal world, if this all works out, most of my tweets will originate at and then syndicate out to Twitter according to some criteria. Or I’ll find some entirely new use for it that takes me away from Twitter for good. Let’s see what happens!

Starting an IndieWeb Homebrew Website Club

Starting things is fun. Narrating things as you go is… funner.

Just about a month ago I joined the IndieWeb chat via Slack, which is connected to IRC and a web chat as well. I haven’t actually participated, but I’ve been getting the feel of conversations and checking out a bunch of the material that has been posted by others.

Over the last couple weeks I’ve been giving a lot of thought to what a local Homebrew Website Club would look like.

Note: One eternal annoyance for an introvert is finding yourself in the position to start cool new things, but then having to actually plan those things for a bunch of other people to show up.

Tonight I brought the idea of the club up to our local WordPress meetup and everybody was pretty positive about it. So now I need to take the next step and get “official”. I’m currently going through the list of planning questions to see if there’s anything I need to think of before just scheduling it.

So far this seems pretty straight forward. The general date used by most is every other Wednesday after work: something like 6pm local time. Nothing needed other than some wiki editing to show up on the Indie Web site. And then of course, finding a way to tell local people about it.

I’m going to shoot for January 15 as the first Homebrew Website Club in Pullman and go from there.

According to the “How to add an event” documentation, I first need to edit the overall Events page.

But! I need to login first. This redirects me to and asks for my URL to sign in. On first try, I get a message that says “We couldn’t find any way to authenticate you using your website.” So I look at the IndieLogin setup instructions.

I’m going to choose to authenticate by email, because I “own” that one the most. That said, it does look like a better future option would be to support IndieAuth on my site. After adding my email address to my home page, authentication was successful and I now exist as in the Indie Web ecosystem. I’ll come back to that later.

I edited the main Events page and “Pullman, Washington” is now listed next to San Diego. I then edited the January 15, 2020 events page and copied the existing San Diego information into a new blurb with the Pullman information and I think that means I’m good to go.

The part I got hung up on the most here was actually adding my name in the RSVP. The code seemed to suggest that adding {{}} would work, but it kept showing me “” instead. I then poked around and saw that others had redirects setup, so I created a page titled “jeremyfelt” and added a wiki redirect to my user page and changed the code to {{jeremyfelt}}, but it then said “Template:jeremyfelt” and I knew I was going nowhere. Finally, I updated it with standard URL syntax: [[jeremyfelt|Jeremy Felt]] and my name appeared as expected. No cool picture next to it or anything, but I’ll figure that at some point. This is all wiki stuff I probably used to know but have completely forgotten.

For now, the first Pullman Homebrew Website Club has been scheduled! I’ll figure out how to get people to attend next. 😎

Oh! And how to reply to Chris’s comments with proper web mentions! 😬😂