CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
Personal website for Kevin McNellis built with Quarto, a scientific and technical publishing system. The site focuses on policy analysis, budget process, and congressional procedure research.
Live site: https://www.kevinmcnellis.com
Commands
# Preview site locally (watches for changes)
quarto preview
# Build site (outputs to _site/)
quarto render
# Publish to GitHub Pages (manual method)
quarto publish gh-pagesDeployment: Pushes to main trigger the GitHub Actions workflow (.github/workflows/publish.yml) which renders the site and deploys to GitHub Pages.
Architecture
Content Model
- Pages (
.qmdfiles in root): Core site pages using Quarto Markdown - Posts (
posts/*.qmd): Blog posts with YAML frontmatter for date, categories, etc. - Publications (
publications/publications.yml): Data-driven listing of research and articles
Key Configuration
_quarto.yml: Site-wide configuration including navigation, theme, and format optionsstyles/sidebar.css: Custom CSS with brand colorsincludes/: HTML partials for metadata and social sharing
Color Palette
| Color | Hex | Usage |
|---|---|---|
| Primary blue | #4355a5 |
Links, active states, hover accents |
| Dark text | #102a43 |
Headings, titles |
| Body text | #486581 |
Descriptions, secondary text |
| Muted text | #829ab1 |
Dates, metadata |
| Border | #e9ecef |
Dividers, card borders |
Layout
The site uses a docked sidebar layout (not a top navbar) with: - Profile headshot as logo - Social links (LinkedIn, GitHub, Twitter, Email) - Navigation to “Writing” section (blog posts)
Content Patterns
Adding a new blog post:
# posts/YYYY-MM-DD-title.qmd
---
title: "Post Title"
description: "Brief description for listing page"
date: YYYY-MM-DD
author: "Kevin McNellis"
image: images/figure-name.png
freeze: true
---The posts listing uses a custom EJS template (posts/listing-custom.ejs) showing title, description, and date. Images are not displayed in the listing due to legibility at thumbnail size.
Adding a publication:
# publications/publications.yml
- title: "Publication Title"
authors: ["Kevin McNellis"]
venue: "Journal/Blog Name"
year: 2025
url: "https://..."
categories: [congress, rules]
type: articleGotchas
EJS Template Indentation
Quarto processes EJS templates through its markdown pipeline. HTML with 4+ spaces of indentation becomes a code block instead of rendered HTML. Keep all HTML at the left margin in .ejs files.
<!-- WRONG - will render as <pre><code> block -->
<div class="listing-item">
<h3>Title</h3>
</div>
<!-- RIGHT - renders as HTML -->
<div class="listing-item">
<h3>Title</h3>
</div>
Freeze Cache
Pages with freeze: true cache rendered output in _freeze/ directory. If content changes don’t appear after rendering:
# Delete the freeze cache for a specific folder
rm -rf _freeze/<folder>/
# Then re-render
quarto renderContext Document
Context Document.md contains the original migration brief from WordPress with detailed specifications for the site redesign. Reference it for design intent and future feature plans (dark mode toggle, contact forms, etc.).