- footer: 'built <ts> · <hash> · <n> notes', hash linking to Gitea
(GARDEN_COMMIT passed in by build.sh; '+' marks dirty-tree builds)
- homepage header: live strip fed by api.c0smere.net/spotify/summary
(weekly aggregate + monthly top artist/genre), fail-closed like the
odometer and header quote
- /og/<slug>.png satori+resvg cards for every note + the homepage;
og:/twitter: meta in Base
- shiki github-dark-default (#0d1117 sits closer to the page ground)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- deploy/rebuild-hook.py: tiny stdlib HTTP service (:18101) — button
page for the Homepage dashboard iframe, POST /rebuild runs
auto-build.sh --force, /status + /healthz for feedback/monitoring
- auto-build.sh: --force flag + flock so timer and manual builds
serialize
- [...slug].astro: skip the synthetic h1 when the note body already
opens with an identical h1
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Root-owned node_modules/dist/public from the container blocked git pull
(public/fonts could not be created). Chown once, then keep artifacts
user-owned via --user + HOME/npm cache in /tmp.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- deploy/auto-build.sh: git pull + rebuild only when the repo HEAD or any
vault file mtime changed (sha256 signature in .build_state); replaces
the Quartz update_quartz_docker.sh loop
- systemd user units (5-min cadence, matching the old Quartz timer)
- compose service/container renamed garden-next -> garden
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>