fix(pwa): cache-bust icon link tags (?v=20260515-3a)
CI / test (push) Has been cancelled

iOS Safari caches the apple-touch-icon per origin and ignores byte-level
changes on the same URL. Adding a version query forces a refetch on
fresh visits without renaming the source files. Buttressed across all
standalone Twig templates and the SPA index plus the manifest icons so
Chrome desktop also refetches.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-15 14:37:56 -04:00
parent 8ae4a2fd5a
commit 5e8d9efb7b
15 changed files with 58 additions and 58 deletions
+4 -4
View File
@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<title>WeVisto</title>
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg" />
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png" />
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a" />
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a" />
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a" />
<link rel="manifest" href="/build/manifest.webmanifest" />
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a" />
<meta name="theme-color" content="#fdf6ee" />
<meta name="apple-mobile-web-app-capable" content="yes" />
+3 -3
View File
@@ -11,19 +11,19 @@
"theme_color": "#fdf6ee",
"icons": [
{
"src": "/build/icons/icon-192.png",
"src": "/build/icons/icon-192.png?v=20260515-3a",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "/build/icons/icon-512.png",
"src": "/build/icons/icon-512.png?v=20260515-3a",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
},
{
"src": "/build/icons/icon-512-maskable.png",
"src": "/build/icons/icon-512-maskable.png?v=20260515-3a",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
+4 -4
View File
@@ -5,11 +5,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<title>WeVisto</title>
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg" />
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png" />
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a" />
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a" />
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a" />
<link rel="manifest" href="/build/manifest.webmanifest" />
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a" />
<meta name="theme-color" content="#fdf6ee" />
<meta name="apple-mobile-web-app-capable" content="yes" />
+3 -3
View File
@@ -11,19 +11,19 @@
"theme_color": "#fdf6ee",
"icons": [
{
"src": "/build/icons/icon-192.png",
"src": "/build/icons/icon-192.png?v=20260515-3a",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "/build/icons/icon-512.png",
"src": "/build/icons/icon-512.png?v=20260515-3a",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
},
{
"src": "/build/icons/icon-512-maskable.png",
"src": "/build/icons/icon-512-maskable.png?v=20260515-3a",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
+4 -4
View File
@@ -3,10 +3,10 @@
<head>
<meta charset="UTF-8">
<title>{% block title %}Welcome!{% endblock %}</title>
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a">
{% block stylesheets %}
{% endblock %}
+4 -4
View File
@@ -3,10 +3,10 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a">
<title>Setup help — WeVisto</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+4 -4
View File
@@ -3,10 +3,10 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a">
<title>Sign in — WeVisto</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+4 -4
View File
@@ -3,10 +3,10 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a">
<title>Create account — WeVisto</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+4 -4
View File
@@ -3,10 +3,10 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a">
<title>Name your frame — WeVisto</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+4 -4
View File
@@ -3,10 +3,10 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a">
<title>Set up your frame — WeVisto</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+4 -4
View File
@@ -3,10 +3,10 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a">
<title>Add photo to your frame — WeVisto</title>
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
+4 -4
View File
@@ -3,10 +3,10 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a">
<title>Photo added — WeVisto</title>
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
+4 -4
View File
@@ -3,10 +3,10 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a">
<title>Decline photo — WeVisto</title>
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
+4 -4
View File
@@ -3,10 +3,10 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a">
<title>Photo declined — WeVisto</title>
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
+4 -4
View File
@@ -3,10 +3,10 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="/build/favicon.svg?v=20260515-3a">
<link rel="icon" type="image/png" sizes="32x32" href="/build/icons/favicon-32.png?v=20260515-3a">
<link rel="icon" type="image/png" sizes="16x16" href="/build/icons/favicon-16.png?v=20260515-3a">
<link rel="apple-touch-icon" sizes="180x180" href="/build/icons/apple-touch-icon.png?v=20260515-3a">
<title>Link invalid — WeVisto</title>
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}