CLAUDE.md
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
What this is
Personal academic website for Kristian López Vargas (https://kmlv.github.io), built on the academicpages template — a detached fork of the Minimal Mistakes Jekyll theme. The site is served by GitHub Pages: pushing to the master branch triggers an automatic rebuild and deploy. There is no separate CI/build step to run before publishing.
Note: the git repository lives in this directory (kmlv.github.io/), nested one level below the folder Claude is typically launched in. Run commands from this repo root.
Commands
Setup (once per machine — requires Homebrew + rbenv preinstalled):
./bin/setup # installs Ruby 3.3.5 (from .ruby-version) + bundler + gems into vendor/bundle/
Develop:
bundle exec jekyll serve # builds and serves at http://localhost:4000, live-reloads on edit
Use _config.dev.yml as an override for local dev (disables analytics, sets localhost url): bundle exec jekyll serve --config _config.yml,_config.dev.yml.
Rebuild the minified JS bundle (only needed if you touch theme JavaScript):
npm run build:js # uglifies assets/js/** into assets/js/main.min.js
Pinned versions: Ruby 3.3.5 (.ruby-version), gems locked in Gemfile.lock, gems install to vendor/bundle/ (git-ignored). SETUP.md has the same instructions in Spanish.
Content architecture
Content is Markdown with YAML front matter, organized into Jekyll collections (configured in _config.yml under collections:, each with permalink: /:collection/:path/):
_research/,_talks/,_teaching/,_portfolio/— collection entries, one file per item. Filenames are date-prefixed (YYYY-MM-DD-Name.md). Each entry’scollection:andpermalink:front-matter fields must match its directory._pages/— standalone pages (about, cv, research index, etc.). The site’s landing page is_pages/about.md._posts/— blog posts (surfaced via/year-archive/)._data/navigation.yml— the top nav menu._data/also holds author/UI data.files/— uploaded PDFs/assets; served athttps://kmlv.github.io/files/....images/— image assets._config.yml— site-wide settings (name, links, SEO, collections, defaults). Jekyll does not hot-reload this file; restartjekyll serveafter editing it.
Theme internals (rarely edited): _layouts/ (page templates incl. talk.html, single.html, archive.html), _includes/ (partials), _sass/ + assets/ (styles and JS).
Generating content from spreadsheets
markdown_generator/ converts TSV files into collection Markdown. Run the .py script (or the matching .ipynb) to regenerate entries — e.g. edit research.tsv then run python research.py to emit files into _research/. Same pattern for talks.tsv → talks.py.
talkmap.py (run from _talks/) scrapes the location: field from each talk, geolocates it via geopy/Nominatim, and regenerates the cluster map under talkmap/ (shown by _pages/talkmap.html). Requires the getorg, geopy, and glob Python packages.
Front-matter conventions
Collection entries carry domain-specific fields the layouts read — e.g. research entries use venue, paperurl, citation, PublicationStatus, and tags. When adding an entry, copy an existing file in the same collection and keep these fields consistent rather than inventing new keys.