CLAUDE.md
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
What this is
Edward Ribeiro’s personal academic website: a Jekyll site on the Minimal Mistakes theme, pulled in via remote_theme (see _config.yml) so upstream layouts/includes/Sass stay unmodified locally. Only _config.yml, _data, content collections (_pages, _posts, _talks, _teaching, _projects, _publications), assets/css/main.scss, and assets/js are customized here.
Nested inside the same repo is reading-tracks/, an unrelated, fully static, dependency-free single-page app (a catalog of distributed-systems/databases papers) served at /reading-tracks/ and linked from the nav as “Paper Club @ UnB”.
Commands
Jekyll site (local, native)
gem install bundler
bundle install # or: bundle config set --local path 'vendor/bundle' && bundle install
bundle exec jekyll serve -l -H localhost # live reload; http://localhost:4000
Editing Markdown/HTML/data live-reloads; editing _config.yml requires restarting the server.
Jekyll site (Docker)
chmod -R 777 .
docker compose up # site at localhost:4000, config merges _config.yml + _config_docker.yml
JS bundle (assets/js/main.min.js)
npm install
npm run build:js # uglifies jquery/fitvids/smooth-scroll/plotly + plugins + _main.js into main.min.js
npm run watch:js # rebuild on change to assets/js/**/*.js
assets/js/_main.js is the only hand-edited JS source; main.min.js/main.min.js.map are the committed build output — regenerate with npm run build:js rather than editing them by hand.
reading-tracks (standalone, no build step)
cd reading-tracks
python3 -m http.server 8000
Then open http://localhost:8000/. Do not open index.html via file:// — the browser blocks fetch() of the YAML data files, so nothing renders.
CV JSON regeneration
scripts/update_cv_json.sh # rebuilds _data/cv.json from _pages/cv.md + _config.yml via scripts/cv_markdown_to_json.py
There is no test suite or linter configured in this repo.
Architecture
Jekyll site
- Content is authored in collections under
_pages,_posts,_talks,_teaching,_projects,_publications;_data/navigation.ymlcontrols the header menu order (most entries are commented out — only “Blog Posts” and “Paper Club @ UnB” are currently live). _config.ymlis the single source of truth for site metadata, author/social profile fields, collection permalinks, and per-collection layout defaults (defaults:block) — check it before assuming a page’s layout or front matter behavior._config_docker.ymlis merged on top of_config.ymlonly in the Docker path (--config _config.yml,_config_docker.yml); nativebundle exec jekyll servedoes not use it.- Theme layouts/includes/Sass partials are not in this repo — they’re pulled from
mmistakes/minimal-mistakes@4.28.1at build time. Local overrides live only in_includes/head/custom.html,assets/css/main.scss, andassets/js. _site/(the built output) is committed to git in this repo, unusually for a Jekyll project — treat it as generated output, not something to hand-edit; regenerate it by running Jekyll rather than patching files under_site/directly.markdown_generator/andtalkmap.py/talkmap.ipynbare offline content-generation utilities (CSV/TSV/BibTeX → collection Markdown, talk locations → Leaflet cluster map); they’re run manually, not part of the Jekyll build.
reading-tracks
- Pure client-side app:
index.html+app.js+styles.css, withjs-yamlvendored locally (vendor/js-yaml.min.js, no CDN, no npm deps). - All content lives in
databases/{papers,researchers,venues}.yaml, currently schemav4(seemetadata.schema_versioninpapers.yaml).lineagesinpapers.yamlis a many-to-many map of lineage-id → paper-ids;predecessors/successorson a paper are conceptual reading-order relations, not a citation graph. app.jsfetches the three YAML files at load, keeps everything in onestateobject (view, filters, search, grouping), and re-renders synchronously on every filter/search change — there’s no framework, router, or build step.- Deploying is just publishing these static files to GitHub Pages; there’s no backend and no build.
- Runtime files in
reading-tracks/are synchronized from the sibling ReadingTracks repository withscripts/sync_reading_tracks.sh.