CLAUDE.md

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

Build & Development Commands

bundle install              # Install Ruby dependencies
bundle exec jekyll serve    # Local dev server (http://localhost:4000)
bundle exec jekyll build    # Production build (output: _site/)

Requires Ruby 3.3+ and Bundler.

Architecture

Jekyll 4.3 research portfolio + blog hosted on GitHub Pages, custom domain corpaci.com (see CNAME). There is no .github/workflows/ in this repo — no custom Actions build was found. Deployment on push to main almost certainly relies on GitHub Pages’ own built-in Jekyll build rather than a committed workflow; verify current Pages settings on GitHub before assuming otherwise. _site/ is gitignored and not part of deployment.

Site Structure

/blog.md, /connect.md, and /blog/tags.html do not exist in this repo despite earlier versions of this doc claiming they did — don’t assume they’re there.

Post Front Matter

---
layout: post
title: "Post Title"
permalink: /blog/slug-here
tags: [ai-safety, formal-methods]
description: "Short description for SEO/feeds"
---

Styling

css/main.css — warm-mathematical theme with CSS variables. Theming is driven by a data-theme attribute set by an inline script in default.html (localStorage, defaulting to prefers-color-scheme); with JS disabled the hardcoded data-theme="day" wins — there is deliberately no pure-CSS dark fallback. No Bootstrap — spacing utilities (mb-3, py-4, etc.) are defined directly in main.css.

Fonts (Google Fonts): Source Serif 4 (body serif), Inter (UI sans — navbar, footer, dates, TOC), JetBrains Mono (code).

Color palette (day): warm paper background (#f0efeb), near-black text (#222830), teal-blue accent (#1580a0), amber secondary accent (#c4841d, used for publication awards). Night uses warm dark variants; spectrum reuses the night surfaces with a pink accent (#ff5cb8) and animated rainbow-gradient headings (guarded by prefers-reduced-motion).

Key components: research thread cards (.research-thread), page headers (.page-header), home identity (.home-identity), footer ethos (.footer-ethos).

Theme layering (day / night / spectrum)

The theme toggle cycles data-theme through daynightspectrum (light / dark / color). Content visibility is additive, not exclusive: light ⊆ dark ⊆ color — switching to a deeper theme should only ever add content, never hide or replace it.

Strata (cumulative prose) — one class per stratum; cumulativity is enforced in the CSS, never combine the classes:

Swaps (exclusive variants of the same artifact): day-only / night-only / beyond-only each show in exactly one theme. Use only for per-theme identity headings (e.g. “AI hardware verification engineer” / “Wanderer by night.” / “Wonderer in the beyond.”) and per-theme renderings of the same figure (see projects/sair-embedding-geometry.md). Never for prose — swapping a title or a chart styling isn’t hiding information; swapping sentences is. (.in-day is retired; it no longer exists in the CSS.)

Avoid day-only/night-only (without a base plain-text layer) for body content — a page with only those two classes and no plain text renders a blank body in spectrum mode.

Discoverability (deliberately subtle): any page whose rendered content contains a strata/swap class makes the navbar theme toggle “breathe” (slow opacity pulse via .theme-toggle-breathe; suppressed in spectrum and under prefers-reduced-motion). Posts additionally get dim ◑ / ✺ .stratum-glyph markers next to the date and in the homepage listing when they contain in-night / in-beyond strata. Both are Liquid contains checks in the layouts — no front matter needed.

Feed: feed.xml ships the night view of each post — base prose plus in-night blocks, with spectrum-only <div class="in-beyond"> blocks stripped by a string-level Liquid filter. Consequence: in-beyond blocks in posts must not contain nested <div>s, or the filter will cut at the wrong closing tag.

Includes

SEO & Metadata