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 permalink slugs use YYYY-MM- (year-month only, no day) — e.g. _publications/2026-02-NGC2024_YSO_kinematics.md with permalink: /publication/2026-02-NGC2024_YSO_kinematics. The date: field inside front matter still takes a full ISO date.
  • Site URL config (url, repository, baseurl) is already set for rottenstea.github.io — leave alone unless deploying elsewhere.