From 46441c3b3514b371f10ea1a9d504ba03b80e9198 Mon Sep 17 00:00:00 2001 From: jtricerolph Date: Wed, 29 Jul 2026 17:28:50 +0000 Subject: [PATCH] Fix dead manifest link and add proper PWA support index.html linked /kds/manifest.json, which never existed (404). Replaced with vite-plugin-pwa, matching the pattern used by every other app, plus icons that were entirely missing before. --- frontend/index.html | 1 - frontend/package.json | 3 ++- frontend/public/icons/icon-192.png | Bin 0 -> 1633 bytes frontend/public/icons/icon-512.png | Bin 0 -> 4231 bytes frontend/vite.config.ts | 26 +++++++++++++++++++++++++- 5 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 frontend/public/icons/icon-192.png create mode 100644 frontend/public/icons/icon-512.png diff --git a/frontend/index.html b/frontend/index.html index 6127376..472e9a9 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,6 @@ Kitchen Display -
diff --git a/frontend/package.json b/frontend/package.json index 997a2e2..950748d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -20,6 +20,7 @@ "@types/react-dom": "^18.2.18", "@vitejs/plugin-react": "^4.2.1", "typescript": "^5.3.3", - "vite": "^5.0.11" + "vite": "^5.0.11", + "vite-plugin-pwa": "^1.3.0" } } diff --git a/frontend/public/icons/icon-192.png b/frontend/public/icons/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..07b28311e746c35dd4cbdeaacd58e6bde6161f88 GIT binary patch literal 1633 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 WChY##DEPAgxLxo#Uwba>`@aB{RB3+z literal 0 HcmV?d00001 diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index f1224b7..1ef33fc 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -1,7 +1,31 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' +import { VitePWA } from 'vite-plugin-pwa' export default defineConfig({ - plugins: [react()], base: '/kds/', + plugins: [ + react(), + VitePWA({ + registerType: 'autoUpdate', + manifest: { + name: 'Kitchen Display', + short_name: 'Kitchen Display', + start_url: '/kds/', + scope: '/kds/', + display: 'standalone', + theme_color: '#0d9488', + background_color: '#0d9488', + icons: [ + { src: '/kds/icons/icon-192.png', sizes: '192x192', type: 'image/png' }, + { src: '/kds/icons/icon-512.png', sizes: '512x512', type: 'image/png' }, + ], + }, + workbox: { + navigateFallback: '/kds/index.html', + navigateFallbackDenylist: [/\/api\//], + globPatterns: ['**/*.{js,css,html,ico,png,svg}'], + }, + }), + ], })