Release · v3.14.20
Serve the site's own images from the site, not the…
perf(assets): serve the site's own images from the site, not the database
Details
The portrait, the favicon and the three stills the v1 rotator cycles through are static site chrome. They never vary per request and they are not row data, so resolving them through `db://` bought nothing and cost the whole free-tier egress budget. They now ship in `assets/img/` and are referenced directly, which takes them off the Supabase bill entirely and lets GitHub Pages serve them. Measured on a real build, at 1440 wide, Supabase bytes per cold page load: / 7041.3 KiB -> 140.6 KiB (50x) /v1/ 6917.8 KiB -> 31.4 KiB /v2/ 7029.3 KiB -> 142.8 KiB Storage requests per page load go to zero. The rotator derives its file names from whatever `src` the template rendered rather than hard-coding a path, so it survives a non-empty `baseurl`, and it warms the other three stills after load so a rotation never shows an empty frame mid-flip. The v2 portrait deliberately keeps no width/height attributes: its frame sets `aspect-ratio: 4 / 5` with `object-fit: cover`, so an intrinsic square ratio would be overridden anyway and stating one would only mislead. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DAJJ63FFnLoD5XLpu6yJaG
Files changed (7)
| frontend/client/ts/components/profile-rotator.ts | +35 | −15 |
| frontend/jekyll/_includes/v2/hero.html | +6 | −1 |
| frontend/jekyll/_includes/v3/hero.html | +1 | −1 |
| frontend/jekyll/_layouts/changelog.html | +1 | −1 |
| frontend/jekyll/_layouts/default.html | +2 | −2 |
| frontend/jekyll/_layouts/v2.html | +1 | −1 |
| frontend/jekyll/_layouts/v3.html | +1 | −1 |