CLAUDE.md

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

Project Overview

Personal site for Joel G Goodman (joelgoodman.co) — a blog/portfolio built with Eleventy v3, hosted on Bunny CDN (Object Storage), with build-time image optimization via @11ty/eleventy-img.

Content is "letters" (newsletter posts) in letters/ as Markdown. Static pages are root-level .njk files. timeline.html is a standalone data visualization page with its own inline styles/scripts.

Commands

Individual watchers: npm run watch:sass, npm run watch:js, npm run watch:eleventy

Architecture

Build Pipeline

  1. SCSS (_includes/assets/scss/) → compiled to _includes/assets/css/jgg.css
  2. PostCSS adds autoprefixer + cssnano minification
  3. Rollup bundles _includes/assets/js/jgg.js_site/assets/js/jgg.bundle.js (IIFE format)
  4. Eleventy builds templates → _site/
  5. Production transforms in eleventy.config.js:
  6. Deploy uploads _site/ to Bunny Object Storage via scripts/upload-to-bunny.js

In development, CSS loads as an external stylesheet; in production, all CSS and JS are inlined for zero render-blocking requests.

Eleventy Configuration

Images

Templates & Layouts

Styling

SCSS uses @use module syntax. Design tokens are CSS custom properties defined in _includes/assets/scss/_config.scss:

Spacing (8px grid-aligned): --space-xs (8px) through --space-3xl (80px), plus fluid --space-section-h and --space-section-v using clamp(). Legacy --gutter-sm/md/lg aliases remain.

Typography: Fluid sizing via clamp() on body and all headings — no breakpoint steps. Fonts: Gantari (body, variable weight), Instrument (headings, serif). Both self-hosted in _includes/assets/fonts/.

Colors: Light default with dark mode via prefers-color-scheme: dark. Dark mode uses charcoal-blue palette (#1c1e26 bg, #f0ead8 text, #c8c0b0 body text).

Transitions: --t-fast (0.2s), --t-base (0.3s), --t-slow (0.6s), plus --t-timing (275ms) and --t-effect (cubic-bezier).

Media queries: Mobile-first via @include mq(sm/md/lg/xl/huge) mixin in _helpers.scss.

Timeline page has its own design system (dark-only, amber accent, uses Bunny.net font mirror for Instrument Serif and JetBrains Mono, self-hosted Gantari).

Data

Hosting & CDN

Content

Node Version

Node 22 (pinned in .nvmrc)