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/*.mdbefore changing layouts. - Use 2-space indentation for Liquid, HTML, and SCSS.
- CSS class names use
kebab-case; front matter keys usesnake_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 --traceand manually check the affected page in a browser when the change is visual.