The text and the code go hand in hand

Sometimes I hear of "opinionated" software. That is, software which has a strong vision of how to do a thing. If you like it, use it. If you don't, then don't. But what happens if the software turns out to be something the author of a site wrote for themselves? It's more than opinionated. It's personal.

This website presents a number of sites and the tools they use to create and update them.

If you're wondering why the list is small, the explanation is that personal tools are not tidied up and yet we live in a world of software that is written for being shared. In the corporate context, team members, reviewers and successors need to understand the code. In the private world, public code is polished in order to reflect well on programmers and their abilities.

But *night software* is not like that. It's not written for the day job. It's not written to see the light of day at all. It's not written to be looked at and scrutinized by anybody. It's intimate and personal, it's messy and buggy. To take a look is to transgress.

And yet, this software offers the unique chance of being the kernel of convivial software: a tool that we can not only learn how to use but that we can disassemble and reassemble. We can imagine little computer clubs discussing our tools, showing how we added this feature or that feature. It is possible because the tools are small.

So if you're thinking "that stuff is all a huge tangled mess" and "the code generating my website is *not* for the public…" – then rest assured. This is exactly what I'm trying to show. I remember my first system being a collection of GNU M4 macros and a Makefile and I'd publish it in a heartbeat, if I still had it. That's how I wrote my GeoCities pages.

I'd love to show the world the unpolished, "just good enough with a number of bugs I know of" solutions. Let me know if you have one.

If you build your website with your software and want to be added, I'd love some more info!

– @alex@alexschroeder.ch

Adam Sjøgren

Adam Sjøgren (@asjo@illuminant.asjo.org) uses a blog system administered via NNTP written in Haskell. Blogs map to newsgroups, blog posts map to articles, blog comments to followups, and putting in pictures and formatting is done through MIME attachments and Markdown.

Adam Sjøgren
a blog system administered via NNTP
I don't expect anybody but me will ever want to post to their blog through a newsreader, but that's fine. … It's not pretty and anyone who is good at functional programming would probably laugh at the code, but that's fine as well.

Alex Schroeder

Alex Schroeder (@alex@alexschroeder.ch) uses Oddmu, a wiki engine he wrote to replace Oddmuse, which he wrote to replace wiki.el. Oddmu was supposed to be small and focused on Markdown files in order to be as portable and replaceable as possible.

Alex Schroeder
Oddmu
Oddmuse
wiki.el
I added so many extra text formatting rules to Oddmuse such that I had become a captive of my own software. That's when I decided that my next iteration would stick as closely to a popular "standard" as possible and I picked Markdown.

Alexander Cobleigh

Alexander Cobleigh (@cblgh@merveilles.town) wrote a static site generator in Go. It operates on folders of Markdown files and a syntax of commands, written in plaintext files, performing operations that in the end convert the input files into html pages cross-referencing each other.

Alexander Cobleigh
a static site generator in Go
When my old server died I lost my web root of manual-ish copied HTML files / Pandoc’d wiki articles. To prevent that …

Bill Mill

Bill Mill (@llimllib@hachyderm.io) uses Python to turn Obsidian notes into a website.

Bill Mill
Obsidian notes into a website
Extremely incomplete and hacked together, but feel free to take anything useful from it.

Brandon

Brandon (@be_far@treehouse.systems) uses Quartz to generate the site from custom Typescript components and Obsidian-flavored Markdown. They didn't write Quartz but they contributed to it.

Brandon
Quartz
generate the site
I am a contributor on their repo (I wrote the current implementation of the RSS feed generation and have a PR open for fine-grained feeds) but the actual site generator isn’t mine. Only posted because I thought it was in the “got it from a friend” category

I agree. After all, "convivial" does mean that you use the software in your community. Everybody writing their own software would be more of a neoliberal outlook! 😅

Brennen

Brennen (@brennen@federation.p1k3.com) wrote a Perl module, a Makefile and a few shell scripts to generate his site.

Brennen
Perl module
to generate his site
I've used it continuously since the days of cgi-bin, though it generates a tree of static HTML now rather than serving it on demand.

Case Duckworth

Case (@acdw@tilde.zone) uses sfeed and a lot of post-processing to generate a web view of a bunch of feeds (a "planet") in the "river of news" style.

