CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Repository purpose
Personal academic website for Thomas Hasenzagl, deployed via GitHub Pages at the custom domain thomashasenzagl.com (see CNAME). Built with Jekyll (_config.yml uses kramdown markdown). Pushing to master triggers GitHub Pages to rebuild and deploy — there is no separate CI step.
Local preview
bundle install
bundle exec jekyll serve
Then open http://127.0.0.1:4000. Auto-regeneration is on, so edits to HTML/CSS reload on save. Generated output goes to _site/ (gitignored).
Requires Ruby ≥ 3.0 (Apple’s bundled /usr/bin/ruby is too old — use Homebrew’s: brew install ruby and prepend /opt/homebrew/opt/ruby/bin to PATH). The vendor/ and .bundle/ directories are gitignored; Gemfile.lock is committed.
There are no tests, linters, or CI in this repo.
Architecture
This is a small static site with a single Jekyll layout and hand-authored HTML pages:
- _layouts/default.html — the only layout. Defines header, nav (ABOUT / CV / RESEARCH / TEACHING), footer, and conditional analytics include. Every content page sets
layout: defaultin its front matter. - _includes/analytics.html — Google Analytics, included only when
jekyll.environment == 'production'. - index.html — homepage hero (bio + CV/Research buttons).
- research/index.html — the most content-heavy page: a manually maintained list of working papers, published papers, and non-technical articles. Each entry links to a PDF in research/papers/ and (where applicable) a BibTeX file in research/bibtex/.
- teaching/index.html — teaching page.
- cv/ — the CV PDF lives at the date-less filename
hasenzagl_cv.pdfso the homepage and nav links stay stable across updates. To update the CV, replace the file in place; do not introduce a dated filename. - css/main.css — single stylesheet linked from the layout and from
index.html. - images/ — profile photos, favicon. The homepage references a dated profile photo (e.g.
about_072025.jpg), so swapping the photo means updating index.html.
Conventions when editing content
- Adding a paper: add a
<p class="research-p">block to the appropriate section in research/index.html, drop the PDF in research/papers/, and (if cited) add a.txtBibTeX file in research/bibtex/. Use the existing entries as the structural template — title link, authors line, journal name in<span class="journal-name">, and<a class="small-link">for Code/Bibtex/Appendix sidelinks. - Updating the CV: replace cv/hasenzagl_cv.pdf in place. The filename is intentionally date-less so no HTML edits are needed.
- PDF and image filenames are public URLs. Renaming a file in
research/papers/,cv/, orimages/will break any existing external link (CVs, citation pages, social posts).