Colophon

TL;DR: How this site is built and what it's made of.

The Generator

This blog is powered by a custom static site generator I built in Node.js — I call it my Easy-Blog Oven. No off-the-shelf framework — just a bespoke pile of scripts that converts Markdown files with YAML frontmatter (a format inspired by Jekyll) into HTML pages, indexes, tag archives, and RSS feeds. It's been through several iterations over the years and I keep tinkering with it.

Posts are written in Markdown, usually in Obsidian these days, and the build pipeline handles the rest: rendering content, generating indexes, optimizing images with sharp, and bundling client-side assets with esbuild.

The source is on GitHub if you're curious.

Typography & Design

The body and heading typeface is Bitter, a serif face designed for comfortable screen reading. It's self-hosted — no Google Fonts calls.

Icons are currently Font Awesome 4.3, though I'd like to replace those with inline SVGs eventually.

The site supports light and dark color schemes, following your system preference by default with a manual toggle in the header. The theme system uses CSS custom properties throughout.

Client-Side Features

The site is mostly static HTML with progressive enhancements layered on via vanilla JavaScript and Web Components:

Hosting & Deployment

The site is hosted on Amazon S3 behind CloudFront. Pushing to the main branch triggers a GitHub Actions workflow that builds the site and syncs it to S3 with rclone, then invalidates the CloudFront cache.

There's also a staging setup that deploys to GitHub Pages for previewing changes.

The Name

This blog has lived at blog.lmorchard.com since around 2012. Before that, it was 0xDECAFBAD — a name chosen because I like hexadecimal but I despise coffee without caffeine. I've been blogging in one form or another since about 2002.