fix: overhaul PWA icons with v2 suffix to bust all cache layers

- Redesign favicon SVG with gradient border matching splash screen
- Rename all icon files with -v2 suffix to bypass browser/SW/PWA caches
- Delete 9 old/duplicate icon files (~13MB removed)
- Add nginx cache-control headers for icons and manifest
- Rename assets-cache to assets-cache-v2 to orphan stale SW cache
- Update all HTML, manifest, and component icon references

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-06 01:11:00 +00:00
co-authored by Claude Opus 4.6
parent dfb81c0348
commit 2818fe90fc
31 changed files with 90 additions and 96 deletions
+9 -11
View File
@@ -9,7 +9,7 @@ export default defineConfig({
vue(),
VitePWA({
registerType: 'autoUpdate',
includeAssets: ['assets/icon/favico-black.svg', 'assets/icon/pwa-192x192.png', 'assets/icon/pwa-512x512.png', 'assets/icon/apple-touch-icon-180x180.png', 'favicon.ico'],
includeAssets: ['assets/icon/favico-black-v2.svg', 'assets/icon/pwa-64x64-v2.png', 'assets/icon/pwa-192x192-v2.png', 'assets/icon/pwa-512x512-v2.png', 'assets/icon/maskable-icon-512x512-v2.png', 'assets/icon/apple-touch-icon-180x180-v2.png', 'favicon-v2.ico'],
manifest: {
name: 'Archipelago',
short_name: 'Archipelago',
@@ -25,15 +25,15 @@ export default defineConfig({
categories: ['productivity', 'utilities'],
prefer_related_applications: false,
icons: [
{ src: '/assets/icon/pwa-64x64.png', sizes: '64x64', type: 'image/png', purpose: 'any' },
{ src: '/assets/icon/pwa-192x192.png', sizes: '192x192', type: 'image/png', purpose: 'any' },
{ src: '/assets/icon/pwa-512x512.png', sizes: '512x512', type: 'image/png', purpose: 'any' },
{ src: '/assets/icon/maskable-icon-512x512.png', sizes: '512x512', type: 'image/png', purpose: 'maskable' }
{ src: '/assets/icon/pwa-64x64-v2.png', sizes: '64x64', type: 'image/png', purpose: 'any' },
{ src: '/assets/icon/pwa-192x192-v2.png', sizes: '192x192', type: 'image/png', purpose: 'any' },
{ src: '/assets/icon/pwa-512x512-v2.png', sizes: '512x512', type: 'image/png', purpose: 'any' },
{ src: '/assets/icon/maskable-icon-512x512-v2.png', sizes: '512x512', type: 'image/png', purpose: 'maskable' }
],
shortcuts: [
{ name: 'Dashboard', short_name: 'Dashboard', description: 'Open the dashboard', url: '/dashboard', icons: [{ src: '/assets/icon/pwa-192x192.png', sizes: '192x192' }] },
{ name: 'My Apps', short_name: 'Apps', description: 'Manage your apps', url: '/dashboard/apps', icons: [{ src: '/assets/icon/pwa-192x192.png', sizes: '192x192' }] },
{ name: 'App Store', short_name: 'Store', description: 'Browse and install apps', url: '/dashboard/marketplace', icons: [{ src: '/assets/icon/pwa-192x192.png', sizes: '192x192' }] }
{ name: 'Dashboard', short_name: 'Dashboard', description: 'Open the dashboard', url: '/dashboard', icons: [{ src: '/assets/icon/pwa-192x192-v2.png', sizes: '192x192' }] },
{ name: 'My Apps', short_name: 'Apps', description: 'Manage your apps', url: '/dashboard/apps', icons: [{ src: '/assets/icon/pwa-192x192-v2.png', sizes: '192x192' }] },
{ name: 'App Store', short_name: 'Store', description: 'Browse and install apps', url: '/dashboard/marketplace', icons: [{ src: '/assets/icon/pwa-192x192-v2.png', sizes: '192x192' }] }
]
},
workbox: {
@@ -44,8 +44,6 @@ export default defineConfig({
'**/*-1.47mb.mp4',
'**/bg-*.mp4', // Exclude large background videos from precache
'**/video-intro.mp4', // Exclude video-intro.mp4 from precache (7MB, cached at runtime)
'**/favico.svg', // Exclude large SVG (5.73MB) - use PNG instead
'**/icon/favico.svg' // Exclude duplicate large SVG
],
maximumFileSizeToCacheInBytes: 5 * 1024 * 1024, // 5MB limit (increased from 2MB)
skipWaiting: false, // Wait for user to accept update
@@ -95,7 +93,7 @@ export default defineConfig({
urlPattern: /\/assets\/.*/i,
handler: 'CacheFirst',
options: {
cacheName: 'assets-cache',
cacheName: 'assets-cache-v2',
expiration: {
maxEntries: 100,
maxAgeSeconds: 60 * 60 * 24 * 30 // 30 days