New Blog Setup

I've migrated this blog to a new setup. Here's how it works now:

Stack

  • Lektor - Static site generator with a nice content model
  • Pandoc - Builds my resume from YAML to HTML
  • just - Command runner for build tasks
  • GitHub Actions - Automatic deployment on push to main
  • PureCSS - Lightweight CSS framework

How It Works

Content lives in YAML and Lektor's .lr files. The build process:

  1. just resume - Pandoc converts src/resume.yml to HTML using a custom template
  2. lektor build - Lektor builds the rest of the site
  3. GitHub Actions deploys to GitHub Pages on every push

Why Lektor?

I really enjoyed using GNU Guix and Haunt. Guix is a fantastic package manager with reproducible builds, and Haunt is a lovely Scheme-based static site generator. However, I wanted something that runs easily on macOS without needing a Linux VM or container.

More importantly, I wanted to focus on writing blog posts, not building and maintaining my own blogging system. Lektor has a clean content model, and just works out of the box.

PlantUML Diagrams

I wrote a small Lektor plugin that renders PlantUML diagrams directly in markdown. Just use a fenced code block with plantuml as the language:

UserLektorPlantUML ServerUserUserLektorLektorPlantUML ServerPlantUML ServerWrite markdown with PlantUML blockSend encoded diagramReturn SVGRendered page with inline diagram

The plugin encodes the diagram text and fetches the rendered SVG from the public PlantUML server at build time. The SVG is embedded inline, so no external requests are made when viewing the page.

The full source is on GitHub.