Using #Madblog as the easiest way to spin up an Indieweb/ActivityPub-compatible blog.
Zero db, zero JS, entirely hosted on text files.
Simple static file blogs that federate are exactly what the fediverse needs more of. The whole stack being just Markdown files and a small script eliminates so much complexity.
I’ve been thinking about how tools like this could feed into systems that map public conversation. Most discourse gets lost in fragmented replies, but when your blog posts are plain files, it’s easier to process them meaningfully—say, with AI that ranks by argument strength instead of engagement. Something I’m building at The Zeitgeist Experiment.
Also appreciate the ActivityPub minimalism. Publishing the full object by default makes feeds immediately useful without round-trips.
That looks really interesting! Congrats on shipping. I’m glad to see more people implementing “headless” AP servers.
The one piece of feedback I have: your outbox seems to have no pagination and it’s only showing updates for your actor profile. So there is no way for someone to use browse through your posts or use the outbox as a “RSS feed” of sorts. It’s also embedding the whole object, all the time. If you are just serving static files (which are easy to cache), perhaps it would be better to just provide a stable URL for the objects, and then just return the document id in the “object” field?
That’s right, there’s no pagination on the outbox right now - it’s just a few text files anyway so I didn’t bother to implement it yet. But it’s on my (very short term) radar. The RSS/Atom feeds are already provided over
/feed.rssand/feed.atomroutes respectively though. About embedding the whole object vs. a reference, that can be configured viaactivitypub_object_type. It defaults toNote, so the whole content is included, but it can also be set toArticle- in that case only a reference to the object is rendered, similar to what WriteFreely does in its latest implementation.



