CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Common commands

bundle install                         # install Ruby/Jekyll dependencies
bash run_server.sh                     # local live-reload server; runs bundle exec jekyll liveserve
bundle exec jekyll build               # production build into _site/
bundle exec jekyll build --trace       # build with full error trace
bundle exec jekyll doctor              # Jekyll configuration/dependency health check

There is no configured unit test suite, lint script, or single-test command in this repository. Use bundle exec jekyll build --trace and browser verification as the main validation path.

CV workflow

Eohan_CV.yaml is the RenderCV source. Regenerate all RenderCV outputs with:

rendercv render Eohan_CV.yaml

RenderCV writes to rendercv_output/, but the site navigation links to /assets/pdf/Eohan_CV.pdf via _data/navigation.yml. After every CV regeneration, copy the final PDF into the public assets path:

cp rendercv_output/YUHAN_GUO_CV.pdf assets/pdf/Eohan_CV.pdf
bundle exec jekyll build

Do not manually edit files under rendercv_output/; regenerate them from Eohan_CV.yaml.

Content and automation commands

python3 updateBlogs.py                                 # refresh _pages/includes/blogs.md from _posts metadata
python3 -m pip install -r google_scholar_crawler/requirements.txt
GOOGLE_SCHOLAR_ID=<id> python3 google_scholar_crawler/main.py

updateBlogs.py imports frontmatter; install python-frontmatter if it is missing locally.

Architecture overview

This is a Jekyll/GitHub Pages academic homepage. _config.yml holds global site metadata, author profile fields, SEO settings, plugin configuration, and third-party client integrations. Changes to _config.yml require restarting the local server.

The homepage is _pages/about.md with permalink: /. It composes the visible sections by include_relative from _pages/includes/: intro, news, publications, honors, blogs, and internships. Blog posts live in _posts/ and use the YYYY-MM-DD-title.md naming convention; site permalinks render them under /blogs/:title/.

Layouts and reusable page chrome are split between _layouts/ and _includes/. Styling is compiled from assets/css/main.scss, which imports Sass partials from _sass/; project-specific shared assets live under assets/project_asset/.

Data-driven navigation and project lists are in _data/. _data/navigation.yml drives the top navigation, including the CV link. _data/projects.yml registers internal and external projects; entries tagged research are used by research/project pages for the “More Research” menu.

Self-contained project pages live in projects/. Internal projects such as projects/Web-CogReasoner/ are regular HTML pages using Liquid where needed; projects/index.html is the project directory page.

Generated output lives in _site/ and should be treated as build output. _site/ and rendercv_output/ are ignored by .gitignore; edit source files, then rebuild.

Editing conventions from existing agent guidance

  • Prefer content sources over template hardcoding: update _pages/includes/*.md, _data/*.yml, or _posts/*.md before changing layouts.
  • Use 2-space indentation for Liquid, HTML, and SCSS.
  • CSS class names use kebab-case; front matter keys use snake_case.
  • Keep Markdown mostly Markdown; use inline HTML only where the existing layout pattern requires it.
  • Before reporting a site change as ready, run bundle exec jekyll build --trace and manually check the affected page in a browser when the change is visual.