diff --git a/frontend/package.json b/frontend/package.json index 6b5c2a0..06caca8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -19,6 +19,7 @@ "@types/react-dom": "^18.3.1", "@vitejs/plugin-react": "^4.3.4", "typescript": "^5.7.2", - "vite": "^6.0.5" + "vite": "^6.0.5", + "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 0000000..649dc94 Binary files /dev/null and b/frontend/public/icons/icon-192.png differ diff --git a/frontend/public/icons/icon-512.png b/frontend/public/icons/icon-512.png new file mode 100644 index 0000000..b597278 Binary files /dev/null and b/frontend/public/icons/icon-512.png differ diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 8a2e268..dc9bd80 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({ base: '/plant/', - plugins: [react()], + plugins: [ + react(), + VitePWA({ + registerType: 'autoUpdate', + manifest: { + name: 'Plant Room', + short_name: 'Plant Room', + start_url: '/plant/', + scope: '/plant/', + display: 'standalone', + theme_color: '#0e7490', + background_color: '#0e7490', + icons: [ + { src: '/plant/icons/icon-192.png', sizes: '192x192', type: 'image/png' }, + { src: '/plant/icons/icon-512.png', sizes: '512x512', type: 'image/png' }, + ], + }, + workbox: { + navigateFallback: '/plant/index.html', + navigateFallbackDenylist: [/\/api\//], + globPatterns: ['**/*.{js,css,html,ico,png,svg}'], + }, + }), + ], })