CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
Academic personal website for Juan F. Tellez built with Quarto. The site is hosted on Netlify at https://juanftellez.com/.
Build Commands
quarto render # Build the site (outputs to _site/)
quarto preview # Local development server with live reload
quarto publish netlify # Deploy to NetlifyDirectory Structure
blog/— Blog posts (policy briefs, technical posts, yearly content roundups, R package showcase)blog/books/— Individual book reviewscourses/grad/andcourses/undergrad/— Course pages used by the teaching listingfiles/— Downloadable files (CV, etc.)html/— Custom SCSS stylingimages/— Site images_extensions/— Quarto extensions (Font Awesome)_freeze/— Cached R execution output (committed to repo)_site/— Generated static HTML (not committed)
Architecture
Data-Driven Content
- Research page (
research.qmd) pulls publication data from Google Sheets via thegooglesheets4R package - Publications are maintained in a spreadsheet, not hardcoded in the QMD file
Frozen Execution
execute: freeze: truein_quarto.ymlcaches R code output- Change
#| cache.extra:value in R chunks to force re-execution
Blog
blog.qmdis the listing page; individual posts live inblog/*.qmd- Posts include policy briefs, technical tutorials, yearly content roundups, and book reviews
- Book reviews live in
blog/books/*.qmd— each is a standalone post with categories metadata
Course Listings
- Teaching page uses Quarto listings to auto-generate course cards from
courses/grad/*.qmdandcourses/undergrad/*.qmd - Each course QMD uses consistent YAML metadata for the listing system
Styling
- Custom theme in
html/custom.scss(Bootstrap 5 based) - Components scoped by class:
.blog,.research,.teaching,.course-entry
Extensions
- Font Awesome icons via
_extensions/quarto-ext/fontawesome/ - Use shortcodes like
Blog Post Conventions
- Setup chunk uses
theme_nice()helper,MoMAColors::moma.colors("VanGogh")palette, andkableExtrafor tables - Code-heavy posts use
echo: true; data-driven posts useecho: falsewithcode-fold: truefor optional visibility - Posts that run R code rely on
_freeze/caching; changecache.extrato force re-execution - Use
#|style chunk options (not{r, option = value}style) - Draft posts use
draft: truein YAML front matter — they render but don’t appear in listings
Book Reviews
- Live in
blog/books/*.qmd - Minimal YAML:
title,date,author,categories(always includesbooksplus topic tags) - No setup chunk needed — plain prose, no R code
- Dates should match the
date_readcolumn inpersonal_files/goodreads_clean.rds
R Dependencies
googlesheets4— Pulls publication data from Google Sheets forresearch.qmdjuanr— Juan’s teaching datasets package (used inblog/juanr.qmd); install viaremotes::install_github("hail2thief/juanr")MoMAColors— Color palettes used across blog posts- A bibliography file is referenced from an external path (
master.bib); it is not in this repo
Key Files
_quarto.yml- Main Quarto configuration_publish.yml- Netlify deployment settingshtml/custom.scss- All custom stylingchicago-fullnote-bibliography.csl- Citation format
Build Artifacts
_site/— Generated static HTML (gitignored).quarto/— Quarto metadata (gitignored)_freeze/— Execution cache (committed to repo so builds don’t require re-running R)