From 3a3604881ecfe78889b576c0c19f47be6efba55f Mon Sep 17 00:00:00 2001 From: Nelson Pires Date: Sun, 8 Feb 2026 12:18:45 -0300 Subject: [PATCH] Update web app icons and manifest for PWA (#357) * chore: add PWA icons Add PWA icons in public assets at 192px and 512px Include maskable variants to improve home screen installation * feat: update webmanifest icons for PWA Add new PWA icons and maskable variants to the manifest Include Apple touch icons and standard favicons for broader support Migrate to maskable icons for better home screen availability * feat: update PWA icons and manifest assets Update web icons to include new PWA icons (192x192, 512x512) and maskable variants Add Apple touch icons and standard favicons to manifest for better platform support * fix(web): redirect manifest.webmanifest to site.webmanifest Add 301 redirect for /manifest.webmanifest to /site.webmanifest Ensure SPA fallback serves index.html for non-asset routes --- packages/web/index.html | 44 +++++------------------ packages/web/public/pwa-192.png | Bin 0 -> 4440 bytes packages/web/public/pwa-512.png | Bin 0 -> 15773 bytes packages/web/public/pwa-maskable-192.png | Bin 0 -> 4037 bytes packages/web/public/pwa-maskable-512.png | Bin 0 -> 14526 bytes packages/web/public/site.webmanifest | 42 +++++----------------- packages/web/server/index.js | 5 +++ 7 files changed, 22 insertions(+), 69 deletions(-) create mode 100644 packages/web/public/pwa-192.png create mode 100644 packages/web/public/pwa-512.png create mode 100644 packages/web/public/pwa-maskable-192.png create mode 100644 packages/web/public/pwa-maskable-512.png diff --git a/packages/web/index.html b/packages/web/index.html index 1b5e0ec1..eeadb24c 100644 --- a/packages/web/index.html +++ b/packages/web/index.html @@ -34,41 +34,15 @@ "theme_color": "#edb449", "orientation": "portrait-primary", "icons": [ - { - "src": baseUrl + "/logo-dark-512x512.svg", - "sizes": "512x512", - "type": "image/svg+xml", - "purpose": "any" - }, - { - "src": baseUrl + "/logo-dark-192x192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "any" - }, - { - "src": baseUrl + "/apple-touch-icon-180x180.png", - "sizes": "180x180", - "type": "image/png", - "purpose": "any" - }, - { - "src": baseUrl + "/apple-touch-icon-152x152.png", - "sizes": "152x152", - "type": "image/png", - "purpose": "any" - }, - { - "src": baseUrl + "/favicon-32.png", - "sizes": "32x32", - "type": "image/png" - }, - { - "src": baseUrl + "/favicon-16.png", - "sizes": "16x16", - "type": "image/png" - } - ], + { "src": baseUrl + "/pwa-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" }, + { "src": baseUrl + "/pwa-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" }, + { "src": baseUrl + "/pwa-maskable-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any maskable" }, + { "src": baseUrl + "/pwa-maskable-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any maskable" }, + { "src": baseUrl + "/apple-touch-icon-180x180.png", "sizes": "180x180", "type": "image/png", "purpose": "any" }, + { "src": baseUrl + "/apple-touch-icon-152x152.png", "sizes": "152x152", "type": "image/png", "purpose": "any" }, + { "src": baseUrl + "/favicon-32.png", "sizes": "32x32", "type": "image/png" }, + { "src": baseUrl + "/favicon-16.png", "sizes": "16x16", "type": "image/png" } + ], "categories": ["developer", "tools", "productivity"], "lang": "en" }; diff --git a/packages/web/public/pwa-192.png b/packages/web/public/pwa-192.png new file mode 100644 index 0000000000000000000000000000000000000000..637d5959ceeaba8486b7fcf732ce5acc3fa89dc0 GIT binary patch literal 4440 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 literal 0 HcmV?d00001 diff --git a/packages/web/public/pwa-512.png b/packages/web/public/pwa-512.png new file mode 100644 index 0000000000000000000000000000000000000000..379874784e4c868a91d3b5c658d93f7a2518b2fc GIT binary patch literal 15773 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 uG;#$XGsB36Mo-qiEl8-&a+& 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 O3{IPz$~)l@`QHG+JwWRK literal 0 HcmV?d00001 diff --git a/packages/web/public/site.webmanifest b/packages/web/public/site.webmanifest index fd991fdd..cdf312cf 100644 --- a/packages/web/public/site.webmanifest +++ b/packages/web/public/site.webmanifest @@ -8,40 +8,14 @@ "theme_color": "#edb449", "orientation": "portrait-primary", "icons": [ - { - "src": "/logo-dark-512x512.svg", - "sizes": "512x512", - "type": "image/svg+xml", - "purpose": "any" - }, - { - "src": "/logo-dark-192x192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "any" - }, - { - "src": "/apple-touch-icon-180x180.png", - "sizes": "180x180", - "type": "image/png", - "purpose": "any" - }, - { - "src": "/apple-touch-icon-152x152.png", - "sizes": "152x152", - "type": "image/png", - "purpose": "any" - }, - { - "src": "/favicon-32.png", - "sizes": "32x32", - "type": "image/png" - }, - { - "src": "/favicon-16.png", - "sizes": "16x16", - "type": "image/png" - } + { "src": "/pwa-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" }, + { "src": "/pwa-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" }, + { "src": "/pwa-maskable-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any maskable" }, + { "src": "/pwa-maskable-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any maskable" }, + { "src": "/apple-touch-icon-180x180.png", "sizes": "180x180", "type": "image/png", "purpose": "any" }, + { "src": "/apple-touch-icon-152x152.png", "sizes": "152x152", "type": "image/png", "purpose": "any" }, + { "src": "/favicon-32.png", "sizes": "32x32", "type": "image/png" }, + { "src": "/favicon-16.png", "sizes": "16x16", "type": "image/png" } ], "categories": ["developer", "tools", "productivity"], "lang": "en" diff --git a/packages/web/server/index.js b/packages/web/server/index.js index e787155d..333bf140 100644 --- a/packages/web/server/index.js +++ b/packages/web/server/index.js @@ -9229,6 +9229,11 @@ Context: }, })); + // Alias for PWA manifest (.webmanifest redirect → /site.webmanifest) + app.get('/manifest.webmanifest', (req, res) => { + res.redirect(301, '/site.webmanifest'); + }); + app.get(/^(?!\/api|.*\.(js|css|svg|png|jpg|jpeg|gif|ico|woff|woff2|ttf|eot|map)).*$/, (req, res) => { res.sendFile(path.join(distPath, 'index.html')); });