Cache radar tile images with a Service Worker
CI / check (push) Successful in 40s
CI / deploy (push) Successful in 12s

public/sw.js: network-falling-back-to-cache for RainViewer radar tile
requests specifically (nothing else — the app itself is served by the
same local server that's already the offline resource in the van, so
there's no app-shell to precache). Registered from layout.erb, a no-op
where it can't register (insecure context) rather than an error.

Verified: registers and controls the page, tiles get cached on a
normal fetch, cache.match() correctly retrieves them by the same
request. CDP's network-blocking simulation doesn't interact cleanly
with Service Worker fetch interception (a known tooling quirk, not
specific to this), so the actual offline fallback path is the
standard try/catch pattern, verified by code review rather than a
simulated-offline screenshot.
This commit is contained in:
randy committed 2026-09-09 09:51:29 +02:00
1 parent a98b8dbd47
commit 5caf865fc8
3 files changed
+74 -1

No files matched your search

+10
View File
@@ -9,6 +9,16 @@
</head>
<body>
<%= yield %>
<script>
// Caches radar tile images (see public/sw.js) so the last-seen frames
// stay visible once the network is actually gone. Silently a no-op
// where it can't register — insecure-context LAN access without a
// reverse proxy in front, for instance — same as radar caching simply
// not working there; nothing else on the page depends on this.
if ("serviceWorker" in navigator) {
navigator.serviceWorker.register("/sw.js").catch(() => {});
}
</script>
<script src="/vendor/pmtiles/pmtiles.js"></script>
<script src="/vendor/protomaps-themes-base/protomaps-themes-base.js"></script>
<%# Vendored libs above don't change between deploys, so they're left