Publications page: linked titles, bold lab authors, year filter, type badge#45
Merged
Merged
Conversation
…badge
Four enhancements to the publications page, none of which require any
new manual data entry — everything is auto-derived from the existing
publications.yaml and people.yml.
1. Title hyperlinks: the URL field was already present in the data
(auto-populated by scholar_scraper.py) but the template ignored it.
Now <a href="{{ pub.URL }}"> when present.
2. Bold lab authors: every author whose (first-initial, last-name)
matches a person in _data/people.yml (PI + all roles, current and
former) renders in <b>. The first-initial check avoids false
positives like Amanda Li getting bolded because Thomas Li is a
former undergrad — Pearson papers still match "J Pearson",
"JM Pearson", "John M Pearson", etc., since they all start with J.
3. Year-filter chips: a row of buttons at the top of the page lets
visitors narrow to a single year. Pure DOM toggle, ~15 lines of
vanilla JS, no dependencies.
4. Venue-type badge: each entry shows a small PREPRINT / JOURNAL /
CONFERENCE pill derived from container-title (bioRxiv/arXiv/etc =
preprint; proceedings/NeurIPS/conference = conference; otherwise
journal). No data-entry overhead — fully auto-derived. Lab can
add a manual `type:` override later if a venue is misclassified.
Verified locally: vnu HTML5 0 errors; Playwright screenshots of
"All" and "2025"-filtered states both render correctly with
appropriate bolding and badges.
Contributor
Two new lychee tweaks surfaced by PR #45's URL-linking on the publications page: 1. eScholarship's two URLs in publications.yaml return 202 Accepted. That's a legitimate success response for deferred-fetch repos (they're processing the request and the page will load once the pipeline finishes), but lychee's default accept list doesn't include it. Add 202. 2. web.stanford.edu/~hastie/ElemStatLearn/ (referenced from learning.html) intermittently times out from the runner — was a 200 redirect on the last green run. Set accept_timeouts = true so transient slow hosts don't break CI on every run.
… 0.23) lychee-action@v2 ships lychee 0.23 by default, which doesn't recognise the accept_timeouts TOML field I added in the last commit — hence the exit-3 config error. Move the flag to the CLI args instead, which has been supported much longer. The 202 accept code stays in lychee.toml since it's a config-style addition that works on every version.
…tion pins) Second attempt at the Stanford timeout: the CLI flag isn't in lychee 0.23 either, which is what lychee-action@v2 ships with by default — the empty lychee report and exit-3 confirm it's still a config/arg error, not a real link issue. Backing the flag out entirely. The Stanford ~hastie URL was a 200 redirect on previous CI runs, so the TIMEOUT is transient. If it keeps failing we can either exclude that one URL, or bump lycheeVersion in the action to a newer release that has the flag. Keeping `accept = [..., 202, ...]` in TOML since that's worked across versions and fixes the escholarship 202 responses.
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Four enhancements to the publications page, none requiring any new manual data entry — everything is auto-derived from the existing
_data/publications.yamland_data/people.yml.1. Title hyperlinks
The
URLfield was already in the data (populated byscholar_scraper.pyfrom Google Scholar) but the template ignored it. Now each title is a link when a URL exists.2. Bold lab authors
Every author whose
(first-initial, last-name)matches an entry in_data/people.yml(PI + all roles, current and former) renders in<b>. So "John M Pearson" / "John Pearson" / "J Pearson" all match the PI; "Amanda Li" doesn't match "Thomas Li" because the first initials differ. Auto-maintained — adding or removing a lab member inpeople.ymlpropagates here on next build.3. Year-filter chips
A row of buttons at the top of the page lets visitors narrow to a single year. Pure DOM toggle, ~15 lines of vanilla JS, no dependencies. "All" chip is the default; clicking another year hides the other sections.
4. Venue-type badge
Each entry shows a small
PREPRINT/JOURNAL/CONFERENCEpill. The type is derived fromcontainer-title(bioRxiv / arXiv / medRxiv / chemRxiv / PsyArXiv / OSF preprints → preprint; "proceedings" / "neurips" / "advances in neural" / "cosyne" / "conference" → conference; otherwise journal). Lab can add a manualtype:override field to_data/publications.yamllater if a venue is misclassified.What it looks like
Verified locally via Playwright at 1400×900 in both states.
Test plan
bundle exec jekyll buildclean_site/publications.htmlNotes / non-goals
type:override field in YAML yet — could be added later if any auto-classification is wrong. Adding one is a 3-line template change.people.yml, current and former. That's intentional — authors should be bolded whether they were in the lab when the paper was written, even if they've since moved on.https://claude.ai/code/session_01S5QXfkxZBNSAf2Y1XAD8H7
Generated by Claude Code