CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

What this is

Francesco Bailo’s academic personal site — a Jekyll site built on the remote theme mmistakes/minimal-mistakes, hosted on GitHub Pages (custom domain via CNAME: francescobailo.net).

Commands

bundle install          # install gems (first time / after Gemfile changes)
bundle exec jekyll serve # run local dev server (http://localhost:4000), rebuild on save
bundle exec jekyll build # build the static site into _site/

There is no test suite, linter, or CI config in this repo.

You are never required to run Jekyll locally. Francesco always builds the site on GitHub Pages by pushing to the repo. Do not run bundle install, bundle exec jekyll serve, or bundle exec jekyll build to verify changes — the local Ruby toolchain is often too old to build anyway. Instead, verify changes by checking that new files follow the conventions documented below (front matter fields, permalink format, collection wiring, includes). The commands above are listed only for reference if Francesco asks for a local preview.

Architecture

This is a content-only Jekyll repository (no custom plugins/Ruby code). The two things to understand are the collection system and the link-post pattern.

Collections hold the actual content

Site content lives in per-type collections declared in _config.yml, each with its own directory and defaults block: _peer-reviewed-articles, _books, _book-sections, _research-reports, _news-articles, _media-appereances, _research-presentations, _teaching-units, _preprint-articles.

Every item in these collections:

Listing pages in _pages/ (e.g. research-publications.md, research-presentations.md) pull from these collections at build time via Liquid, e.g.:


 ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ... 

When adding a new collection or renaming front-matter fields, update both the _config.yml collection/defaults block and every listing page that loops over site.<collection>.

Almost all files in _posts/ (63 of 65) are minimal stub posts whose entire body is a link: front-matter field pointing at one of the permalink pages above, e.g.:

---
title: "📻  ABC @ Antropic, Mythos and Fable"
permalink: "/2026/06/16/abc-antropic-mythos-fable/"
date: "2026-06-16"
tags:
  - link
link: https://francescobailo.net/6TIP8P66/
---

These act as chronological blog/feed entries (“I published X”) that reference the canonical collection item rather than duplicating its content. When adding a new publication/presentation/media item, the usual flow is: (1) add the collection item under its 8-char key, (2) add a short dated link-post in _posts/ pointing to /​<KEY>/.

Front matter defaults

_config.yml sets defaults: per collection/type (layout, author_profile, share, sidebar nav). Most collection items use layout: single with author_profile: false and a sidebar: nav: sidebar block; _posts and _pages use author_profile: true. Sidebar navigation itself is defined in _data/navigation.yml (main = top nav, sidebar = the Research/Teaching/Media sidebar tree) — new top-level sections need an entry there.

Static pages

_pages/ holds the site’s static/listing pages (About, CV links, statements, and the publication/presentation listing pages described above). _pages is explicitly included via include: in _config.yml since Jekyll doesn’t process underscore-prefixed dirs by default.

Grants (_grants collection)

Each file is keyed by a short descriptive slug (not a Zotero key, e.g. 2026-sseac-large.md), sets its own permalink: /grants/<slug>/, and carries: title, funder, scheme, amount, start-date, end-date, collaborators, projects, status, category (Internal or External — internal means a UTS/USYD faculty, school, or centre scheme; external means an outside funder). The body is a short rendered summary (Funder/Scheme/Amount/Period lines) since the single layout does not auto-print custom front-matter fields — write that summary into the body whenever you add or edit a grant. research-grants.md renders two tables (Internal, External) from site.grants, linking each title to its permalink page; research.md has a “Recent grants” teaser filtered to the current year.

Never name collaborators anywhere on the public site — grants included. Do not display the collaborators field (or any collaborator/co-author name) in a grant’s table row or body summary unless Francesco has explicitly told you, in that request, to include names for that specific item. The collaborators field may still be stored in front matter for internal reference, but must not be rendered. This applies to any new grant, and to any other collection where naming collaborators isn’t already an established, explicitly-requested pattern (e.g. publication authors are fine — that’s standard citation practice — but ad hoc “with X and Y” mentions are not).

Embedding video

To embed a video player (not just a link) in a collection item’s body, use the Minimal Mistakes theme’s built-in include:











<!-- Courtesy of embedresponsively.com -->

  <div class="responsive-video-container">
    <iframe src="https://www.youtube-nocookie.com/embed/VIDEO_ID" title="YouTube video player" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowfullscreen></iframe>
  </div>


Items with an embedded video should also get "video" added to their categories front matter.

Sourcing metadata from Zotero

Francesco tracks his publications/presentations/media appearances in Zotero, keyed by the same 8-character item key used for filenames in this repo. When creating or fixing a collection item, use the zotero MCP tools (zotero_item_metadata, zotero_search_items, zotero_item_fulltext) to pull authoritative title/date/author/presenter/DOI/URL fields for that key rather than guessing.