AGENTS.md

This file provides guidance to Codex (Codex.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 final command: bundle exec jekyll serve --livereload
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.

Git workflow

Unless the user explicitly says not to commit, every code or content change should be committed and pushed after the edit is complete.

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.