CLAUDE.md
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
What this is
Personal academic homepage for Ruining Yang, deployed via GitHub Pages at https://ryning.github.io. It is built on the Academic Pages Jekyll template (itself derived from Minimal Mistakes). Most of the repo is unmodified template code; the site-specific content is concentrated in a few files (see below). There are no tests or linters.
Commands
Use Ruby 3.3, the version GitHub Pages builds with. Install it with brew install ruby@3.3; it is keg-only, so put it on PATH first in each shell: export PATH=/opt/homebrew/opt/ruby@3.3/bin:$PATH. The macOS system Ruby 2.6 can’t install github-pages. Ruby 4.0 (Homebrew’s default ruby) makes bundler fall back to an old github-pages (223, with Liquid 4.0.3), which then fails at startup. Gems install into the gitignored vendor/bundle (one-time setup: bundle config set --local path vendor/bundle).
bundle install # install Ruby deps (delete Gemfile.lock and retry on errors)
bundle exec jekyll serve -l -H localhost # serve at localhost:4000 with livereload
bundle exec jekyll serve -l -H localhost --unpublished # also render `published: false` publications
docker compose up # alternative: run in Docker (uses _config_docker.yml override)
npm run build:js # only needed if editing assets/js/*; regenerates assets/js/main.min.js
lsof -ti:4000 -sTCP:LISTEN | xargs kill # stop a backgrounded server
Changes to _config.yml require restarting jekyll serve. Deployment is automatic: GitHub Pages builds from master on push.
Architecture: where the real site lives
The site has three hand-written pages in _pages/. The top nav (_data/navigation.yml) has Home (/), Experience and Publications; Education is deliberately not in the nav. _includes/masthead.html never highlights a nav item that links to /, so on the home page the site title “Ruining Yang” is highlighted instead of Home. On phones (<600px, rules at the end of the masthead section in _sass/layout/_masthead.scss):
- The Home item is hidden.
- The site title reads “Ruining Yang (Home)” on every page except the home page.
- Nav text is 15px with tighter gaps, so Experience and Publications both fit down to 360px wide.
- The greedy-nav hamburger button starts with
class="hidden". Otherwise the script reserves room for the button on load and folds Publications into the menu. about.md(permalink/, the home page): About, Education, Experience, then Selected Publications — in that order, mirroring the sibling site. Education is written inline here and has no page of its own. Selected Publications is a loop over publications that are notselected: false, ordered bysort_order; the “See All Publications >” link in its heading goes to/publications/.experience.md(/experience/): the same timeline as the home page’s Experience section, plus each internship’s supervisors and work. Both render_includes/experience.html, so edit entries there, not in the pages. The page passesdetails=trueto show thetimeline-desclines. The home page leaves them out and instead shows a “More Details >” link to/experience/in the heading, styled like “See All Publications >”. The About text does not mention internships, which live only here. Below the timeline,experience.mditself holds an Academic Service section that appears only on this page, with “As an Organizer” and “As a Reviewer” lists, newest first.publications.md(/publications/): every publication, ordered byall_order.
The two publication pages render each paper with _includes/paper-box.html. All three pages include _includes/page-styles.html, the shared <style> block (layout width/padding, paper cards, timeline). Page style tweaks go in that include, not in _sass/.
Sidebar profile info (name, avatar, email, Scholar, GitHub) comes from the author: block in _config.yml. Research Interests also live in the sidebar: the list is author.interests in _config.yml, rendered by _includes/author-profile.html and styled at the end of _sass/layout/_sidebar.scss.
Publications (_publications/*.md)
Each file is front matter only; the body is unused, and the filename prefix is just a per-year sequence number. Fields consumed by paper-box.html and the two page loops:
title,venue(rendered as a non-link badge),citation(inline HTML: co-authors wrapped in grey<span style='color:#7a8288;'>, the site owner as<b>Ruining Yang</b>,<sup>*</sup>for equal contribution,<sup>†</sup>for corresponding author — take these marks from the paper’s first page (arXiv or CVF Open Access); the legend sits at the end of each Publications heading line)sort_order— integer controlling the home page order (ascending)all_order— integer controlling the/publications/order (ascending). The two orders are curated separately: the home page puts Post-Training first, the full list puts SpanVLA first.date— when the paper was published: the conference’s start date for accepted papers, arXiv v1 date for preprints. Not used for ordering. Future dates are fine (future: true).selected: false— leave the paper off the home page; it still appears on/publications/teaser— filename inimages/(falls back toimages/paper-placeholder.svg). Usually the paper’s Figure 1, cropped from the PDF.paperurl,projecturl— optional linkscoderepo(owner/repo, drives the GitHub stars badge) together withcodeurlaward— optional, rendered in bold red above the description (e.g.🏆 Best Paper Award)highlight— optional one-liner rendered in orange (e.g. nuReasoning’s dataset-series note)description— optional short blurbpublished: falsehides an entry from both pages without deleting it
When adding a publication, set date, pick both a sort_order and an all_order, and renumber others as needed so each sequence stays contiguous. Entries with selected: false keep their sort_order slot, so that numbering covers all files together. /publications/ lists everything on Google Scholar except four papers that are deliberately left out: DTbot, Sina Weibo rumor detection, “From Static to Dynamic: a Survey of Topology-Aware Perception in Autonomous Driving”, and “Unsupervised Search for Ethnic Minorities’ Medical Segmentation Training Set”.
Other customizations
- Education/Experience entries use
<ul class="timeline with-logos">with a 44px square, framed logo fromimages/logos/, aligned to the top of the entry. - Organization names in the About text are plain text (no link) with a small logo in front (
img.inline-logo, the style used on cancui19.github.io). The logo and the first word are wrapped in<span class="nowrap">so the logo never ends a line by itself. - This site is kept visually in sync with the sibling repo
Bobchenyx/Bobchenyx.github.io(same paper-box, venue badge, timeline-with-logos and author-mark conventions); shared papers and logos can be copied from there. It is not necessarily cloned locally — clone it next to this repo (../Bobchenyx.github.io) if needed. Unlike that repo, this one hardcodes light-theme colors instead of CSS variables. - Dark mode is disabled: the toggle was removed from
_includes/masthead.htmland_includes/head/custom.htmlforces the light theme. - Site search is off (
search: false). - Mobile layout follows the sibling site’s “Fix mobile layout of homepage” commit:
- The extra
#mainleft padding inpage-styles.htmlapplies only at ≥64em; phones keep the theme’s narrow gutter. - Paper cards stack below 600px, with the teaser at full width.
- The footer is
position: absoluteat the end of the page, not fixed to the viewport (_sass/layout/_footer.scss). .author__nameusesword-break: keep-allso “(杨蕊宁)” never splits.
- The extra
- To check phone widths, don’t use headless Chrome’s
--window-size: the viewport never goes below 500px. Use DevTools device emulation instead (Emulation.setDeviceMetricsOverridewithmobile: true, e.g. 390px). For the masthead, use viewport-only screenshots: a full-page capture (captureBeyondViewport) resizes the viewport, re-runs greedy-nav, and can show items folded into the menu that real phones show. - Template leftovers that this site does not use:
talkmap*,scripts/(CV JSON generation),_data/cv.json, and.github/workflows/(talk scraping and PR cleanup). Leave them alone unless asked.
Conventions
Commit messages use a type: summary prefix — content: (text/bio changes), style: (CSS), feat: (new elements such as teaser images), chore: (reordering, hiding entries, housekeeping).