Case
sfeed and a lot of post-processing
a web view of a bunch of feeds
It's the sfeed RSS toolkit with a rat's nest of sh/awk/whatever else I needed to make it spit out a page that looked okay.

Chris Patti

Feoh (@feoh@oldbytes.space) uses Nikola to generate his blog. Nikola is a static site generator written in easy to extend Python with a clean plugin architecture. The raw files are available from a git repository.

Feoh
Nikola
git repository
My grey matter wants all the world to run on Markdown, and there's no getting around that :)

Chris Siebenmann

Chris Siebenmann (@cks@mastodon.social) runs a wiki written in Python (including a long-running blog) that uses the Common Gateway Interface (CGI).

Chris Siebenmann
a wiki written in Python
a long-running blog
… rendering a bespoke Wikitext dialect from files in a directory tree, using an equally bespoke and more eccentric templating system to composite pages together. The blog portion itself is just a 'view' (and virtual directories) over top of part of the directory tree. It's all rather baroque but I'm unreasonably fond of it.

Cidney Hamilton

Cidney Hamilton (@cidney@social.city-of-glass.net) has a blog using Jekyll. It's complicated.

Cidney Hamilton
a blog using Jekyll
I’ve never worked as a professional Ruby on Rails dev (though I’ve used other website backends I like less), but I still use Jekyll and Ruby for this website. This means I don’t need to install Ruby unless I want to update the website, and then I have to deal with the very un-fun nature of ruby versions and dependencies. So I’ve been putting things off on this website and considering redesigning it. I like having things to share in IndieWeb meetups. I just don’t have a lot of time. – Ruby Environment Sunk Costs
Ruby Environment Sunk Costs

Clarity Flowers

Clarity Flowers (@clarity@xoxo.zone) has a Gemtext to HTML site generator.

Clarity Flowers
a Gemtext to HTML site generator
hoping mine will stand next to the rest of these with time to grow 🌸

Dave Gauer

Dave Gauer (@ratfactor@mastodon.art) has a page detailing the rat-roots he uses to edit, navigate and publish his pages: Vim, Bash, AWK, Ruby, Perl…

Dave Gauer
rat-roots
… even just a few navigation shortcuts within the text editor make a *huge* difference.

Devine Lu Linvega

Devine Lu Linvega (@neauoire@merveilles.town) uses oscean, written in a language targeting a virtual machine with 64kb of memory that is implemented in about 100 lines of C, that can be run on anything from a playdate, to a smart tv, allowing them to deploy the site from near anything with a CPU.

Devine Lu Linvega
oscean
written in a language
a virtual machine
It's written directly in the assembly language targeting the VM, the entire site has no other dependency than the runtime, which is about 40kb executable.
the assembly language

Drawk Cab

Drawk Cab (@drawkcab@hachyderm.io) wrote a proxy that serves gemtext files as web pages.

Drawk Cab
a proxy
gemtext
my website is currently a proxy I wrote in svelte to a static load of gemtext files (these are also served over Gemini but I didn't write that part)
my website

Emma Juettner

Emma Juettner (@emma@social.emmajuettner.com) forked makesite.py, a single-file python static site generator.

Emma Juettner
forked makesite.py
I like it because it's simple enough that I can tweak it easily. It's very satisfying to have a thought like "hmm, I really don't like writing Markdown, I'd much rather write my posts in HTML" and then be able to just... change the tool so it does that. :)

Gabriel Schneider

Gabriel Schneider (@gbrls@infosec.exchange) runs a site with a mix of Python, Elixir and Bash. Sources are available.

Gabriel Schneider
available
I use Obsidian and Vim for writing my notes, Dropbox for syncing, and a few scripts that get that Dropbox data, filter the ones which are marked as public and build my static website with them.

Idiomdrottning

Sandra Snan (@Sandra@idiomdrottning.org) uses Jekyll and some custom templates and some custom Ruby plugins to generate most pages, feeds and the twtxt exports. There's a script to turn README files in git repos into blog posts, a Chicken Scheme program to turn Markdown into Gemtext and a non-public glue script to turn it all into a Gemini capsule.

