levineuwirth.org/tools
Levi Neuwirth fad8719045 Stamp the site-wide build time post-render
Hakyll caches per-page outputs, so pages whose dependencies have not
changed are not recompiled and the rendered $build-time$ in their
footer goes stale relative to a fresh build. The right granularity for
"last built at" is site-wide rather than per-page; wrapping the footer
timestamp in <span data-build-time> and rewriting it after Hakyll lets
every page reflect the current build without paying recompilation cost.

* tools/stamp-build-time.py walks _site/**/*.html after Hakyll runs and
  rewrites each element wrapped in [data-build-time] to the same format
  Contexts.hs:buildTimeField emits, so a fresh render and the post-pass
  agree.
* templates/partials/footer.html wraps $build-time$ in
  <span class="footer-build-time" data-build-time>...</span> so the
  sweep has a stable selector.
* Makefile invokes the sweep between embed.py and compress-assets so
  the .gz/.br sidecars include the fresh stamp.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 12:05:28 -04:00
..
bin Add link archive system: snapshots, backlinks, link-rot 2026-05-23 10:06:33 -04:00
hooks Marks II: broader monogram coverage + audit-marks tool 2026-05-23 12:05:08 -04:00
add-popup-source.sh major visual changes - dingbats, footer, etc 2026-04-17 12:48:22 -04:00
archive.py Add link archive system: snapshots, backlinks, link-rot 2026-05-23 10:06:33 -04:00
audit-marks.py Marks II: broader monogram coverage + audit-marks tool 2026-05-23 12:05:08 -04:00
compress-assets.sh Validate tool inputs and surface tracebacks on errors 2026-05-07 15:09:02 -04:00
convert-images.sh Spec dilemma 2026-05-01 21:22:01 -04:00
download-leaflet.sh Spec dilemma 2026-05-01 21:22:01 -04:00
download-model.sh audit: tooling, deploy ordering, README, repo hygiene 2026-04-10 17:41:33 -04:00
download-pdfjs.sh PDF compression 2026-04-22 12:40:22 -04:00
embed.py Add link archive system: snapshots, backlinks, link-rot 2026-05-23 10:06:33 -04:00
extract-dimensions.py Validate tool inputs and surface tracebacks on errors 2026-05-07 15:09:02 -04:00
extract-exif.py Validate tool inputs and surface tracebacks on errors 2026-05-07 15:09:02 -04:00
extract-palette.py Validate tool inputs and surface tracebacks on errors 2026-05-07 15:09:02 -04:00
import-photo.sh Validate tool inputs and surface tracebacks on errors 2026-05-07 15:09:02 -04:00
import-poetry.py audit: tooling, deploy ordering, README, repo hygiene 2026-04-10 17:41:33 -04:00
leaflet-checksums.sha256 Spec dilemma 2026-05-01 21:22:01 -04:00
model-checksums.sha256 Pin Hugging Face model revisions for downloader and embed pipeline 2026-05-07 15:08:14 -04:00
monolith-version.txt Add link archive system: snapshots, backlinks, link-rot 2026-05-23 10:06:33 -04:00
pdfjs-checksums.sha256 Fix broken PDF hyperlinks 2026-04-22 12:10:31 -04:00
preset-signing-passphrase.sh GPG signing, embedding pipeline, visualization filter, search timing, sig popups 2026-03-20 20:14:49 -04:00
refreeze.sh affiliation, cabal helper script 2026-03-26 08:14:50 -04:00
sign-site.sh States/Context/Embeddings fixes 2026-04-26 11:22:57 -04:00
stamp-build-time.py Stamp the site-wide build time post-render 2026-05-23 12:05:28 -04:00
subset-fonts.sh initial deploy! whoop 2026-03-17 21:56:14 -04:00
viz_theme.py GPG signing, embedding pipeline, visualization filter, search timing, sig popups 2026-03-20 20:14:49 -04:00