CLAUDE.md
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project
Personal academic website for Alena Rottensteiner, deployed to GitHub Pages at https://rottenstea.github.io. Forked from the Academic Pages Jekyll template (which itself derives from Minimal Mistakes) and then customized — upstream merges will conflict, so prefer manual cherry-picks if pulling in template fixes.
Common commands
# Install Ruby dependencies (one-time; if it fails, delete Gemfile.lock and retry)
bundle install
# Serve locally with live reload at http://localhost:4000
bundle exec jekyll serve -l -H localhost
# Note: changes to _config.yml require restarting the server
# Rebuild the bundled JS (jQuery + fitvids + smooth-scroll + plotly + custom plugins → assets/js/main.min.js)
npm run uglify
npm run watch:js # rebuild on change
# Docker alternative (avoids local Ruby/Node setup)
docker compose up # serves on localhost:4000
Architecture
Jekyll collections drive most content (configured in _config.yml under collections:):
_publications/→/publication/:path/_talks/→/talks/:path/_teaching/,_portfolio/→ analogous
The CV lives at /cv/ (_pages/cv-json.md → _includes/cv-template.html), a styled CV rendered from _data/cv.json. Edit _data/cv.json directly — it is the source of truth. (The old markdown CV at /cv_simple/ and the scripts/cv_markdown_to_json.py generator have been removed; despite the script’s name, the JSON was never actually generated from markdown.)
Splash/landing pages (_pages/home.md, _pages/research.md) use layout: splash with a hero overlay_image from images/ (e.g. hero-banner.jpg, research-banner.jpg) and inline <style> blocks for page-specific overrides.
Theming: site_theme in _config.yml selects from themes in _sass/theme/ (default, air, sunrise, mint, dirt, contrast). Custom layout overrides live in _sass/layout/ and are imported via _sass/_themes.scss. Author profile sidebar fields (avatar, ORCID, GoogleScholar, GitHub, etc.) are configured under author: in _config.yml.
Publication front matter uses category: first_author or category: articles (the two publication_category keys defined in _config.yml); the publications page groups entries by these.
Talkmap: talkmap.ipynb geocodes _talks/ locations into talkmap.html. It runs automatically via .github/workflows/scrape_talks.yml on any push that touches _talks/, talks/, or the notebook itself, and commits the regenerated talkmap_out.ipynb back to the branch. Don’t manually edit talkmap_out.ipynb.
Bulk content generation: markdown_generator/ contains Python scripts and Jupyter notebooks that turn TSV/CSV files into individual _publications/ or _talks/ markdown entries — useful when adding many items at once.
JS pipeline: source lives in assets/js/_main.js and assets/js/plugins/; the npm run uglify script bundles them with vendor libs into assets/js/main.min.js, which is what the site actually loads. Editing _main.js without rebuilding has no effect on the served site.
Conventions
- Publication filenames and
permalinkslugs useYYYY-MM-(year-month only, no day) — e.g._publications/2026-02-NGC2024_YSO_kinematics.mdwithpermalink: /publication/2026-02-NGC2024_YSO_kinematics. Thedate:field inside front matter still takes a full ISO date. - Site URL config (
url,repository,baseurl) is already set forrottenstea.github.io— leave alone unless deploying elsewhere.
