CLAUDE.md — Blog setup & authoring for giorgionicoletti.github.io
CLAUDE.md — Blog setup & authoring for giorgionicoletti.github.io
This file is context for working on the blog section of my personal academic website. It covers both the one-time setup and the recurring workflow for adding new posts. Read it fully before making changes.
The site
- Personal academic website, published at https://giorgionicoletti.github.io
- Built with Jekyll, using the AcademicPages template (a fork of Minimal Mistakes). Hosted on GitHub Pages.
- I have never used the blog/posts feature before. As of this writing:
- There is no
_posts/folder in the repo. - There is a
_pages/folder, but noposts.md/ blog listing page in it. - The top navigation currently has: Research & Media, Publications, Curriculum, Talks, Teaching — and no Blog link.
- There is no
Important: verify before creating
AcademicPages often ships blog scaffolding in a latent / half-configured state. Before creating anything, check the actual state of the repo — do not assume, and do not create duplicate scaffolding. Specifically check:
_config.yml— Is thepostscollection already declared? Is there already apaginate/paginatorsetting? Are post permalinks/defaults configured underdefaults:? AcademicPages usually has acollections:anddefaults:block already — confirm what’s there rather than adding a conflicting one._data/navigation.yml— This controls the top menu. Adding the “Blog” link happens here, not in HTML. Match the existing entry format exactly._pages/— Check whether a year-archive or posts-listing page already exists under a different name before creatingposts.md. AcademicPages sometimes includesyear-archive.htmlor similar._layouts/— Confirm asingleorpost-style layout exists (it almost certainly does in AcademicPages). New posts will use it.
One-time setup task
Goal: enable the blog so posts render and are reachable from the top nav.
- Confirm/complete the
postscollection config in_config.yml(only if not already present — see above). - Create the
_posts/directory. - Add the first post file (see naming + front matter below).
- Ensure a blog listing page exists (either reuse AcademicPages’ built-in archive, or create
_pages/posts.mdwith the appropriate layout — check which the template expects). - Add a “Blog” entry to
_data/navigation.yml, matching existing format. - Build locally and confirm it renders before pushing:
bundle exec jekyll serveCheck: the post renders, the nav link works, the listing page shows the post, and the LaTeX equations display (see below).
Post file conventions
- Filename:
_posts/YYYY-MM-DD-short-slug.md(Jekyll requires the date prefix; the date must not be in the future at build time or the post won’t render on GitHub Pages.) - Front matter (this is what the first post already uses — keep this shape): ```yaml — title: ‘Talking to each other, or just reacting to the same thing?’ date: 2026-07-19 permalink: /posts/2026/07/mutual-information-disentangling/ tags:
- information theory
- stochastic processes
statistical physics
```
- Confirm the
permalinkpattern matches whatever_config.ymldefaults specify for the posts collection. If_config.ymlalready defines a permalink default for posts, an explicit per-postpermalinkmay be redundant or conflicting — reconcile the two.
Math rendering (important)
The posts use LaTeX equations (inline $...$ and display $$...$$). AcademicPages supports MathJax, but it may need to be enabled:
- Check whether MathJax is already loaded (look in
_includes/scripts.html,_layouts/, or a_config.ymlmathjaxflag). - If equations don’t render after the first build, this is almost certainly why — enabling MathJax is the fix, not rewriting the equations.
Images
The first post has two figures. Store post images in a stable location the template already uses for assets:
- Check where existing site images live (likely
images/at repo root, since AcademicPages uses/images/). - Reference them in the markdown with the site’s expected path, e.g.
. - Figures for the first post:
fig_switching_regimes.png— the trajectory sketch (slow vs fast switching)fig_hidden_environment.svg— the “hidden environment” schematic
- The figure is generated by a script (
make_trajectory_fig.py) — keep that script somewhere in the repo (or ascripts/folder) so figures are reproducible for future edits.
Recurring workflow (future posts)
For each new post:
- Add
_posts/YYYY-MM-DD-slug.mdwith correct front matter. - Add any figures to the images folder; reference with site-root paths.
- Build locally (
bundle exec jekyll serve), confirm rendering + math. - Commit and push.
- (Separately, by hand) post a short teaser on LinkedIn pointing to the post URL — the LinkedIn post is written per-post, not automated.
Style notes for the writing (not Claude Code’s job, but for context)
- Each post has two independent sections: a plain-language version first (no equations, understandable by non-academics — friends, family), then a technical version (1–2 undergrad-level equations) that stands on its own.
- Tone: direct, not promotional, no “excited to share” framing.
- Do not invent results, citations, or coverage. Every factual claim about a paper must be checkable against the actual paper.

