Site
Release notes
How emissivity.org is built and what changed in each release, written for whoever maintains the site next. Additions visible to visitors are listed on What's new. Last updated 2026-10-01.
The site is a Quarto website deployed by Netlify from the main branch. Data-driven pages are generated at build time from the YAML files in _data/ by the scripts in tools/; the build order is in tools/netlify-build.sh. The repository README lists every data source and the routine maintenance commands.
v3.5 Training section, upcoming-event highlight, 'new' mark on News 2026-10-01
What changed
- Training section at /training/ with its own navbar entry: hub page, listing of training items plus the existing schools, item template and new_entry.py support.
- Events dated today or later are drawn as a highlighted box in every listing (events index, conference archive, schools, training), burgundy accent.
- The News link in the navbar carries a small pulsing dot for 14 days after the newest news post.
How it was done
- Upcoming highlight: assets/includes/upcoming-events.html (include-after-body) reads the data-listing-date-sort epoch that Quarto puts on every listing item and adds the class 'upcoming'; the box is styled in theme.css under .quarto-post.upcoming. Evaluated in the browser so it stays right between deploys.
- News mark: tools/generate_changelog.py scans events-news/news/*.qmd (skipping drafts) and stamps the newest date into data-latest-news on the News link, between the latest-news markers in assets/includes/site-header.html. A script at the end of the header shows the dot when that date is within 14 days; CSS pulses it 8 times (about 11 s) then holds; on news pages it is steady; reduced-motion users get no animation.
- Training: training/index.qmd lists training/items/*.qmd and events-news/schools/*.qmd in one listing. Items use the frontmatter in training/items/_template.qmd (kind, format, organiser, level, fee, registration_deadline). Nav link in site-header.html, footer link, card on events-news/index.qmd.
- New colour token --burgundy (#7a1f2b) for attention accents, alongside --brass for the featured band.
- Mathematics in the institutions database: write $…$ in _data/institutions.yml text fields. generate_network.py converts it to raw inline HTML for the Markdown profiles and to \( \) for the raw-HTML index table, so the single site MathJax typesets both; Quarto's own math injection is never triggered. Do not write $…$ in hand-written .qmd prose.
Files to know
assets/includes/site-header.html (nav, latest-news markers, mark script)
assets/includes/upcoming-events.html
training/index.qmd, training/items/_template.qmd
tools/generate_changelog.py (stamp_header, latest_news_date)
tools/new_entry.py (training)
v3.4 Changelog, release notes, last-updated stamp 2026-10-01
What changed
- Public 'What's new' page listing every addition to the site.
- Release notes page for maintainers.
- 'Last updated' stamp in the footer, linking to What's new.
- RISEnergy access call news item; IETcc-CSIC database on the data-resources page.
How it was done
- Two hand-maintained data files, _data/changelog.yml and _data/releases.yml, are the only sources of truth.
- tools/generate_changelog.py renders them into changelog.qmd and about/release-notes.qmd and rewrites the marked region of assets/includes/site-footer.html with the newest date. It runs in tools/netlify-build.sh with the other generators.
- The stamp date is the newest entry date across both files, so a release or an addition updates it without a separate edit.
Files to know
_data/changelog.yml
_data/releases.yml
tools/generate_changelog.py
assets/includes/site-footer.html (region between <!-- updated:start --> and <!-- updated:end -->)
v3.3 Content audit, MathJax, measured home figure 2026-09-29
What changed
- 45 corrections from a five-part review of every content source: citations and DOIs, standards scopes, EKHI descriptions, institution facts, events archive, privacy and contribution pages.
- Mathematics typeset site-wide; measurement-principles page rewritten with formulas.
- Home-page figure built from measured EKHI data (de Vos 1954 tungsten) instead of a hand-drawn curve.
- Display equations constrained to the paragraph measure.
How it was done
- MathJax 3 is loaded on every page from assets/includes/mathjax.html (include-in-header in _quarto.yml), with backslash-parenthesis inline and backslash-bracket display delimiters (dollar signs are off), because site pages are raw-HTML blocks that Quarto never scans for math. Pages that must show those delimiters literally need the nomath class.
- The home figure is generated: _data/hero-spectrum.yml holds the measured points and provenance; tools/generate_hero_figure.py renders _hero-spectrum.qmd (SVG plus caption), included by index.qmd.
- Only 18 of the 49 network profiles are regenerated by tools/generate_network.py from _data/institutions.yml; the rest are hand-written and must be edited directly when the YAML changes.
- Audit corrections were committed one section at a time so each is reviewable in git history (commits 31061cb to 709c8f9).
Files to know
assets/includes/mathjax.html
_data/hero-spectrum.yml, tools/generate_hero_figure.py, _hero-spectrum.qmd
methods/principles.qmd (unlisted page; formulas in LaTeX)
v3.2 Post-workshop update: IR-EMPOWER 2026, networks, schools, map basemap 2026-09-25
What changed
- IR-EMPOWER 2026 section generated from data: programme, speakers, committee, round table, award, talk BibTeX.
- Research networks pages (TAMARYS, PaRaMetriC) and a schools & courses page.
- Six institutions added to the research map (46 in total).
- Research map drawn on an OpenFreeMap vector basemap (CARTO tiles now need an API key).
- iCal feed generated from _data/calendar.yml.
- Site-at-a-glance infographic on the About page.
How it was done
- tools/generate_ir_empower.py renders _data/ir-empower.yml into ir-empower/2026/*.qmd and files/bib/ir-empower-2026.bib.
- tools/generate_ical.py renders _data/calendar.yml into files/ical/emissivity-conferences.ics; the calendar page itself is built from events-news/conferences/*.qmd, so an event must be added in both places.
- assets/scripts/labs-map.js loads MapLibre GL through the maplibre-gl-leaflet bridge and the OpenFreeMap Positron style, falling back to OpenStreetMap raster tiles. The script tag carries a ?v= query that must be bumped when the script changes, because browsers cache it.
- Netlify build image is Noble; Python is pinned to 3.12 in netlify.toml because the image's installer refuses 3.8. Assets are served with max-age=0, must-revalidate.
- The analytics page and the header include name the exact third-party hosts contacted (Google Fonts, jsDelivr, cdnjs).
Files to know
_data/ir-empower.yml, tools/generate_ir_empower.py
_data/calendar.yml, tools/generate_ical.py
_data/networks.yml, tools/generate_network.py
assets/scripts/labs-map.js
netlify.toml, tools/netlify-build.sh
v3.1 Verified bibliography and IR-EMPOWER archive 2026-06-11
What changed
- Bibliography checked against Crossref; 41 corrected and 10 new 2026 entries; one page per publication.
- IR-EMPOWER series section with the full 2024 archive (programme, speakers, committees); legacy site kept as a frozen copy.
- GoatCounter analytics and a privacy page.
How it was done
- Publication pages live under publications/<year>/<slug>/index.qmd with Google Scholar meta tags in the header include.
- GoatCounter is loaded from assets/includes/fonts.html; it sets no cookies.
Files to know
publications/
ir-empower/2024/
v3.0 Standalone site repository 2026-06-11
What changed
- emissivity.org rebuilt as a Quarto website with theme: none and the family design kit, deployed by Netlify from the main branch.
How it was done
- No base directory: the repository root is the Quarto project. Netlify runs bash tools/netlify-build.sh, which installs Quarto, runs the Python generators, renders to _site, and copies assets/data and assets/scripts.
- Content pages are raw-HTML blocks inside .qmd files sharing assets/styles/theme.css; data-driven pages are generated from _data/*.yml by scripts in tools/.
Files to know
_quarto.yml, netlify.toml, tools/netlify-build.sh
assets/styles/theme.css
README.md (data sources table and routine maintenance)