A build log for this site — how it was made, what changed, and where things stand. Written for readers curious about the process, and as a reference for future maintenance.

Where We Started

  • Ribbonfarm ran as a WordPress blog from 2007 to 2024 — 17 years, 1,133 posts, 13,258 comments, 60 contributors (32 WordPress accounts, many bundled under a shared "Guest" handle).
  • The blog was retired in late 2024. The goal: preserve everything as a permanent static archive and redirect the domain here, with no server-side processing.
  • Source materials: a 527,000-line WordPress XML export (February 2026), a full media library (6,878 files, 1.1 GB), a complete MySQL database dump, and the original WordPress theme files for CSS reference.
  • All source materials are kept read-only. Nothing was regenerated from scratch; all work was done on editable copies.

The Approach

  • A custom Python static site generator (build_site.py) written from scratch. No Jekyll, Hugo, or other framework — direct control over every output file.
  • Content format: each post and page is a .html file with YAML frontmatter + original HTML body. Non-lossy: nothing was stripped that couldn't be reconstructed.
  • Images served from Cloudflare R2 (media.ribbonfarm.com), not bundled into the static build.
  • Hosted on Cloudflare Pages (direct upload, not git-connected CI).
  • Work done in iterative sessions with Claude (Sonnet): build → review → fix → deploy. Each session tackled one area at a time.
  • The build is fully reproducible from source. A "rebuild from scratch" procedure is documented in CLAUDE.md.

Session Log