Hello, World

This is the first post on my new blog, built from scratch with a custom static site generator. No frameworks, no JavaScript — just Python, Jinja2, and markdown.

Why build your own?

There are plenty of static site generators out there — Hugo, Jekyll, Eleventy, Pelican. So why build another one?

  1. It's small. The entire build script is under 200 lines.
  2. It's mine. Every line is intentional. No surprises.
  3. It's fun. Sometimes the best way to learn is to reinvent the wheel.

A code example

Here's the core of the build pipeline in Python:

def build(posts_dir: Path, output_dir: Path) -> None:
    """Run the full build pipeline."""
    posts = load_posts(posts_dir)
    for post in posts:
        render_post(post, output_dir)

And some shell to run it:

uv run blog build
open output/index.html

What's next

  • Tag pages and an archive view
  • An Atom feed for RSS readers
  • Syntax highlighting for code blocks[1]
  • Eventually, deployment to S3 + CloudFront

All in good time.


  1. Actually, syntax highlighting is already working — powered by Pygments. ↩︎