diff options
| -rw-r--r-- | content/en/article/weepinbell.md | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/content/en/article/weepinbell.md b/content/en/article/weepinbell.md new file mode 100644 index 00000000..adf76f11 --- /dev/null +++ b/content/en/article/weepinbell.md @@ -0,0 +1,67 @@ ++++ +title = 'Why a New Webmention Receiver?' +subtitle = 'The Birth of Weepinbell and How I Designed It' +slug = '' +tags = [] +categories = '' +date = 2026-10-18T09:39:09+08:00 +draft = true +toc = true ++++ + +I have been blogging in English for some time, but this is my first time participating in an IndieWeb conversation. So I think I should introduce myslef. + +I'm Eltrac. I'm mainly a web developer but I like all kinds of thing about programming. I code in Go, Clojure and Lua, and I explore new tech all the time. I usually blog more than three times a week, but most of my posts are written in Chinese. I recently became an active member of [Codeberg e.V.](https://codeberg.org/Codeberg-e.V.) and have been working on my own FOSS project [weepinbell](https://codeberg.org/eltrac/weepinbell) for a while. + +In this post, I will talk about why I developed weepinbell, how I designed its architecture, what I think of the IndieWeb movement and many things. + +## Why weepinbell? + +I wrote to [Brennan](https://brennan.day/) recently and he was really nice to mention weepinbell [on his blog](https://brennan.day/i-love-sharing-cool-stuff-made-by-people/#other-cool-things). In that email, I talked about how I set a new goal for weepinbell (i.e. an alternative to webmention.io) because of Aaron Parecki rewriting webmention.io with Claude. Later, in [Aaron's response](https://aaronparecki.com/2026/10/17/5/rebuilding-my-indieweb-projects) to [Brennan's new post](https://brennan.day/the-indieweb-now-has-genai-and-claude-built-in-what-do-we-do/), he mentioned weepinbell as "a direct response to my rewrite". + +I would like to make things clear. I didn't start developing weepinbell because of Aaron's rewrite. I started early in this May to learn Clojure. I've been blogging (in Chinese) for years and of course I love the concept of IndieWeb. Naturally, my practice project for learning a new language involves IndieWeb technologies. + +The motive is that I want to get my hands dirty with the Webmention standard. I read through the [W3C specification document](https://www.w3.org/TR/webmention/) and started putting things in *parentheses*. You can still find snippets from that document in my code as comments. I bascially code against the specification. + +```clojure + (if-let [error-msg (check-request source target allowlist)] + ;; respond if request verification failed + (bad-request {:status 400 + :message error-msg}) + ;; proceed if request is ok + (do + ;; The receiver SHOULD check that target is a valid + ;; resource for which it can accept Webmentions. + ;; This check SHOULD happen synchronously to reject + ;; invalid Webmentions before more in-depth verification begins. + ;; + ;; Webmention verification SHOULD be handled asynchronously + ;; to prevent DoS (Denial of Service) attacks. + (put! wmc new-wm) + ;; respond with 201 when Webmention passed checks and + ;; was sent into queue, include a Location header + (let [wm-id (digest (str source target)) + wm-url (str (:base-url config) "/api/mention/" wm-id) + response {:status 201 + :message "Webmention is accepted and pending for verification." + :url wm-url}] + (created wm-url response)))))) +``` + +This snippet is from [receiver.clj](https://codeberg.org/eltrac/weepinbell/src/commit/fef78a78f2672701362c83032e0784f6cd94af05/src/weepinbell/webserver/receiver.clj#L47-L68). + +After the initial *quick and rough* implementation, I stopped working on weepinbell for a few months. And it had been receiving Webmentions for my blog during that time. Everything worked and I was content. It was bascially a personal tool. + +Then the webmention.io rewrite came to my attention. + +Why does it bother me? I don't even use webmention.io any more. I see some of my friends seeking alternatives, and... there aren't many to choose from! There is [webmentiond](https://github.com/zerok/webmentiond/) by Horst Gutmann and some other implementations here and there. My friend [Chlorine](https://codeberg.org/chlorine) developed [CircleAt](https://codeberg.org/chlorine/circleat) in Rust. Frankly, none of them truly count as "alternative to webmention.io". + +Don't get me wrong. I think many of them are great for their purpose, i.e. small service one can self-host. However, they can be quite difficult for the non-tech IndieWeb folks. ==They need a public instance.== + +## For both individuals and large groups + +…… + +## Slowing Down for Refactoring and Testing + +## Parsing Microformats: Frustrating Experience |
