27 November 2020

My winter project is to set up a family web site on a Raspberry Pi on the home network.

Family Web Server

What is a family web server? It should have a way to serve HTML pages and all of the content that goes with them. My preference is nginx for serving web content and proxying requests to other services. That is great for static content publishing which is a big part of a web site.

A web site is more than serving pages, you also need to provide RSS feeds so other people can find your site. It allows anyone that is interested in your content to follow your site using a feed reader. Sites also need a way to publish more ephemeral, short-form content, think Twitter. I have found a decent replacement for this service in Matix. This is a protocol, not an implementation. For that I currently favor Synapse.

I also think of a web site as a place to host your own source code. Today that means a git server. This sort of follows given that I manage a web site as a collection of files with the contents of the site. It may be that as an engineer form and function are on equal footing, and the balance of a solution involves trading forms and functions.

Markdown

HTML5 is a fairly decent markup language for expressing thoughts and arranging text and images on a website. It is a bit heavy on markup for most day to day publishing, so most people use an exporter from their favorite word processor or a content management system that provides a WYSIWYG editor.

Markdown is a text only format that uses conventions that would be familiar to anyone that tried to add emphasis to text only email in the 1980s. While there are several variants of Markdown, the basics are close, so pick one that is supported in your technical stack and stick with it.

I prefer a file based structure for web site production. A full CMS is not usually compatible with the way I work on a site. I do not want my content in a proprietary format published using a proprietary workflow. I have learned to trust open source, especially projects that keep their tool chain short.

Human Interface

The most important thing about a web publishing framework is that it allows humans, you and I, to create content and share it with as little friction as possible. I have used vim to edit content for years. Tonight I was introduced to Zettlr as a nice editor for Markdown. Combined with git hooks and a suitable workflow it could be integrated into a very functional stack.

I considered making the family web site a wiki. I do like most wiki file formats, Markdown appears to be a more powerful format for generic publishing. I will have to create tutorial material for the family so they may publish their content using the final workflow. I think keeping it file based will make it more resilient to changes in technology.