Everything that changes often lives in a data file or a single markdown file. You should not need to touch HTML or CSS for routine updates.
scripts/serve.sh # http://localhost:4000
First time only:
brew install ruby
gem install jekyll jekyll-feed jekyll-sitemap jekyll-paginate jekyll-gist jekyll-redirect-from
(The repo’s Gemfile pins the github-pages gem, which needs an old Ruby.
scripts/serve.sh bypasses bundler and uses Jekyll 4 directly. GitHub Pages
still builds the published site from the Gemfile.)
_publications/, e.g. _publications/my-paper.md:---
title: "Paper Title"
permalink: /publication/my-paper
date: 2026-06-01
collection: publications
venue: The Full Conference Name (ACME 2026)
venue_short: ACME # shown in the left rail
authors: <b>Hans W. A. Hanley</b> and Co Author
paperurl: 'https://...'
code: 'https://github.com/...' # optional
recording: 'https://...' # optional
topics: nlp networks # any of: disinformation nlp networks ai-safety privacy
featured: true # optional — shows on the front page
flag: Best Paper # optional — small red badge
excerpt: 'One or two sentences.'
---
files/._data/updates.yml.The publications page, front page, /llms.txt, /are-you-an-ai/ and the
JSON-LD all update themselves.
One file in _talks/. Links in the body (slides, recording, paper) are rendered
automatically.
---
title: "Talk Title"
collection: talks
permalink: /talks/short-name
venue: "Where it happened"
date: 2026-05-01
type: "Talk"
location: "City, Country"
---
Short description.
[Slides](https://...)
One entry at the top of _data/updates.yml.
_data/links.yml — single source of truth for the side dock, the “Elsewhere”
list and the /are-you-an-ai/ page.
_data/navigation.yml.
brew install tectonic
scripts/build-cv.sh cv # -> files/Hans_WA_Hanley_CV.pdf
scripts/build-cv.sh resume # needs the SourceSansPro OTF fonts installed
Sources are in cv/.
scripts/lint-style.sh /path/to/_site
Fails on gradients, glassmorphism, card shadows, Inter/Poppins, font CDNs, emoji headers, marketing filler and fake metric counters.