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 Julie Zhiyu Fu, built with Quarto and deployed to GitHub Pages.

Live site: https://fuzhiyu.me

Name Presentation

Full name: Julie Zhiyu Fu Public display: J. Zhiyu Fu

The site deliberately uses “J. Zhiyu Fu” instead of “Julie Zhiyu Fu” to avoid outing the author to Chinese users. This is an intentional privacy/safety design decision. Maintain this convention throughout the site.

Development Commands

Local Development

quarto preview          # Start development server with live reload
quarto render           # Build the site to _site/

CV Management

CV files are in _cv/:

cd _cv
latexmk -pdf cv.tex     # Build English CV -> assets/pdf/cv.pdf
latexmk -pdf cv_cn.tex  # Build Chinese CV -> assets/pdf/cv_cn.pdf

The paper list (paper_list.tex) is maintained separately and included in CV builds.

Architecture

Content Structure

Pages (pages/*.qmd): - Each .qmd file defines a top-level page (research, code, teaching, etc.) - Pages use YAML data files and custom EJS templates for rendering - Example: pages/research.qmd uses pages/papers.yml + _layouts/bib.ejs

Data Files (pages/*.yml): - papers.yml: Publications and working papers with metadata - repos.yml: GitHub repositories - discussion.yml: Discussion topics - public_goods.yml: Public goods content - teaching.yml: Teaching materials

These YAML files are the single source of truth for content. Update these files to add/modify publications, repos, etc.

Templates (_layouts/*.ejs): - Custom EJS templates for rendering YAML data - bib.ejs: Academic publication cards with abstracts - repo.ejs: GitHub repository cards - discussion.ejs: Discussion topics - public_goods.ejs: Public goods items

News (news/): - Individual .qmd files for news items - Automatically listed on homepage by date

Blogs (blogs/): - Long-form content (e.g., blogs/slide_design_guide/) - Each blog can contain multiple assets (PDFs, images, etc.)

Site Configuration

_quarto.yml: - Navigation structure - Theme configuration (light/dark modes) - Resources (PDFs, images) to copy to output - Google Analytics, favicon, open graph metadata

Deployment

Automatic via GitHub Actions (.github/workflows/publish.yml): - Triggers on push to main branch - Renders site with Quarto - Publishes to gh-pages branch

Common Workflows

Adding a New Publication

  1. Edit pages/papers.yml
  2. Add entry under appropriate category (Publications / Working Papers)
  3. Required fields: title, author, abstract, year
  4. Optional: pdf, ssrn, slides, journal, presentation, award, preview
  5. If PDF is local, add it to assets/pdf/ and update _quarto.yml resources

Adding a News Item

  1. Create news/YYYY-MM-DD-title.qmd
  2. Include frontmatter with date and description
  3. Will auto-appear on homepage

Updating CV

  1. Edit _cv/cv.tex (English) or _cv/cv_cn.tex (Chinese)
  2. Run latexmk -pdf in _cv/ directory
  3. Output PDFs are referenced in site navigation

Adding a GitHub Repo

  1. Edit pages/repos.yml
  2. Add repo metadata
  3. Rendered using _layouts/repo.ejs template

File Organization

├── _quarto.yml           # Main site configuration
├── index.qmd             # Homepage
├── pages/                # Top-level pages
│   ├── *.qmd             # Page definitions
│   └── *.yml             # Content data files
├── _layouts/             # EJS templates for rendering
├── _cv/                  # LaTeX CV source files
├── news/                 # News items (auto-listed on homepage)
├── blogs/                # Long-form blog posts
├── assets/               # Static assets (PDFs, images, slides)
├── _sass/                # Custom SCSS stylesheets
└── _site/                # Generated output (git-ignored)

Styling

  • Light/dark theme toggle via toggle-dark.js
  • Custom styles in styles.scss (light) and styles-dark.scss (dark)
  • Uses Quarto’s “united” base theme

Important Notes

  • Do not edit _site/ - it’s generated and git-ignored
  • PDFs referenced in YAML files must be added to _quarto.yml resources
  • Site auto-deploys on push to main - test locally first with quarto preview
  • When adding images, use paths relative to site root (e.g., assets/img/...)