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, namedYYYY-MM-DD-title.md_layouts/—default.html(site chrome/nav),page.html,post.html_includes/— partials (analytics, disqus, meta, footer icons)_sass/,style.scss— stylingabout.md,projects.md,learn.md,index.html— top-level static pagesimages/— 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.cssdoubles as the print stylesheet (@pagesizing, 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 buildcan fail during SCSS conversion because newersass-embeddednative binaries require macOS 14+. Fixed by pinninggem "sass-embedded", "1.77.8"in theGemfile(see the pin’s comment).jekyll serve/buildcan also crash inJekyll::Cleanerwith anEncoding::UndefinedConversionErroron the accented filenames underproject-arwing/rsrc/(e.g.Poké Floats.png) if the shell locale isC/unset. Run withLANG=en_US.UTF-8 LC_ALL=en_US.UTF-8set, 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-editresume.html, it’s a Jekyll template driven by the same YAML, not standalone content. The page’s “Download PDF” button useswindow.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 inhighlights.
