I've been meaning to update my personal website infrastructure for a while. The site was running on Pelican 3.7.1, which was getting long in the tooth. This December, I finally migrated to Pelican 4.11 using Claude Code, Anthropic's agentic AI coding tool.

Migration Overview

This repository is a fresh migration of the original TheoryAndPractice repository. The migration involved several key changes:

  • Pelican version: 3.7.1 → 4.11.0
  • Environment management: Now uses pixi for reproducible environments
  • Plugin system: Migrated to Pelican 4's namespace plugin architecture where possible
  • Deployment: GitHub Actions workflow deploys to cranmer/cranmer.github.io

What Was Preserved

  • All existing content and URL structure
  • pelican-bootstrap3 theme with Bootswatch 'flatly' styling
  • Custom per-page JavaScript and CSS functionality
  • Jupyter notebook embedding via liquid tags
  • BibTeX bibliography support

Key Changes

Added

  • Fresh repository migrated from Pelican 3.7 to Pelican 4.11
  • pixi environment management for reproducible builds
  • GitHub Actions deployment workflow to cranmer.github.io
  • Publications page (/publications.html) generated from BibTeX
  • Presentations page (/presentations.html) displaying 113 talks with video icons, compatible with IRIS-HEP format
  • Custom pelican-presentations plugin for parsing YAML presentation data
  • Pagefind search with instant client-side search across all pages
  • Bluesky social link with custom butterfly icon
  • BibTeX modal popups with copy-to-clipboard functionality
  • Markdown rendering inside HTML blocks (md_in_html extension)

Fixed

  • Markdown links not rendering inside HTML <div> blocks
  • Floating images appearing in blog index summaries
  • BibTeX popup windows blocked by modern browsers (replaced with Bootstrap modals)

Plugin Modifications

The migration required modifications to several plugins:

pelican-cite: Added Bootstrap modal for viewing BibTeX entries with copy-to-clipboard functionality.

pelican-bibtex: Added Bootstrap modal replacing the old window.open popups that modern browsers block.

pelican_javascript: Migrated to Pelican 4 signal API while maintaining support for per-page custom CSS and JavaScript.

pelican-presentations: A new plugin created during this migration to generate a presentations page from YAML data. It's compatible with the IRIS-HEP presentations format, groups talks by year, and displays video icons for presentations with recordings.

Working with Claude Code

This entire migration was done in collaboration with Claude Code. The AI agent was able to:

  • Understand the existing Pelican 3.7 configuration and plugin structure
  • Set up the new pixi environment and Pelican 4.11 configuration
  • Migrate and modify plugins to work with the new Pelican version
  • Create a new pelican-presentations plugin from scratch, compatible with IRIS-HEP's format
  • Debug issues with template rendering and markdown processing
  • Create the GitHub Actions deployment workflow
  • Add new features like the BibTeX modals, presentations page, Pagefind search, and Bluesky social icon

It was a genuinely collaborative process—I would describe what I wanted, Claude would implement it, and we'd iterate on the details together.

Documentation

For full details on the setup and all changes made, see:

  • README.md - Complete documentation on setup, deployment, and configuration
  • CHANGELOG.md - Detailed list of all changes made during migration