<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>punkfairie.net</title><description>marley&apos;s website</description><link>https://punkfairie.net/</link><item><title>indieweb comments with webmentions</title><link>https://punkfairie.net/diary/2026-01-03/</link><guid isPermaLink="true">https://punkfairie.net/diary/2026-01-03/</guid><content:encoded>&lt;p&gt;You may have noticed a small section at the bottom of diary pages for
&lt;a href=&quot;https://indieweb.org/Webmention&quot;&gt;webmentions.&lt;/a&gt; If you’ve ever heard of
pingbacks during the Wordpress days, they are the same concept!&lt;/p&gt;
&lt;p&gt;Webmentions can be set up for any website, and displayed however you please. You
can even pull fediverse comments as webmentions and display them on your site! I
am not an expert, but following is a little tutorial on how I set up webmentions
for this site.&lt;/p&gt;
&lt;p&gt;I use &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;11ty&lt;/a&gt; to build my site, and you will often see
tutorials that use 11ty data files to pull mentions at build time. The downside
to this is that you have to rebuild your site every time you want to update your
mentions. The solution to this is usually webhooks that tell
netlify/vercel/what-have-you to re-deploy the site when new mentions are
received, or scheduling a rebuild once a day. To me, this is unnecessarily
complicated for the (imo) small gain of less client side javascript. Especially
considering I self host my site using Docker on a server in my own home, and
therefore can’t as easily use webhooks/scheduled rebuilds.&lt;/p&gt;
&lt;p&gt;So I have instead taken the route of using client-side JS for this. Webmentions
are updated on every page refresh, and if the user has JS turned off, no big
loss for them. Comments are a progressive enhancement for this sort of website
anyway. Another plus is that this tutorial should be applicable no matter how
you make your website, as long as you have access to JS :)&lt;/p&gt;
&lt;h2 id=&quot;step-1-webmentionio--bridgy&quot;&gt;Step 1: Webmention.io &amp;#x26; Bridgy&lt;/h2&gt;
&lt;p&gt;I do not love using third party services for this, but the DIY way is way more
complicated then I want to maintain, so I had to give in here.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://webmention.io/&quot;&gt;Webmention.io&lt;/a&gt; the service that allows us to receive
webmentions. You will need to have a website already published with web
sign-in enabled (more on that below). Don’t forget to click the link to add a
site &lt;em&gt;after&lt;/em&gt; you are logged in!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://brid.gy/&quot;&gt;Bridgy&lt;/a&gt; - this is optional, it allows for pulling in
fedi/reddit/bluesky comments as webmentions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;step-11-webmentionio--web-sign-in&quot;&gt;Step 1.1: Webmention.io &amp;#x26; Web Sign-In&lt;/h3&gt;
&lt;p&gt;If you don’t have &lt;a href=&quot;https://indieweb.org/Web_sign-in&quot;&gt;web sign-in&lt;/a&gt; already
enabled, here’s how to do so:&lt;/p&gt;
&lt;p&gt;First - you need to have a website you can publish BEFORE setting up
webmentions, as you will need at least a published index page with the html
explained below in order to log into webmention.io. It doesn’t need to have
content or be pretty, just accessible.&lt;/p&gt;
&lt;p&gt;Put at least one of the following link tags between &lt;code&gt;&amp;#x3C;head&gt;&lt;/code&gt; and &lt;code&gt;&amp;#x3C;/head&gt;&lt;/code&gt; on
your index page. It &lt;strong&gt;MUST&lt;/strong&gt; be on your index for sign-in to work!&lt;/p&gt;
&lt;pre class=&quot;astro-code rose-pine&quot; style=&quot;background-color:#191724;color:#e0def4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;&amp;#x3C;!--&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; sign in using OTP sent to your email: &lt;/span&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;--&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; href&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;mailto:YOUR@EMAIL.COM&quot;&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; rel&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;me&quot;&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt; /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;&amp;#x3C;!--&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; or use your github account: &lt;/span&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;--&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; href&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;https://github.com/YOUR_USERNAME&quot;&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; rel&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;me&quot;&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is possible to use your phone number as well, but I do not recommend this as
&lt;code&gt;&amp;#x3C;head&gt;&lt;/code&gt; content is still visible to the public via the browser inspector, and
to any web scrapers.&lt;/p&gt;
&lt;p&gt;Publish your website with those changes, and then you should be able to go to
&lt;a href=&quot;https://webmention.io&quot;&gt;webmention.io&lt;/a&gt; and log in with your email’d OTP or
GitHub. Once you are on the dashboard, click the link to add a site and add in
your website.&lt;/p&gt;
&lt;h2 id=&quot;step-2-add-your-webmention-link&quot;&gt;Step 2: Add your webmention link&lt;/h2&gt;
&lt;p&gt;We will add two things in this section: a &lt;code&gt;&amp;#x3C;link&gt;&lt;/code&gt; tag for bots, and a visible
link for humans, letting them know how to send you webmentions.&lt;/p&gt;
&lt;p&gt;On &lt;a href=&quot;https://webmention.io&quot;&gt;webmention.io&lt;/a&gt;, click “Sites” in the top bar, then
click “Get Setup Code” next to your site (I somehow ended up with duplicate
punkfairie.net entries - if that happens to you just pick the first one). Copy
the code to somewhere between &lt;code&gt;&amp;#x3C;head&gt;&lt;/code&gt; and &lt;code&gt;&amp;#x3C;/head&gt;&lt;/code&gt; on every page someone might
want to send mentions for. If your site uses a global layout file, that’s a
great place for it, otherwise you’ll have to paste it on every page you want
mentions for.&lt;/p&gt;
&lt;p&gt;Next, we will put a link on every page you want to receive mentions for, so that
people can send you mentions. This part is not strictly necessary, as users
could still send you mentions by using inspect element and finding the &lt;code&gt;&amp;#x3C;link&gt;&lt;/code&gt;
element we just added, or using other automated tools. But it’s a better user
experience to explicitly let people know you can receive mentions!&lt;/p&gt;
&lt;p&gt;There are many ways to do this, but what I’ve done is probably the easiest.
Going back to that code snippet we copied from webmention.io earlier, grab just
the URL in the &lt;code&gt;href=&quot;&quot;&lt;/code&gt; part of that. If you go to that link in your browser,
you’ll notice that it actually links to a form to send the mention with. Go
ahead and put a link to that somewhere on each page you want to receive mentions
for. I’ve done it like this (see it in action at the bottom of this page!):&lt;/p&gt;
&lt;pre class=&quot;astro-code rose-pine&quot; style=&quot;background-color:#191724;color:#e0def4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;  Have you linked to this page on your website?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; href&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;https://webmention.io/punkfairie.net/webmention&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;    &gt;&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;Send me a webmention!&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;  &gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;step-3-display-webmentions&quot;&gt;Step 3: Display Webmentions&lt;/h2&gt;
&lt;p&gt;Now for the slightly more complicated bit. Receiving webmentions is fine and
all, but they are useless unless displayed somehow!&lt;/p&gt;
&lt;p&gt;I use &lt;a href=&quot;https://alpinejs.dev/&quot;&gt;Alpine.js&lt;/a&gt; for all my JS - if you’ve ever used
jQuery it’s sort of trying to achieve the same goal. It makes it really easy to
incorporate small amounts of interactivity. The actual fetch mentions logic is
vanilla JS, so you can use that and figure out the displaying bit on your own!
It isn’t much more complicated, but since I use Alpine that’s the method I’ll
show here.&lt;/p&gt;
&lt;p&gt;The easiest way to show this is by showing the full code (stripped of my own CSS
classes) with comments explaining each piece. I’m not going to fully explain the
Alpine.js bits, as that’s a whole other tutorial, but the docs are pretty easy
to understand :)&lt;/p&gt;
&lt;p&gt;This is the HTML that goes where you want the mentions to show:&lt;/p&gt;
&lt;pre class=&quot;astro-code rose-pine&quot; style=&quot;background-color:#191724;color:#e0def4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;&amp;#x3C;!--&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;  x-data lets Alpine.js know that it should use the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;  &apos;mentionList&apos; code defined below to populate the mentions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;--&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; x-data&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;mentionList&quot;&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;  &amp;#x3C;!--&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; If we got an error, don&apos;t render this &lt;/span&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;--&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; x-if&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;!error&quot;&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;    &amp;#x3C;!--&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;      A for loop - for each mention, render&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;      the contents of this &amp;#x3C;template&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;    --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; x-for&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;mention in mentions&quot;&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      &amp;#x3C;!--&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;        If we have the author name, use&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;        that. Otherwise &apos;Someone&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; x-text&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;mention.author.name || &apos;Someone&apos;&quot;&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      &amp;#x3C;!--&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;        link to the URL that your page was mentioned&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;          on, and make the link text the type of mention,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;        using the function defined in the JS below&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; :href&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;mention.url&quot;&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; x-text&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;getType(mention)&quot;&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      &amp;#x3C;!--&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;        Date the mention was sent, again&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;        using a function defined below&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;      this post on &lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; x-text&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;getDate(mention)&quot;&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      &amp;#x3C;!--&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;        If the mention contains text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;        (i.e. a mastondon comment), display that&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; x-if&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;mention.content.text&quot;&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;        &amp;#x3C;!--&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;          The getText function is defined below,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt;          it just truncates long text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;        --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;blockquote&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; x-text&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;getText(mention)&quot;&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;blockquote&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;      &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;  &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And this is the javascript that needs to be on the same page as the HTML code
above, after &lt;code&gt;&amp;#x3C;body&gt;&lt;/code&gt; and ideally as close to &lt;code&gt;&amp;#x3C;/body&gt;&lt;/code&gt; as possible&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code rose-pine&quot; style=&quot;background-color:#191724;color:#e0def4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; The API endpoint to get mentions for this page.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; Replace punkfairie.net/page-to-get with the URL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; of the page you want to get mentions for.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;  //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; If you are using 11ty and a template language, you can&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; insert the link automatically like this (example&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; using liquid):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; target=https://punkfairie.net/{{ permalink }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; url&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; =&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;    &apos;https://webmention.io/api/mentions.jf2?target=https://punkfairie.net/your-page&amp;#x26;sort-by=published&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;  document&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt;addEventListener&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&apos;alpine:init&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; This is the bit that actually grabs the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; mentions. &apos;mentionList&apos; is what we put in the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; x-data attribute in the HTML above.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;    Alpine&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&apos;mentionList&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; This runs on page load/refresh.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;      async&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt; init&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;        //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;        //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; try { ... } catch { ... } gracefully&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;        //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; handles errors.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;          const&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; response&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt; fetch&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;url&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;          //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; If we got, say, a 404 error, set&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;          //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; error to true so that the HTML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;          //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; above wouldn&apos;t try to render.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;ok&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F;font-style:italic&quot;&gt;            this&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;          //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; Set our &apos;mentions&apos; variable to the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;          //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; fetched mention list.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;          const&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; result&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; response&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F;font-style:italic&quot;&gt;          this&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;mentions&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; result&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;        }&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; catch&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;err&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;          //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;          //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; If fetch() threw an error, prevent the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;          //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; HTML from loading.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F;font-style:italic&quot;&gt;          this&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; Initial values for our variables.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; Despite being below init(), these are&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; actually set first and available to init().&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;      mentions&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt; []&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;      error&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; The webmention.io API returns the type of&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; mention in a way that isn&apos;t as nice to display,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; so we transform that into something better.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt;      getType&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt;mention&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;        switch&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;mention&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&apos;wm-property&apos;&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;          case&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt; &apos;like-of&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt; &apos;liked&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;            break&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;          case&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt; &apos;bookmark-of&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt; &apos;bookmarked&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;            break&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;          case&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt; &apos;repost-of&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt; &apos;reposted&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;            break&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;          case&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt; &apos;in-reply-to&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt; &apos;replied to&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;            break&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;          default&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt; &apos;mentioned&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; This function just truncates long comment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; text to a max of 200 chars.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt;      getText&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt;mention&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt; 200&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; text&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; mention&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; &amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;          return&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; text&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;        }&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;          return&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; text&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt; &apos;...&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;      //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; This function formats dates in a prettier way.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt;      getDate&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt;mention&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;        //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;        //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; Use the published date if it&apos;s available,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA;font-style:italic&quot;&gt;        //&lt;/span&gt;&lt;span style=&quot;color:#6E6A86;font-style:italic&quot;&gt; otherwise use the received date.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; date&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt; Date&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;mention&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;published&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; mention&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&apos;wm-received&apos;&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;])&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; formatter&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; Intl&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt;DateTimeFormat&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;          dateStyle&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt; &apos;medium&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;          timeStyle&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt; &apos;short&apos;&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;        }&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#31748F&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt; formatter&lt;/span&gt;&lt;span style=&quot;color:#31748F&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#EBBCBA&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4;font-style:italic&quot;&gt;date&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;    }&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#E0DEF4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you are using something like 11ty &amp;#x26; a template language (such as liquid or
nunjucks) that supports includes, you can put the displaying webmentions code in
a separate file and include it on all your pages, to reduce copy pasting! Just
make sure you use something like the &lt;code&gt;{{ permalink }}&lt;/code&gt; shortcode to change the
JS &lt;code&gt;url&lt;/code&gt; variable on each page.&lt;/p&gt;
&lt;p&gt;And that’s all you need! The rest of this is optional, but goes over setting up
fedi connections.&lt;/p&gt;
&lt;h2 id=&quot;step-4-connecting-socials&quot;&gt;Step 4: Connecting Socials&lt;/h2&gt;
&lt;p&gt;This is where &lt;a href=&quot;https://brid.gy/&quot;&gt;Bridgy&lt;/a&gt; will come in! Go ahead and click the
social media option you want to connect (you can connect multiple!). If it asks
“What do you want to do?” choose the first option: “Cross-post to a Mastodon
account” (the rest of these instructions assume you are connecting Mastodon, as
that’s what I use).&lt;/p&gt;
&lt;p&gt;You will also want to have a link to your website in your Mastodon profile. You
can even “verify” yourself by adding a &lt;code&gt;rel=&quot;me&quot;&lt;/code&gt; link on your website that
links to your Mastodon profile! Just add the following between &lt;code&gt;&amp;#x3C;head&gt;&lt;/code&gt; and
&lt;code&gt;&amp;#x3C;/head&gt;&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code rose-pine&quot; style=&quot;background-color:#191724;color:#e0def4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9CCFD8&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; href&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;https://YOUR.INSTANCE/@YOUR_USERNAME&quot;&lt;/span&gt;&lt;span style=&quot;color:#C4A7E7;font-style:italic&quot;&gt; rel&lt;/span&gt;&lt;span style=&quot;color:#908CAA&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F6C177&quot;&gt;&quot;me&quot;&lt;/span&gt;&lt;span style=&quot;color:#6E6A86&quot;&gt; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://reillyspitzfaden.com/wiki/tutorials/webmention-tutorial/&quot;&gt;A Quick Guide to Everything I Know about Webmentions - Reilly Spitzfaden&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;This is done so that JS loading doesn’t block page render! JS is expensive
to load, so it’s good practice to put non-essential JS script tags at the
end of your body, so that the page content can load in without waiting for
the JS to load first. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>punkfairie.net yearly roundup</title><link>https://punkfairie.net/diary/2025-12-20/</link><guid isPermaLink="true">https://punkfairie.net/diary/2025-12-20/</guid><content:encoded>&lt;p&gt;It seems we’re doing yearly updates here, oops! I swear I did mean to post more
often when I came up with this section haha.&lt;/p&gt;
&lt;p&gt;I’ve fixed some things, there’s a new chat box I’m sure you noticed on the home
page. CBox has needed replacing for a decade now and I’ve finally got
&lt;a href=&quot;https://iframe.chat/&quot;&gt;Chattable&lt;/a&gt; working. Dates on the
&lt;a href=&quot;https://punkfairie.net//diary/&quot;&gt;diary index page&lt;/a&gt; are fixed as well (due to the way diary post pages
are built, 11ty was setting the last site deploy date as the date for every
single post, instead of when they were actually written!). Also the url for
diary posts is simplified, in case anyone notices that sort of thing.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://epiphany.punkfairie.net&quot;&gt;Epiphany&lt;/a&gt; &amp;amp;
&lt;a href=&quot;https://somethinfunny.punkfairie.net&quot;&gt;Somethin’ Funny&lt;/a&gt; are back online! I’ve
been breeding a bit in Petz 4 again :) I have a &lt;em&gt;beautiful&lt;/em&gt; Windows XP laptop
for all my P.F. Magic games!&lt;/p&gt;
&lt;div class=&quot;thumbs&quot;&gt;&lt;a href=&quot;https://punkfairie.net//_astro/winxplock.CejTaxC7.png&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://punkfairie.net//_astro/winxplock.CejTaxC7_1zgbkn.webp&quot; srcset=&quot;/_astro/winxplock.CejTaxC7_1zgbkn.webp 250w, /_astro/winxplock.CejTaxC7_ZvpWxQ.webp 500w&quot; alt=&quot;My Windows XP laptop locked - with Dogz in Guard Dog Mode&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; sizes=&quot;(min-width: 250px) 250px, 100vw&quot; style=&quot;--fit: cover; --pos: center;&quot; data-astro-image=&quot;constrained&quot; width=&quot;250&quot; height=&quot;333&quot;&gt; &lt;/a&gt;&lt;a href=&quot;https://punkfairie.net//_astro/winxpdesktop.Bx0VnqNv.png&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://punkfairie.net//_astro/winxpdesktop.Bx0VnqNv_2ptOlu.webp&quot; srcset=&quot;/_astro/winxpdesktop.Bx0VnqNv_2ptOlu.webp 250w, /_astro/winxpdesktop.Bx0VnqNv_1RDaqX.webp 500w&quot; alt=&quot;My Windows XP desktop&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; sizes=&quot;(min-width: 250px) 250px, 100vw&quot; style=&quot;--fit: cover; --pos: center;&quot; data-astro-image=&quot;constrained&quot; width=&quot;250&quot; height=&quot;188&quot;&gt; &lt;/a&gt;&lt;/div&gt; 
&lt;p&gt;The web servers mentioned in my last update are up and running! All my websites
are running on my servers, plus my &lt;a href=&quot;https://codewith.babesonthe.net&quot;&gt;git forge&lt;/a&gt;.
Wife also has a mastodon server &amp;amp; &lt;a href=&quot;https://blog.blackcat.vip/&quot;&gt;blog&lt;/a&gt; on her own
server!&lt;/p&gt;
&lt;p&gt;On a personal note, I got married in September!!! The wedding went off with
barely a hitch and went way too fast. I can’t recommend &lt;em&gt;planning&lt;/em&gt; a wedding,
but the party &lt;strong&gt;almost&lt;/strong&gt; made it worth it LOL.&lt;/p&gt;</content:encoded></item><item><title>It&apos;s been a while (what I&apos;ve been up to)</title><link>https://punkfairie.net/diary/2024-09-28/</link><guid isPermaLink="true">https://punkfairie.net/diary/2024-09-28/</guid><content:encoded>&lt;h2 id=&quot;first-site-related-things&quot;&gt;First, site related things&lt;/h2&gt;
&lt;p&gt;punkfairie.net moved registrars. I was loyal to NameSilo for probably close to
10 years! But as prices started to creep up, they were no longer the cheapest
option on the market. &lt;a href=&quot;https://porkbun.com/&quot;&gt;porkbun&lt;/a&gt; is now the winner in that
category, and as an added bonus the feature set is wayyy less bloated which
makes the UI super clean and easy to navigate. More features are not always
better!&lt;/p&gt;
&lt;p&gt;I’m still ironing out DNS migration, so the links to saudade and epiphany don’t
work at the moment. Fixed soon I hope!&lt;/p&gt;
&lt;p&gt;Also, I may be moving off Neocities soon. Fiancee has a neat little homelab set
up and has promised me a little server of my own (who I’ve named ‘MarleyNet’!).
Some sort of load balancer has to be set up though to tell the difference
between traffic to &lt;a href=&quot;https://blackcat.vip&quot;&gt;blackcat.vip&lt;/a&gt; (fiancee’s domain) and
punkfairie.net. So that may take some time.&lt;/p&gt;
&lt;p&gt;Future plans for MarleyNet beyond this site:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href=&quot;https://about.gitea.com/products/gitea/&quot;&gt;Gitea&lt;/a&gt; instance.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://caddyserver.com/&quot;&gt;Caddy&lt;/a&gt; as the web server.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MarleyNet has an older sister, MarleyCentre (named after the hardware:
ThinkCentre). Currently all she’s running is a
&lt;a href=&quot;https://github.com/charmbracelet/soft-serve&quot;&gt;Soft Serve&lt;/a&gt; instance, accessible
from a &lt;a href=&quot;https://github.com/charmbracelet/wishlist&quot;&gt;Wishlist&lt;/a&gt; directory.&lt;/p&gt;
&lt;h2 id=&quot;other-tech-projects&quot;&gt;Other tech projects&lt;/h2&gt;
&lt;p&gt;I became an arch user. And a vim user. I completely ditched Windows a while ago
and for the most part have been happy with that decision! I still can’t get
Skyrim to load with a Wabbajack modlist and my Farming Simulator accessories
don’t work right but those are the only downsides so far. It’s been a lot of fun
tinkering with my own system :)&lt;/p&gt;
&lt;p&gt;Neovim is mostly going fine, still got some tinkering to do for everything to
work how I want it to for editing this site. But it’s absolutely perfect for
editing configs &amp;#x26; shell scripts, which I find myself doing a lot of these
days. I even learned Go with it!!&lt;/p&gt;
&lt;p&gt;The Neovim config I’m using is &lt;a href=&quot;https://www.lazyvim.org/&quot;&gt;LazyVim&lt;/a&gt;, but if
you’re a beginner I don’t recommend installing someone else’s config first. Just
start using it, and add things to your own config as you go. Once you get into
plugins, and get sick of managing conflicts and plugin opts on your own, then
install LazyVim :). It’s super customizable, and most things &lt;em&gt;just work.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-im-up-to-elsewhere&quot;&gt;What I’m up to elsewhere&lt;/h2&gt;
&lt;p&gt;I’ve gotten really into &lt;a href=&quot;https://obsidian.md/&quot;&gt;Obsidian&lt;/a&gt; lately, and the whole
second brain/personal knowledge management thing in general. I may do a proper
writeup about it soon with some links!&lt;/p&gt;
&lt;p&gt;I got a new job recently, doing admin work which means &lt;strong&gt;NO MORE CUSTOMER
SERVICE!!&lt;/strong&gt; I’m absolutely loving it so far, and it’s what got me into Obsidian
and everything mentioned above, because there’s just so much random information
I need to know and processes to follow and I needed some way to keep track of it
all. Plus my day is way more self-structured than before, and there’s a lot of
random little to-dos to keep track of!&lt;/p&gt;</content:encoded></item><item><title>Moving to Neocities</title><link>https://punkfairie.net/diary/2023-06-08/</link><guid isPermaLink="true">https://punkfairie.net/diary/2023-06-08/</guid><content:encoded>&lt;p&gt;Finished the new rainbow layout today! I’m moving the site to Neocities for the
social aspect, and because PHP isn’t allowed there I switched over to
&lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt; - a static site compiler.&lt;/p&gt;
&lt;p&gt;I redid the layout from the ground up with the intention of making it mobile
friendly, but it’s not a priority and I’m not even going to look at what the
site looks like on mobile lol.&lt;/p&gt;
&lt;p class=&quot;center&quot;&gt;🏳️‍⚧️🏳️‍🌈 Happy pride 🏳️‍🌈🏳️‍⚧️&lt;/p&gt;</content:encoded></item></channel></rss>