CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Repository purpose
Personal academic homepage for Shihao Weng, hosted at wengshihao.github.io. Built on the AcadHomepage Jekyll template (which itself derives from minimal-mistakes / academicpages). Almost all day-to-day edits are content updates in _pages/includes/*.md; the Jekyll layout/SCSS scaffolding rarely needs to change.
Local development
bash run_server.sh # = `bundle exec jekyll liveserve` — serves on http://127.0.0.1:4000 with livereload
bundle install # one-time: install Ruby gems pinned via github-pages
Requires the GitHub Pages Ruby toolchain (Ruby + RubyGems + GCC + Make). The site is published by GitHub Pages directly from main — there is no separate build step.
run_server.sh literally contains bundle exec jekyll liveservesource (no space, no newline). It works because the shell parses liveserve as the command and source as a positional arg Jekyll ignores. Don’t “fix” the typo unless you’ve verified the new form still launches with livereload.
Content architecture
The single rendered page is _pages/about.md, which uses Jekyll’s include_relative to stitch together five content fragments — edits to the homepage almost always land in one of these:
_pages/about.md
└── _pages/includes/
├── intro.md # bio, advisor, contact
├── news.md # 🔥 News timeline
├── pub.md # 📝 Publications
├── honers.md # 🏆 Honors & Awards
└── others.md # extra sections
_config.yml declares permalink: /:categories/:title/ and a default layout of default with author_profile: true, so every page gets the sidebar from _includes/author-profile.html. Author identity (name, avatar, social links) lives in _config.yml under author: — change it there, not in the layouts.
Custom inline classes used in publication entries (defined in assets/css/main.scss):
.papercolor— venue tag color (currently blue), wraps things like[ICSE'26]..author-me— highlights the site owner’s name in author lists (purple#6a4c93).- Publication links use
shields.io“for-the-badge” badges; follow the existing color/logo conventions inpub.mdwhen adding entries (arxiv =b31b1b, github code =f5f5f5, ACM =0085CA, Springer/Google Scholar =005F86).
Each publication entry in pub.md ends with two <br> tags for spacing — preserve that pattern.
Google Scholar citation pipeline
Citations shown on the page are pulled from a sibling branch, not from main:
.github/workflows/google_scholar_crawler.yamlruns daily at 08:00 UTC (and onpage_build).- It executes
google_scholar_crawler/main.py, which usesscholarlyto fetch the author profile keyed by theGOOGLE_SCHOLAR_IDrepo secret. - Results (
gs_data.json,gs_data_shieldsio.json) are force-pushed to thegoogle-scholar-statsbranch. _includes/fetch_google_scholar_stats.htmlreads that JSON at page load; per-paper counts are rendered via<span class='show_paper_citations' data='SCHOLAR_PAPER_ID'></span>(see README “Quick Start” step 5 for how to find the ID).google_scholar_stats_use_cdn: truein_config.ymlmakes the client fetch via CDN.
Editing main.py or the workflow only takes effect after the next scheduled run (or a manual workflow dispatch).
Things to leave alone
_sass/,_layouts/default.html,_includes/*.html— upstream template scaffolding. Override viaassets/css/main.scssrather than editing_sasspartials.Gemfile.lock— pinned bygithub-pages; letbundle updatemanage it.docs/andgoogle_scholar_crawler/are excluded from the Jekyll build (exclude:in_config.yml), so changes there don’t affect the rendered site.