The text and the code go hand in hand
- Building your website with your software.*
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!
- With what name do you want to be listed?
- Your fediverse account (if not the one you're using to contact me)
- A link to the text you wrote (the site)
- A link to the code you wrote, co-wrote, or a friend of yours wrote
- A few words on why you implemented it the way you did and what was important to you
– @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.
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.
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.
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.
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.
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.
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.
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.
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).
… 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.
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
Clarity Flowers
Clarity Flowers (@clarity@xoxo.zone) has 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…
… 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.
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.
Drawk Cab
Drawk Cab (@drawkcab@hachyderm.io) wrote a proxy that serves gemtext files as web pages.
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)
Emma Juettner
Emma Juettner (@emma@social.emmajuettner.com) forked makesite.py, a single-file python static site generator.
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.
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.
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.
Kototama
Kototama (@kototama@merveilles.town) uses a static website generator written in OCaml.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.