From 9b8b3829252f0905db574f94550201a1f7c45e45 Mon Sep 17 00:00:00 2001 From: maikrolf <40924921+maikrolf@users.noreply.github.com> Date: Thu, 2 Jul 2026 00:59:44 +0200 Subject: [PATCH] fix: PWA icons, SW method guard, start script --- public/icon-192.png | Bin 0 -> 3034 bytes public/icon-512.png | Bin 0 -> 11527 bytes public/manifest.json | 12 ++++++------ public/sw.js | 5 +++++ start-pm2.sh | 4 +++- 5 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 public/icon-192.png create mode 100644 public/icon-512.png diff --git a/public/icon-192.png b/public/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..58b71b9022fb2f65cd68a2f042136a03622598ec GIT binary patch literal 3034 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 literal 0 HcmV?d00001 diff --git a/public/icon-512.png b/public/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..975906ed93477a7dae85ef47c20ed546b9a8077f GIT binary patch literal 11527 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 W`>dM0;Se(bJMH)UlKV3z_J07oGiOl% literal 0 HcmV?d00001 diff --git a/public/manifest.json b/public/manifest.json index 4beba6e..b532d3f 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -10,21 +10,21 @@ "categories": ["utilities", "productivity"], "icons": [ { - "src": "/icon-192.svg", + "src": "/icon-192.png", "sizes": "192x192", - "type": "image/svg+xml", + "type": "image/png", "purpose": "any maskable" }, { - "src": "/icon-512.svg", + "src": "/icon-512.png", "sizes": "512x512", - "type": "image/svg+xml", + "type": "image/png", "purpose": "any maskable" }, { - "src": "/icon-512.svg", + "src": "/icon-512.png", "sizes": "512x512", - "type": "image/svg+xml", + "type": "image/png", "purpose": "maskable" } ] diff --git a/public/sw.js b/public/sw.js index caff2c4..a22311f 100644 --- a/public/sw.js +++ b/public/sw.js @@ -74,6 +74,11 @@ self.addEventListener('fetch', (event) => { // Same-origin only if (url.origin !== self.location.origin) return; + // Only cache GET/HEAD — POST/PUT/DELETE/OPTIONS can't use Cache API + if (request.method !== 'GET' && request.method !== 'HEAD') { + return; // pass through, no caching + } + // 1. Static assets → cache-first if (isStaticAsset(url)) { event.respondWith(cacheFirst(request, STATIC_CACHE)); diff --git a/start-pm2.sh b/start-pm2.sh index 684553f..914c56a 100644 --- a/start-pm2.sh +++ b/start-pm2.sh @@ -8,4 +8,6 @@ npm install echo "=== npm run build ===" npm run build echo "=== next start port ${PORT:=3005} ===" -exec npx next start --port "$PORT" +# Consume any extra args PM2 passes (e.g. --port=3005) +shift "$(($# < 1 ? 0 : 1))" 2>/dev/null || true +exec npx next start --port "$PORT" "$@"