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 Wenqi Jia, deployed via GitHub Pages at BitCalSaul.github.io. Forked from RayeRen/acad-homepage.github.io — a Jekyll-based academic site template.

Local development

bash run_server.sh        # starts livereload server on http://127.0.0.1:4000
# equivalent: bundle exec jekyll liveserve
bundle install            # install Ruby gem dependencies (first run)

Jekyll is constrained to the github-pages gem set so local builds match GitHub Pages’ production build.

Architecture

This is a single-page Jekyll site, not a multi-post blog. Almost all user-visible content lives in _pages/about.md — that is the homepage. Editing site content typically means editing this one file (HTML+Markdown is permitted).

Layered structure:

  • _config.yml — site metadata, author profile (socials, email, scholar link), include/exclude lists, plugins. Not auto-reloaded by Jekyll; restart the server after editing.
  • _layouts/default.html — the only layout; wraps every page.
  • _includes/ — partials composed by the layout: author-profile.html (sidebar card), masthead.html (top nav), seo.html, analytics.html, head.html, scripts.html. fetch_google_scholar_stats.html is the client-side JS that pulls the citation JSON (see below).
  • _sass/ + assets/css/ — SCSS source compiled by Jekyll; _variables.scss holds theme colors/sizes.
  • assets/js/ — vendored JS for the layout.
  • _data/navigation.yml — top-nav links.
  • images/ — profile photo, favicons, paper teaser images referenced from about.md.

Google Scholar citation pipeline

Citations shown on the page are NOT generated at Jekyll build time. The flow:

  1. .github/workflows/google_scholar_crawler.yaml runs daily (cron 0 8 * * *) and on page_build.
  2. It executes google_scholar_crawler/main.py (uses scholarly), which queries Google Scholar with the GOOGLE_SCHOLAR_ID repo secret and writes gs_data.json + gs_data_shieldsio.json to google_scholar_crawler/results/.
  3. The workflow force-pushes those JSON files to a separate branch google-scholar-stats of this same repo.
  4. At runtime, _includes/fetch_google_scholar_stats.html fetches that JSON from the google-scholar-stats branch (via raw GitHub or jsDelivr CDN, controlled by google_scholar_stats_use_cdn in _config.yml) and injects per-paper citation counts into any <span class='show_paper_citations' data='SCHOLAR_ID:PAPER_ID'> elements in about.md, plus the total-citations badge.

Implication: changes that affect citation display may need to be tested against the live google-scholar-stats branch data, not local files. The google_scholar_crawler/ directory is excluded from the Jekyll build.

Editing conventions specific to this template

  • New publications/news are added by editing _pages/about.md directly — there is no _posts/ collection in use.
  • To show a paper’s live citation count, embed <span class='show_paper_citations' data='3bXf6H0AAAAJ:PAPER_ID'></span> (the prefix is the author’s scholar ID from _config.yml).
  • Permalinks are configured as /:categories/:title/ but the site is effectively a single page, so this rarely matters.
  • timezone is Asia/Shanghai despite the author location being DFW — leave as-is unless the user asks.