fix(pwa): version icon filenames to -v3 and bust iOS Safari WebClip cache

This commit is contained in:
Moritz Graf
2026-10-12 08:36:02 +02:00
parent 7b9b3ff0eb
commit 3e9e12bbc5
8 changed files with 31 additions and 26 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

+5 -5
View File
@@ -11,31 +11,31 @@
"theme_color": "#090A0F",
"icons": [
{
"src": "/family/mila-icon-192.png",
"src": "/family/mila-icon-192-v3.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "/family/mila-icon-192.png",
"src": "/family/mila-icon-192-v3.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/family/mila-icon-512.png",
"src": "/family/mila-icon-512-v3.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
},
{
"src": "/family/mila-icon-512.png",
"src": "/family/mila-icon-512-v3.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/family/mila-apple-touch-icon.png",
"src": "/family/mila-apple-touch-icon-v3.png",
"sizes": "180x180",
"type": "image/png"
},
+1 -1
View File
@@ -1,5 +1,5 @@
// Minimal service worker for Family PWAs (Mila & Moritz) with instant cache-bypassing navigation
const CACHE_NAME = 'family-pwa-v2';
const CACHE_NAME = 'family-pwa-v3';
self.addEventListener('install', (event) => {
self.skipWaiting();
+25 -20
View File
@@ -712,31 +712,31 @@ def generate_dashboard_html(engine: DatastoreEngine) -> str:
"theme_color": "#090A0F",
"icons": [
{
"src": "/family/mila-icon-192.png",
"src": "/family/mila-icon-192-v3.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "/family/mila-icon-192.png",
"src": "/family/mila-icon-192-v3.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/family/mila-icon-512.png",
"src": "/family/mila-icon-512-v3.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
},
{
"src": "/family/mila-icon-512.png",
"src": "/family/mila-icon-512-v3.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/family/mila-apple-touch-icon.png",
"src": "/family/mila-apple-touch-icon-v3.png",
"sizes": "180x180",
"type": "image/png"
},
@@ -768,12 +768,12 @@ def generate_dashboard_html(engine: DatastoreEngine) -> str:
<meta name="msapplication-TileColor" content="#090A0F">
<link rel="manifest" href="/family/mila.webmanifest" crossorigin="use-credentials">
<link rel="apple-touch-icon" href="/family/mila-apple-touch-icon.png">
<link rel="apple-touch-icon" sizes="180x180" href="/family/mila-apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="/family/mila-icon-192.png">
<link rel="icon" type="image/png" sizes="512x512" href="/family/mila-icon-512.png">
<link rel="icon" type="image/png" sizes="32x32" href="/family/mila-icon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/family/mila-icon-16.png">
<link rel="apple-touch-icon" href="/family/mila-apple-touch-icon-v3.png">
<link rel="apple-touch-icon" sizes="180x180" href="/family/mila-apple-touch-icon-v3.png">
<link rel="icon" type="image/png" sizes="192x192" href="/family/mila-icon-192-v3.png">
<link rel="icon" type="image/png" sizes="512x512" href="/family/mila-icon-512-v3.png">
<link rel="icon" type="image/png" sizes="32x32" href="/family/mila-icon-32-v3.png">
<link rel="icon" type="image/png" sizes="16x16" href="/family/mila-icon-16-v3.png">
<link rel="shortcut icon" href="/family/favicon.ico">
<link rel="icon" href="/family/favicon.ico">
<link rel="icon" type="image/svg+xml" href="/family/mila-icon.svg">
@@ -807,7 +807,7 @@ def generate_dashboard_html(engine: DatastoreEngine) -> str:
<div id="pwa-install-banner" class="hidden max-w-4xl mx-auto px-4 pt-3">
<div class="flex items-center justify-between p-3 rounded-2xl bg-gradient-to-r from-purple-900/80 via-pink-900/50 to-zinc-900 border border-purple-500/40 shadow-xl backdrop-blur-md">
<div class="flex items-center gap-3">
<img src="/family/mila-icon-192.png" alt="Mila" class="w-9 h-9 rounded-xl object-cover shadow-md border border-purple-500/40">
<img src="/family/mila-icon-192-v3.png" alt="Mila" class="w-9 h-9 rounded-xl object-cover shadow-md border border-purple-500/40">
<div>
<p class="text-xs font-bold text-white">Mila App installieren</p>
<p class="text-[11px] text-zinc-300">Direkt auf dem Homescreen nutzen</p>
@@ -844,7 +844,7 @@ def generate_dashboard_html(engine: DatastoreEngine) -> str:
<div class="max-w-4xl mx-auto flex items-center justify-between">
<div class="flex items-center gap-3">
<div class="w-10 h-10 rounded-2xl bg-gradient-to-tr from-purple-600 via-pink-500 to-teal-400 p-0.5 shadow-lg shadow-purple-500/20 overflow-hidden flex items-center justify-center">
<img src="/family/mila-icon-192.png" alt="Mila" class="w-full h-full object-cover rounded-[14px]">
<img src="/family/mila-icon-192-v3.png" alt="Mila" class="w-full h-full object-cover rounded-[14px]">
</div>
<div>
<div class="flex items-center gap-2">
@@ -1400,13 +1400,18 @@ def publish_to_s3(html_content: str, data_dir: Optional[Path] = None) -> str:
static_assets = [
("mila.webmanifest", "application/manifest+json; charset=utf-8", "no-cache, no-store, must-revalidate"),
("sw.js", "application/javascript; charset=utf-8", "no-cache, no-store, must-revalidate"),
("mila-icon-192.png", "image/png", "public, max-age=604800"),
("mila-icon-512.png", "image/png", "public, max-age=604800"),
("mila-apple-touch-icon.png", "image/png", "public, max-age=604800"),
("mila-icon-32.png", "image/png", "public, max-age=604800"),
("mila-icon-16.png", "image/png", "public, max-age=604800"),
("favicon.ico", "image/x-icon", "public, max-age=604800"),
("mila-icon.svg", "image/svg+xml", "public, max-age=604800"),
("mila-apple-touch-icon-v3.png", "image/png", "no-cache, must-revalidate, max-age=0"),
("mila-icon-192-v3.png", "image/png", "no-cache, must-revalidate, max-age=0"),
("mila-icon-512-v3.png", "image/png", "no-cache, must-revalidate, max-age=0"),
("mila-icon-32-v3.png", "image/png", "no-cache, must-revalidate, max-age=0"),
("mila-icon-16-v3.png", "image/png", "no-cache, must-revalidate, max-age=0"),
("mila-apple-touch-icon.png", "image/png", "no-cache, must-revalidate, max-age=0"),
("mila-icon-192.png", "image/png", "no-cache, must-revalidate, max-age=0"),
("mila-icon-512.png", "image/png", "no-cache, must-revalidate, max-age=0"),
("mila-icon-32.png", "image/png", "no-cache, must-revalidate, max-age=0"),
("mila-icon-16.png", "image/png", "no-cache, must-revalidate, max-age=0"),
("favicon.ico", "image/x-icon", "no-cache, must-revalidate, max-age=0"),
("mila-icon.svg", "image/svg+xml", "no-cache, must-revalidate, max-age=0"),
]
for fname, ctype, cache_ctrl in static_assets: