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.pdfThe 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
- Edit
pages/papers.yml - Add entry under appropriate category (Publications / Working Papers)
- Required fields:
title,author,abstract,year - Optional:
pdf,ssrn,slides,journal,presentation,award,preview - If PDF is local, add it to
assets/pdf/and update_quarto.ymlresources
Adding a News Item
- Create
news/YYYY-MM-DD-title.qmd - Include frontmatter with
dateanddescription - Will auto-appear on homepage
Updating CV
- Edit
_cv/cv.tex(English) or_cv/cv_cn.tex(Chinese) - Run
latexmk -pdfin_cv/directory - Output PDFs are referenced in site navigation
Adding a GitHub Repo
- Edit
pages/repos.yml - Add repo metadata
- Rendered using
_layouts/repo.ejstemplate
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) andstyles-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.ymlresources - 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/...)