Sandra Snan
a script to turn README files in git repos into blog posts
a Chicken Scheme program to turn Markdown into Gemtext
That script understands a custom Liquid tag so pages can have gem-only and web-only sections (and entire pages can be gem-only or web-only). … I also have tons of Emacs stuff when writing the post

There's more info on fedi.

on fedi

Kototama

Kototama (@kototama@merveilles.town) uses a static website generator written in OCaml.

Kototama
static website generator
For a small project like this, it's also funnier to implement a missing functionality than reading the documentation of a plugin from a third-party software.

kr1sp1n

kr1sp1n (@kr1sp1n@sunbeam.city) uses the cosmopolitan binary of quickjs and a single 400 line JavaScript file that walks a local file tree and transforms found Markdown files into static HTML files. It also parse Front Matter YAML inside the Markdown files to fetch metadata like title and tags.

kr1sp1n
quickjs
JavaScript file
I do not use any 3rd-party libs or dependencies. I never published this night software before.

krowe

krowe (@krowemoh@mastodon.social) has a blog written in the Pick database, a specific open source version called ScarletDME.

krowe
a blog written in the Pick database
Everything from the web server, to the rendering language to the editor and shell was all written by me :) I have also made heavy modifications to the database itself.

Leon Henrik Plickat

Leon Henrik Plickat (@lhp@mastodon.social ) uses a Python script to add header and footer to hand-written HTML.

Leon Henrik Plickat
a Python script
It works well, but will probably get even more miserable when I'll eventually add tags to articles. I found that separating it into two stages, first collecting all pages to generate and meta-data before actually generating any output, is imperative for keeping it maintainable.

Matt Mills

Matt Mills (@Matt@photog.social) built Exblog using Elixir and the Phoenix Framework.

Matt Mills
Exblog
Phoenix Framework
I was tired of the headaches of static sites, and I wanted something I could tinker with and add features when I wanted. The edit page has a two column layout with live preview, getting that done was a nice quality of life improvement. Plus I can post there from anything with a web browser.

Sean Lewis

Sean Lewis (@slew@mas.to) uses a Python-based parser/assembler. It handles building the headers, footers and navigation.

Sean Lewis
a Python-based parser/assembler
I desiged my this website manager which forces me to be creative given a set of simple and restrictive rules, resulting in a relatively extensive website with no Javascript whatsoever.

Ten Digits

Ten Digits (@tendigits@merveilles.town) uses bash scripts to generate his site.

Ten Digits
I split out my “system” of Bash scripts into a clean starting point in case anyone wanted to use them without having to strip out all my content: shelp
shelp

Timur Ismagilov

Timur Ismagilov (@bouncepaw@merveilles.town) wrote Mycorrhiza, a wiki engine written in Go. Source files for the wiki are available in a repository.

Timur Ismagilov
Mycorrhiza
written in Go
repository
At some point I noticed that Mycorrhiza, the wiki engine, is not good for collecting links, so I made a separate tool called Betula for a separate bookmarking website. I am currently adding Fediverse capabilities to it.
Betula
a separate bookmarking website

Travis Briggs

Travis Briggs (@audiodude@sfba.social) took a digital garden template based on Eleventy Garden and customized it, going all the way to create a new Javascript markdown-to-gemtext library so that he could publish on Gemini.

Travis Briggs
Eleventy Garden
customized it
markdown-to-gemtext library
publish on Gemini
I've thought of "upstreaming" my changes, specifically making it easier for folks to start a digital garden that publishes simultaneously to Gemini, but I also kind of think there's No Fucking Point™.

He also also wrote the static site generator for a site to present audio files from scratch using Python, Flask, Flask-FlatPages and Frozen-Flask.

static site generator
a site to present audio files

Xandr

Xandr (@metasyn@merveilles.town) calls the software memex. It is written in Rust and converts Markdown to HTML. It "implicity converts file system hierarchy to website navigation". Sometimes the link target is empty and serves simply as a menu to further pages.

Xandr
memex
I would love to be added!

Zach Manson

Zach Manson (@pavo@toot.cafe) uses a Python script to turn Obsidian notes into HTML pages for a personal wiki.

Zach Manson
a Python script
a personal wiki
The generator just converts md files to html (with a few custom extensions), puts them into a template file and processes backlinks and tags. I would like to move my blog to it at one point, but I'd need to add custom behaviour for markdown and chronological posts.