AGENTS.md

AGENTS.md

Context for working in this repo: Carl’s personal blog + portfolio site.

What this is

A Jekyll static site (based on the old “Jekyll Now” template) hosted on GitHub Pages, served at the custom domain ivanthetricourne.io (set by the root CNAME file), with ivanthetricourne.github.io redirecting to it. Deploys automatically via the pages-build-deployment GitHub Action on push to main.

ivanthetricourne.io used to be a separate IPFS deployment on Fleek, wired up through the Fleek GitHub App rather than any config in this repo. That site was lost when Fleek dropped its free tier — its last build was cancelled on 2025-08-21, after which the domain served bunny.net’s “Domain suspended or not configured” page until the DNS was repointed at GitHub Pages. There is no longer an IPFS mirror; don’t reintroduce references to one.

Structure

  • _posts/ — blog posts, one file per post, named YYYY-MM-DD-title.md
  • _layouts/default.html (site chrome/nav), page.html, post.html
  • _includes/ — partials (analytics, disqus, meta, footer icons)
  • _sass/, style.scss — styling
  • about.md, projects.md, learn.md, index.html — top-level static pages
  • images/ — post and page images
  • _config.yml — Jekyll config (site name/description, nav footer links, gems)
  • _data/resume.yml — resume content, source of truth (see Editing content below)
  • resume.html, resume.css, fonts/ — live /resume/ page rendered from _data/resume.yml, styled with a self-hosted Spectral webfont. resume.css doubles as the print stylesheet (@page sizing, letter margins) so the page’s “Download PDF” button (window.print()) produces a clean PDF without any separate build step or committed binary.

Several standalone mini projects/demos live in their own top-level directories and are linked from the site rather than built through Jekyll: Name-Tag-Generator, set-count-app, fp, random-gifs, project-arwing. Treat each as its own self-contained app — don’t assume shared tooling with the Jekyll site.

Build & run

make install   # bundle install
make serve     # bundle exec jekyll serve, local preview

Dependencies are pinned via Gemfile/Gemfile.lock (locked for both x86_64-darwin and x86_64-linux, the latter for Netlify’s build image). Netlify’s dashboard build command is bundle exec jekyll build — it failed on every deploy preview before the Gemfile existed (no Bundler setup to resolve against), so don’t remove the Gemfile without checking Netlify still builds.

Known local-only issues on macOS 13 (Ventura) and earlier — not a problem on Netlify’s Linux build image or GitHub Pages, just this machine’s toolchain:

  • jekyll build can fail during SCSS conversion because newer sass-embedded native binaries require macOS 14+. Fixed by pinning gem "sass-embedded", "1.77.8" in the Gemfile (see the pin’s comment).
  • jekyll serve/build can also crash in Jekyll::Cleaner with an Encoding::UndefinedConversionError on the accented filenames under project-arwing/rsrc/ (e.g. Poké Floats.png) if the shell locale is C/unset. Run with LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 set, e.g. env LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 bundle exec jekyll serve.

Git workflow

main has branch protection requiring PRs — direct pushes are only possible via an explicit bypass. Default to feature branches + PRs unless told otherwise.

Editing content

  • New posts: add a markdown file to _posts/ following the existing front matter style (see recent posts for the pattern).
  • Resume: edit _data/resume.yml/resume/ picks it up automatically. Don’t hand-edit resume.html, it’s a Jekyll template driven by the same YAML, not standalone content. The page’s “Download PDF” button uses window.print(), so there’s no separate PDF build step to run. Draft/ unfinished bullets are kept as commented-out YAML under the relevant entry rather than left as placeholder text in highlights.