CLAUDE.md
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Overview
This is Jianhao Wu’s personal academic website (rushingfox.github.io), built on the academicpages Jekyll template (a fork of Minimal Mistakes). It is published via GitHub Pages from master.
Local development
GitHub Pages builds the site automatically on push, but for local preview:
bundle install # install Ruby deps (delete Gemfile.lock first if it errors)
bundle exec jekyll serve --config _config.yml,_config.dev.yml # serve at http://localhost:4000 with dev overrides
bundle exec jekyll liveserve # alternative; auto-rebuilds on change
_config.dev.yml only overrides a few keys (url, analytics off, expanded sass) — pass it in addition to _config.yml. Note that _config.yml is not auto-reloaded; restart jekyll serve after editing it.
The JS toolchain (package.json) is inherited from Minimal Mistakes and only needed when modifying assets/js/:
npm run build:js # uglify vendor + plugin JS into assets/js/main.min.js
npm run watch:js # rebuild on change
There is no test suite and no linter configured.
Content architecture
Content lives in Jekyll collections (configured in _config.yml under collections:), each with its own folder and permalink pattern /:collection/:path/:
_publications/— papers (filename conventionYYYY-MM-DD-title.md)_talks/— talks & posters; rendered with the customtalklayout_teaching/— teaching entries_portfolio/— portfolio items_posts/— blog posts (standard Jekyll posts, paginated 5/page)
Static pages (about, CV, publications index, etc.) live in _pages/ and are explicitly included via _config.yml’s include: list. Site-wide nav comes from _data/navigation.yml; UI strings from _data/ui-text.yml; author/sidebar info from _config.yml’s author: block (not _data/authors.yml, which is template scaffolding).
Defaults in _config.yml set layout: single + author_profile: true for most content, and layout: talk for talks. To change the sidebar, comment area, or author block site-wide, edit those defaults: rather than every front matter.
Theme internals (don’t edit unless restyling the whole site):
_layouts/— page templates (single.html,talk.html, archives, …)_includes/— partial templates referenced by layouts_sass/+assets/css/— styling (Sass compiled by Jekyll; output style iscompressedin prod,expandedin dev)assets/js/— vendored jQuery + plugins, bundled intomain.min.js
User-uploaded files (PDFs, slides, images) go in files/ and images/ and are served at the corresponding URL paths.
Generating publication / talk markdown
markdown_generator/ holds Jupyter notebooks and equivalent .py scripts that turn publications.tsv / talks.tsv (or a BibTeX file via pubsFromBib.py) into one markdown file per entry, ready to drop into _publications/ or _talks/. Use these instead of hand-writing entries when bulk-importing.
talkmap.ipynb / talkmap.py build the interactive map at /talkmap/ from the existing _talks/ files; rerun after adding talks if the map page is in use (talkmap_link: false in _config.yml currently hides the link).
Conventions worth knowing
- New publications/talks must use the
YYYY-MM-DD-slug.mdfilename pattern — Jekyll uses the date for sorting and the slug for the permalink. - Anything you don’t want shipped to the built site should be added to the
exclude:list in_config.yml(already excludesnode_modules,Gemfile,README, etc.). - The site uses the GitHub Pages-safe plugin whitelist (
jekyll-paginate,jekyll-sitemap,jekyll-gist,jekyll-feed,jemoji); adding other plugins will work locally but break the GitHub Pages build.
