CLAUDE.md
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
What this is
Natalí de Santi’s personal academic website (natalidesanti.github.io), built on the academicpages template (a fork of the Minimal Mistakes Jekyll theme). It is a static Jekyll site deployed via GitHub Pages. There is no application backend, build pipeline, or test suite — content lives in Markdown/YAML/JSON and is rendered by Jekyll/Liquid at build time.
Commands
Local development requires Ruby, Bundler, and Jekyll:
bundle install # install Ruby gems (delete Gemfile.lock first if this errors)
bundle exec jekyll serve # serve at localhost:4000, rebuilds on file change
bundle exec jekyll liveserve # live-reloading dev server (via the `hawkins` gem)
There is no JS build required for normal edits. The npm scripts in package.json only re-minify the bundled jQuery/plugins into assets/js/main.min.js and are rarely needed:
npm run build:js # regenerate assets/js/main.min.js from assets/js/_main.js + plugins
npm run watch:js # rebuild on change
There is no automated test suite or linter in this repo. Validate changes by running the dev server and visually checking the affected page(s).
Two Jekyll configs exist: _config.yml (production) and _config.dev.yml (local overrides — disables analytics, uses localhost:4000, expanded Sass output). When serving locally with both configs, pass them explicitly if you want dev overrides:
bundle exec jekyll serve --config _config.yml,_config.dev.yml
Site architecture
Standard Jekyll collections-based structure. Each collection is a directory of Markdown files with YAML front matter, rendered through a shared layout:
_posts/— blog posts (collection:posts, layoutsingle)_publications/— papers, one file per publication, front matter includesdate,venue,paperurl,citation,excerpt(collection:publications, layoutsingle)_talks/— talks/presentations, front matter includestype,venue,date,location(collection:talks, layouttalk)_teaching/— teaching entries (collection:teaching, layoutsingle)_portfolio/— portfolio items (collection:portfolio, layoutsingle)_pages/— standalone pages (About, CV, Publications index, Talks index, Teaching index, Portfolio index, Talk map, etc.), most usinglayout: archiveto list a collection via Liquid loops (see_pages/portfolio.html,_pages/talks.html) orlayout: singlefor free-form content (_pages/about.md,_pages/cv.md)_data/— site-wide structured data:navigation.yml— top nav bar entriesauthors.yml— author/sidebar profile infoui-text.yml— localizable UI strings (English defaults underen:)cv.json— JSON Resume–format CV data (currently template placeholder data, not wired into_pages/cv.md, which is hand-written Markdown instead)comments/— stored static comments (staticman provider)
_includes/— Liquid partials for layout pieces (head, footer, masthead, author-profile, comments, analytics, social-share, etc.), with provider-specific subfolders (_includes/analytics-providers/,_includes/comments-providers/) selected based on_config.ymlsettings_layouts/— top-level page templates (default,single,archive,talk,splash,home,archive-taxonomy,compress)_sass/— Sass partials;_sass/theme/_default.scssand_sass/theme/_dark.scsshold theme/color variants,_sass/vendor/bundles third-party Sass (breakpoint, font-awesome, magnific-popup, susy)assets/— compiled CSS output target, JS (vendor +_main.js+main.min.js), fontsimages/,files/— static media and downloadable files (PDFs, etc.); anything infiles/is served at/files/...
Content authoring conventions
- New posts, publications, talks, teaching entries, and portfolio items are added by dropping a new Markdown file into the corresponding
_posts/,_publications/,_talks/,_teaching/,_portfolio/directory with the same front-matter shape as existing files in that directory (see examples already in each folder for exact required fields per collection). - Front matter
collection:must match the collection name;permalink:is often left blank to use the collection’s default/:collection/:path/pattern set in_config.yml. - Filenames for posts/talks/publications are date-prefixed (
YYYY-MM-DD-slug.md), which Jekyll uses for chronological sorting/permalinks. markdown_generator/contains standalone Jupyter notebooks + equivalent.pyscripts (pubsFromBib.py,talks.py) that bulk-generate_publications/or_talks/Markdown files from a BibTeX file or TSV (talks.tsv/publications.tsv). These are optional bulk-import tools, not part of the site build.talkmap.ipynb/talkmap.pyregeneratetalkmap/map.html, a Leaflet map built fromlocation:fields in_talks/*.md; the map is embedded via_pages/talkmap.html.- Nav bar entries are edited in
_data/navigation.yml, not hardcoded in layouts. - Site metadata (title, description, author bio, social links, analytics provider) lives in
_config.ymlunderauthor:,social:,analytics:— this is the single source of truth for sidebar/profile info actually used by the theme (_data/cv.jsonis unused template boilerplate; don’t assume it drives the rendered CV page). - Comments, if enabled, are configured under
comments:in_config.yml(provider is currently unset/disabled); provider-specific templates are in_includes/comments-providers/.
Notes for making changes
- This is a visual, content-driven site — after editing Sass, layouts, or includes, run the Jekyll dev server and check the rendered page rather than relying on inspection alone.
- Sass compiles in
compressedstyle in production (_config.yml) andexpandedin dev (_config.dev.yml); use the dev config locally to get readable CSS output for debugging. _config.ymlis not auto-reloaded byjekyll serve— restart the server after editing it.
