CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
Personal academic website for Andrew M. Camp (andrewmcamp.com), built with Quarto and deployed on Netlify. Fully static — no databases, no build-time JS frameworks.
Commands
Architecture
Site Framework
- Quarto static site generator with
.qmd(Quarto Markdown) content files - Dual theme: Flatly (light) / Darkly (dark) via
_quarto.yml, with a dark-mode flash prevention script in the HTML header - Design tokens in
_brand.yml— colors, typography (Source Serif 4 headings, Inter body, JetBrains Mono code) - Single SCSS file at
_assets/theme/theme.scss(~1,166 lines) handles all custom styling; it compiles twice (once per theme) and uses$_is-dark: lightness($body-bg) < 50%to branch light/dark values at compile time
Pages
| Page | File | Notes |
|---|---|---|
| Landing | index.qmd |
Hero section + spotlight carousel (auto-rotates, inline JS) |
| About | about.qmd |
Timeline layout, JSON-LD structured data |
| Research | writing.qmd |
Publication listing with filter bar |
| Contact | contact.qmd |
Card grid, email copy-to-clipboard |
| CV | cv.qmd |
PDF download link, structured sections |
Publication System
- Each publication is a
.qmdfile inwritings/with YAML frontmatter:title,date,author,categories,tags,abstract, and optional resource links (pdf,link,slides,appendix,brief,code) categoriescontrol type grouping:peer-reviewed,working-paper,reports,featuredtagsare research topics used for filtering (e.g.,teacher-labor-market,four-day-school-week)- Publications render through the EJS template
_assets/html/pubs.ejs - Featured items use
spotlightfield pointing to a detail page inwritings/spotlight/
Filter System (_assets/js/filters.js)
- Vanilla JS, no dependencies
- Three filter dimensions: Year (single-select), Type (multi-select), Topic (multi-select)
- Filter states sync between desktop sidebar and mobile inline bar (breakpoint: 992px)
Spotlight Carousel (_assets/html/spotlight.ejs + index.qmd)
- Auto-rotates every 6 seconds, pauses on hover
- Dot navigation for manual control
Key Conventions
- CSS class prefixes:
.landing-*,.spotlight-*,.filter-*,.pub-*,.cv-*,.card-nav - File naming: kebab-case for
.qmdfiles matching the publication title - Author formatting: comma-separated in frontmatter; Andrew M. Camp is bolded in rendered output by the EJS template
- Quarto version: pinned at 1.6.43 in
netlify.toml - Extension:
_extensions/schochastics/academiconsprovides academic social icons