CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
What this repository is
A personal academic homepage for Xiangtai Li built on Jekyll, forked from RayeRen/acad-homepage.github.io. Deployed via GitHub Pages from the main branch at lxtGH.github.io. Day-to-day edits are content updates (publications, news, intro), not framework changes.
Local development
Requires Ruby + Bundler (Jekyll’s GitHub Pages stack).
bundle install # one-time, installs github-pages gem
bash run_server.sh # = bundle exec jekyll serve
Server runs on port 4001 (set in _config.yml, not the Jekyll default 4000 — the README is wrong about this). Livereload picks up edits to _pages/**, _includes/**, _sass/**, and assets/** automatically. _config.yml changes require a server restart.
Where content lives
The site is rendered from a single page (_pages/about.md) that include_relatives four content fragments — these are the files you almost always edit:
_pages/includes/intro.md— bio, role, research interests, contact / hiring blurbs._pages/includes/news.md— recent news (currently empty)._pages/includes/pubs.md— publication list. Hand-authored<li>entries with<strong>for the author’s name, a colored<span>venue/highlight tag, and trailing<a>links for code/project pages. Match this structure when adding new entries._pages/includes/others.md— honors, awards, and other tail sections.
Project landing pages live under project/<name>/index.html (e.g. project/sa2va/, project/omg_seg/) and are linked to from pubs.md.
Site-wide layout lives in _layouts/default.html + _includes/ (masthead, sidebar, author profile, SEO, analytics). Styling is SCSS under _sass/. Touching these is rare — prefer content edits unless the user explicitly asks for a layout/style change.
Google Scholar citation pipeline
Per-paper citation counts are injected client-side, not at build time:
.github/workflows/google_scholar_crawler.yamlrunsgoogle_scholar_crawler/main.pydaily (08:00 UTC) and onpage_build. It uses theGOOGLE_SCHOLAR_IDrepo secret and force-pushesgs_data.json+gs_data_shieldsio.jsonto a separategoogle-scholar-statsbranch._includes/fetch_google_scholar_stats.htmlfetches that JSON via jsDelivr CDN (site.google_scholar_stats_use_cdn: truein_config.yml) and fills any element with classshow_paper_citations, using itsdataattribute as the Google Scholar paper ID (citation_for_view=...).
To show a paper’s citation count anywhere in markdown:
<span class='show_paper_citations' data='SCHOLAR_PAPER_ID'></span>
The crawler script and google_scholar_crawler/ are excluded from the Jekyll build (see exclude: in _config.yml).
github_myprofile_updater/
Standalone script (update.py) that stitches the same _pages/includes/*.md fragments into a GitHub profile README. Note it reads homepage.md and pub_short.md which do not currently exist in _pages/includes/ — running it as-is will fail. Treat this as orphaned tooling unless asked to revive it.
Conventions when editing pubs.md
<strong>Xiangtai Li</strong>is always bolded in author lists; co-first authors get a trailing*, with\* means equal contribution.noted at the top of the file.- Venue tags follow the form
<strong>[VENUE-YEAR]<span style="color:red"> one-line highlight </span> </strong>. - Trailing links are plain
<a href="...">Code</a>/Project Page/Model and Data, separated by spaces (not pipes inside the<li>). - New “Recent Works” go to the top of that section; older ones drop into “Several Other Previous works”.