- This repo is a small Jekyll-based research group website with a light custom Python build pipeline for publications and local site generation.
- Top-level
.htmland.mdfiles such asindex.html,people.html,publications.html,research.html,blog.html, and404.mdare the main page entry points. _config.ymlholds site-wide configuration such as site metadata, navigation, role groupings, and front-page publication limits._data/people.ymlis the structured source of truth for people and roles._posts/contains dated news posts and blog posts.bib/pubs.bibis the source of truth for publications.
_layouts/contains the page skeletons used by Jekyll pages and posts._includes/contains reusable partials used across pages.css/contains the SCSS source for site styling.js/contains browser-side JavaScript such as the publication search behavior.img/contains static images and profile photos.
scripts/contains the Python scripts that generate publication-related includes and can also build the site locally.Makefileis the main entry point for local build tasks.requirements-build.txtlists Python packages needed for the custom build pipeline..codex_vendor/is a local vendored dependency directory used by the Python build scripts when packages are installed there.
_includes/front-page-papers.html,_includes/pubs.html,_includes/publication-count.html,_includes/publication-search-tags.html, and_data/publication-topics.ymlare generated files._site/is the fully built output site and should be treated as generated build output.- Do not hand-edit generated publication includes,
_data/publication-topics.yml, or_site; change the source data or generator instead, then rerender.
meetings/stores meeting-related material and is separate from the main public site structure unless explicitly wired into pages later..git/is the repository metadata directory and should be ignored for content work.
- If the change is about page copy or layout, start with the top-level page,
_layouts/, or reusable_includes/. - If the change is about people, edit
_data/people.yml. - If the change is about publications, edit
bib/pubs.biband rerun the publication generators. - If the change is about styling or interactivity, edit
css/orjs/. - If a visible publication artifact looks wrong, fix the source or generator instead of patching the generated HTML directly.
- The source of truth for publications is
bib/pubs.bib. - The rendered publication HTML is generated from that BibTeX by
scripts/render_front_page_papers.pyandscripts/render_publications_include.py. - Generated publication artifacts live in
_includes/front-page-papers.html,_includes/pubs.html,_includes/publication-count.html, and_includes/publication-search-tags.html.
- The text search is full-text search over normalized publication metadata.
- The search index includes the BibTeX key, entry type, title, author list, venue fields,
keywords,topics,site_tags,note,abstract, year, and month. - This means typing into the search box can match either standard BibTeX metadata or curated topic tags.
- The clickable publication tags are driven by a custom BibTeX field named
topics. site_tagsis also accepted as an alias, buttopicsis the preferred field to use going forward.topicsis a manual, site-specific field. ADS/ADSabs BibTeX exports do not add it by default, so it must be added by hand to entries that should participate in the curated topic filters.- Topic values are split on commas, semicolons, or pipes.
- Example:
topics = {population III, red giant, asteroseismology}- Topic matching is exact on normalized topic membership, not loose substring matching.
- The search box and the topic buttons are intentionally different:
- The search box does free-text matching.
- The topic buttons filter on explicit curated topic membership.
- The visible tag buttons are auto-generated from the
topics/site_tagsvalues present inbib/pubs.bib. - There is no hardcoded tag list in the page template.
- The generated tag include is
_includes/publication-search-tags.html. - The generated agent-readable tag list is
_data/publication-topics.yml. It is automatically populated from the bibtex file. This list should be drawn from when generating topic fields for new bibtex entries. Topics that are not in this list can be added to bibtex and the code will automatically add it to this yml file. - Tags are only shown if more than one paper has that topic.
- Tags are sorted by paper count descending, with alphabetical tie-breaking.
- Each tag shows a small superscript count equal to the number of papers carrying that topic.
- If a paper should appear under a topic button, add that topic to the paper's
topicsfield inbib/pubs.bib. - If a topic should disappear from the button row, remove it until at most one paper still carries it.
- After editing
bib/pubs.bib, rerun the publication render step so the generated includes stay in sync. - The simplest refresh commands are:
& 'C:\Program Files\Python311\python.exe' scripts\render_front_page_papers.py
& 'C:\Program Files\Python311\python.exe' scripts\render_publications_include.py