This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is a personal data-science blog/portfolio built with Jekyll using the Minimal Mistakes theme. It is published as a GitHub Pages site at master-data.science (see CNAME); pushing to the default branch deploys the site.
bundle install # install Ruby gem dependencies
bundle exec jekyll serve # build + serve locally with live reload at http://localhost:4000
bundle exec jekyll build # one-off build into _site/
bundle exec jekyll build --trace # build with full error backtraces when debugging
The theme is pulled in as the minimal-mistakes-jekyll gem (see Gemfile). package.json, minimal-mistakes-jekyll.gemspec, and the npm run build:js scripts belong to the theme’s own JS asset pipeline and are rarely needed — only run npm run build:js if editing theme JavaScript under assets/js/.
Gemfile.lock is gitignored. There is no test or lint suite; correctness is verified by building the site and viewing pages.
The site is content-driven. Most work means adding/editing Markdown files with Jekyll front matter, not code.
Registered collections (configured in _config.yml under collections, each rendered to its own permalink):
_portfolio/ → /portfolio/ — project write-ups. Filenames carry a numeric prefix (e.g. 770408-...) that controls sort order; pick a prefix consistent with neighbors when adding a project._paper_review/ → /paper_review/ — ML paper reviews, filenames date-prefixed (YYYY-MM-DD-...)._eli5ml/ → /eli5ml/ — “explain like I’m 5” ML concept articles._ai_what_ifs/ → /ai-what-if/ — speculative thought experiments about possible AI futures. Note the folder uses underscores (ai_what_ifs) while the URL uses hyphens (ai-what-if); this is set via a custom permalink on the collection in _config.yml (not the default /:collection/:path/).Posts: _posts/ holds blog posts named YYYY-MM-DD-title.md, surfaced via /year-archive/.
Important: _mlops_notes/ and _analytics_notes/ directories exist but are not registered as collections in _config.yml, so they are not built into the site. _draft/ is working material and is excluded from builds. To publish content from these folders, move it into a registered collection or _posts/ and add proper front matter.
Per-collection defaults are set in _config.yml under defaults (layout, author_profile, toc, sidebar text, etc.) — front matter in individual files only needs to override or add page-specific values like title, excerpt, header.teaser, and sidebar.
When writing or editing article content (portfolio projects, paper reviews, posts), match the author’s voice:
- ), a comma, or restructure the sentence instead._config.yml — site-wide settings; not auto-reloaded, restart jekyll serve after editing it._data/navigation.yml — top navigation menu links.index.html — homepage; the feature_row front matter block lists the featured projects shown on the landing page (update this when adding a headline project)._pages/ — standalone pages (about, archive pages) with explicit permalink._layouts/, _includes/, _sass/, assets/ — theme-provided layouts, partials, styles, and assets; the minimal_mistakes_skin setting in _config.yml controls the color scheme.assets/images/ and assets/documents/ — images and PDFs (resumes, reports) referenced by content.When creating a new working branch, use a semantic prefix that describes the change rather than the default claude/ prefix:
feat/ — new feature or structural addition (e.g. registering a new collection, adding a page layout).post/ — a new post or article (collection entry, blog post, paper review).fix/ — bug fix or content correction.chore/ — config/tooling/housekeeping changes that aren’t features or posts.Pick the prefix that best matches the intent of the change; add others as new categories arise.