<?xml version="1.0" encoding="utf-8"?>


<feed xmlns="http://www.w3.org/2005/Atom"
    xmlns:fh="http://purl.org/syndication/history/1.0"
    xmlns:at="http://purl.org/atompub/tombstones/1.0">

    <title>e4dt4n</title>
    <subtitle>Personal projects and ramblings from a software engineer.</subtitle>
    <link href="https://e4dt4n.com/feed" rel="self" />
    <link href="https://e4dt4n.com/feed" rel="current" />
    <link href="https://busybee.superfeedr.com" rel="hub" />
    <link href="https://e4dt4n.com/" />
    <id>tag:e4dt4n.com,2026-07-07:_all</id>
    <updated>2026-07-06T19:48:54-05:00</updated>

    <entry>
        <title>IndieWeb, Publ, and Webmentions</title>
        <link href="https://e4dt4n.com/1-IndieWeb-Publ-and-Webmentions" rel="alternate" type="text/html" />
        <published>2026-07-06T19:48:54-05:00</published>
        <updated>2026-07-06T19:48:54-05:00</updated>
        <id>urn:uuid:19d6fca3-fccf-4e7f-aab4-28a2383f621a</id>
        <author><name>Edward Turpin</name></author>
        <content type="html">
<![CDATA[
<h2 id="1_h2_1_When-logic-and-proportion-have-f"><a href="https://e4dt4n.com/1-IndieWeb-Publ-and-Webmentions#1_h2_1_When-logic-and-proportion-have-f"></a>When logic and proportion have fallen sloppy dead</h2><p>Well&hellip; I fell down a rabbit hole a couple weeks ago. I stumbled upon the <a href="https://indieweb.org/">IndieWeb</a> while I was
looking for possible solutions to the enshittification of platforms, search, and seemingly <em>everything</em>. The IndieWeb
seems to build off of the early visions for what the world wide web should be (i.e. a <em>web</em> of interconnected documents;
<em>not</em> centralized platforms) with simple-ish <a href="https://indieweb.org/specifications">standards</a> to semantically markup
documents and enable a higher degree of site-to-site <a href="https://indieweb.org/protocol">interactivity</a>. For instance, it&rsquo;s
entirely possible to compose a, more-or-less, ad-hoc decentralized micro-blogging (à la
<a href="https://joinmastodon.org/">Mastodon</a>) network by just building off of these standards and protocols.
<a href="https://www.manton.org/">Manton Reece&rsquo;s personal site</a> is a good example of using the IndieWeb in this manner.</p><h2 id="1_h2_2_Publ"><a href="https://e4dt4n.com/1-IndieWeb-Publ-and-Webmentions#1_h2_2_Publ"></a>Publ</h2><p>After reading about the IndieWeb, I decided to make my own personal website that uses some of its features. There
are some platforms that look great for this, such as <a href="https://wordpress.com/">WordPress.com</a> and
<a href="https://micro.blog/">micro.blog</a>, but I wanted more control. I&rsquo;ve been on a minimilism/back-to-basics bent lately, so
I started looking at static site generators such as <a href="https://gohugo.io/">Hugo</a>. I realized if I used these, I&rsquo;d
probably have to depend on external services and JS for WebMentions. So, I was just about set on rolling-my-own
CMS and IndieWeb support with Flask and <a href="https://github.com/Flask-FlatPages/Flask-FlatPages">Flask-FlatPages</a>, when I
found <a href="https://beesbuzz.biz/">Fluffy&rsquo;s</a> <a href="https://publ.beesbuzz.biz/">Publ</a>.</p><p>Publ implements pretty much everything I wanted. It&rsquo;s a Flask app that allows you to author content in Markdown or HTML.
This allows for a very light setup, because you can just author in a text editor and commit your content into a git
repo. Most importantly for my purposes, because it&rsquo;s a Flask app, I can add custom endpoints to handle whatever I
want.</p><h2 id="1_h2_3_Webmentions"><a href="https://e4dt4n.com/1-IndieWeb-Publ-and-Webmentions#1_h2_3_Webmentions"></a>Webmentions</h2><p><a href="https://github.com/PlaidWeb/publ-site">Publ&rsquo;s documentation/blog project</a> uses the
<a href="https://webmention.io/">webmention.io</a> service to recieve webmentions. Fluffy&rsquo;s
<a href="https://github.com/PlaidWeb/webmention.js">webmention.js</a> library is then used to dynamically retrieve and display
them. But, as I established earlier, I was looking to minimize reliance on external services and JS. Luckly, there&rsquo;s a
great Python library for webmention handling with Flask support:
<a href="https://fabiomanganiello.com/about">Fabio Manganiello&rsquo;s</a>
<a href="https://git.fabiomanganiello.com/blacklight/webmentions">webmentions</a>.</p><p>The <code>blacklight/webmentions</code> library allows me to bind a <code>WebmentionsHandler</code> to my Publ/Flask app to enable it to
recieve webmentions. The downside of this is it makes my Publ site stateful. I have to backup my <code>webmentions</code> db,
but that&rsquo;s a fair tradeoff for my purposes. The <code>webmentions</code> library also comes with webmention rendering functions and
overridable templates. I don&rsquo;t really like inline CSS, so with keeping with my current minimilist inclinations, I
overrode them. TDB if what I did actually works&hellip;</p><h2 id="1_h2_4_Feed-your-head"><a href="https://e4dt4n.com/1-IndieWeb-Publ-and-Webmentions#1_h2_4_Feed-your-head"></a>Feed your head</h2><p>This was a fun rabbit hole to fall down. I look forward to participating in and exploring more of the IndieWeb
community. It may not be a silver-bullet, but hopefully it will offer some reprieve from the increasingly enshittified
Internet.</p>
]]>
        </content>
    </entry>

</feed>