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’s collection: and permalink: 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 at https://kmlv.github.io/files/....
  • images/ — image assets.
  • _config.yml — site-wide settings (name, links, SEO, collections, defaults). Jekyll does not hot-reload this file; restart jekyll serve after 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.tsvtalks.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.