Personal website built with Jekyll, based on AcademicPages / Minimal Mistakes.
This Mac uses Ruby 3.3 and Node.js 24. On a fresh Mac with Homebrew:
brew install ruby@3.3 node@24
export PATH="/opt/homebrew/opt/ruby@3.3/bin:/opt/homebrew/opt/node@24/bin:$PATH"
bundle config set --local path vendor/bundle
bundle install
npm ci
npm run build:js
./bin/previewRun these commands from the repository. Open http://127.0.0.1:4000.
The server binds only to the local machine. Saved content and Sass changes
rebuild automatically; restart after editing _config.yml or _config.dev.yml.
Press Control+C to stop. For later sessions, run ./bin/preview.
If editing JavaScript, run npm run build:js, or npm run watch:js in a second
terminal with Node on PATH. The generated assets/js/main.min.js is tracked,
so ordinary content previews do not require Node.
_pages/about.md: homepage bio, section headings, and CV link label._data/publications.json: all 16 publication records; selected entries appear on the homepage._data/talks.json: talk titles, recording URLs, and appearances on the homepage._includes/publication-list.htmland_includes/talks-list.html: shared list templates. Edit data to update entries, rather than copying HTML between pages._layouts/profile.htmland_sass/_profile.scss: homepage layout and styles. The Sass variables at the top control column width, gutters, and breakpoints; the CSS variables in.profile-sitecontrol the color palette._layouts/single.html: sitemap and error pages, with the original sidebar._pages/sitemap.mdand_pages/404.md: visitor sitemap and not-found page._pages/cv.md,_pages/publications.md, and_pages/talks.html: redirect stubs preserving old URLs. They contain no duplicate page content._config.yml: shared profile, metadata, build configuration, and production URL._config.dev.yml: local preview overrides._sass/site.scss: stylesheet entry point. Shared theme styles remain because the standalone pages and homepage both depend on them.assets/js/_main.js: navigation, sidebar controls, footer sizing, and accessible same-page anchor behavior.bin/build-assets.mjsbuilds the browser bundle.files/andimages/: downloadable documents and images.
Edit _data/publications.json. Array order is display order. Use group: "selected"
for entries shown on the website; retain other records for reference. Preserve
full author lists and the complete venue. The optional venue_short is the
compact visible label; the full venue appears on hover. url links the title;
links holds optional resources such as a talk or code repository.
The homepage links to Google Scholar for the full list.
Edit _data/talks.json. Each record has a title, a recording url, and an
appearances array of complete display lines. Keep punctuation and dates in those
lines. Multiple appearances under one title share that title's recording link.
The template escapes data and generates the list directly, without converting
Markdown or rewriting generated HTML. Pass semantic=true when the list's bullets
are hidden, as on the homepage, to retain its list semantics in assistive technology.
Replace files/rachel_luo_cv.pdf with an email-free copy of the latest CV.
The current website copy follows v3 (September 2026). Build public copies from a
temporary copy of the private LaTeX source with the \email{...} command removed;
keep the private original intact. Check every rendered PDF page and confirm that
both the email text and its mailto: link are absent before replacing the download.
Update cv_label in _pages/about.md and the download label in _pages/sitemap.md
if the CV date changes. /cv/ redirects to the PDF, while /publications/ and
/talks/ redirect to their homepage sections. Existing /about/, /about.html,
and /resume redirects are retained. Keep the homepage section IDs stable so
these links continue to work.
npm run build:js
JEKYLL_ENV=production bundle exec jekyll buildPreview the homepage at desktop and mobile widths after styling changes. Also
check /sitemap/ and /404.html when editing shared templates or styles. Verify
that /cv/, /resume, /publications/, and /talks/ reach their destinations.
Review the PDF download and internal links before publishing.
- Jekyll 4.4 and Dart Sass provide the site build. Keep
Gemfile.lockandpackage-lock.json; update dependencies deliberately. - The only npm build dependency is esbuild. The unused map demo, comment providers, sample collections, and migration-only tools have been removed.
- Jekyll plugins generate the sitemap, feed, and existing redirects.
- MathJax still loads from the pinned HTTPS CDN URL in
_includes/head/custom.htmlon standalone pages. The homepage disables it withmathjax: false. - Analytics is disabled. If deliberately enabling it, configure
analytics.provider: google-analytics-4andanalytics.google.tracking_id. Local preview always disables analytics.
Deployment is defined in .github/workflows/pages.yml. Pushes to master build
the site with the pinned Ruby/Bundler dependencies and publish the generated site
to GitHub Pages. The workflow can also be run manually from the Actions tab.
Repository Settings → Pages must use GitHub Actions as the publishing source.
JavaScript assets are committed, so run npm run build:js before committing any
changes to assets/js/_main.js.
Based on AcademicPages,
originally forked by Stuart Geiger from Michael Rose's
Minimal Mistakes. See LICENSE.