feat(images): cache-bust /cms-images URLs by post._updated
Deploy / verify (push) Successful in 40s
Deploy / deploy (push) Successful in 1m1s

Browser caches /cms-images responses immutably for a year. When the
editor changes a focal point or alt text, the underlying transform
output changes too, but the URL stays the same — so the browser keeps
serving the previous bytes. Manual hard-reloads and /api/cache/clear
help once but not for visitors who already have the file.

- RustyImageTransformParams gains an optional `version` that
  serializes as `_v` in the /cms-images URL.
- RustyImage.svelte takes a matching `version` prop and forwards it
  through `baseParams`, so every <picture> source carries the tag.
- The post thumbnail passes `post._updated` (truncated to seconds)
  as version. Each save bumps `_updated`, the URL changes, browsers
  re-fetch.

`_v` is intentionally not consumed by `/cms-images` — its sole job is
to break the browser cache key. The server-side image-cache and the
RustyCMS transform cache key both ignore it, so disk usage doesn't
balloon when the version tag changes.
This commit is contained in:
Peter Meier
2026-04-25 09:43:34 +02:00
parent bb9df1f9bd
commit ecff7b0bbf
3 changed files with 13 additions and 0 deletions
+1
View File
@@ -45,6 +45,7 @@
class="block object-cover"
loading="eager"
fetchpriority="high"
version={(data.post as { _updated?: string })._updated?.slice(0, 19)}
/>
</div>
{:else if data.postImageUrl}