diff --git a/.gitignore b/.gitignore index cb0219f78..5fcf51307 100644 --- a/.gitignore +++ b/.gitignore @@ -44,7 +44,7 @@ frontend/app/yarn-debug.log* frontend/app/yarn-error.log* frontend/app/pnpm-debug.log* frontend/app/lerna-debug.log* - +frontend/app/dev-dist frontend/app/node_modules frontend/app/.DS_Store frontend/app/dist diff --git a/frontend/app/index.html b/frontend/app/index.html index 04ef753d8..169fb3640 100644 --- a/frontend/app/index.html +++ b/frontend/app/index.html @@ -2,39 +2,37 @@ - - - - - Endurain + + + + + + + + + + + +
diff --git a/frontend/app/public/logo/apple-touch-icon.png b/frontend/app/public/logo/apple-touch-icon.png new file mode 100644 index 000000000..3e8c5c599 Binary files /dev/null and b/frontend/app/public/logo/apple-touch-icon.png differ diff --git a/frontend/app/public/logo/favicon-16x16.png b/frontend/app/public/logo/favicon-16x16.png new file mode 100644 index 000000000..ec0a7bfd4 Binary files /dev/null and b/frontend/app/public/logo/favicon-16x16.png differ diff --git a/frontend/app/public/logo/favicon-32x32.png b/frontend/app/public/logo/favicon-32x32.png new file mode 100644 index 000000000..1e1ab8b1f Binary files /dev/null and b/frontend/app/public/logo/favicon-32x32.png differ diff --git a/frontend/app/public/logo/favicon.ico b/frontend/app/public/logo/favicon.ico new file mode 100644 index 000000000..c3861dbc4 Binary files /dev/null and b/frontend/app/public/logo/favicon.ico differ diff --git a/frontend/app/public/logo/pwa-192x192.png b/frontend/app/public/logo/pwa-192x192.png new file mode 100644 index 000000000..bb5300e9e Binary files /dev/null and b/frontend/app/public/logo/pwa-192x192.png differ diff --git a/frontend/app/public/logo/pwa-512x512.png b/frontend/app/public/logo/pwa-512x512.png new file mode 100644 index 000000000..10a8e8e4e Binary files /dev/null and b/frontend/app/public/logo/pwa-512x512.png differ diff --git a/frontend/app/public/logo/pwa-maskable-192x192.png b/frontend/app/public/logo/pwa-maskable-192x192.png new file mode 100644 index 000000000..444ba3ad9 Binary files /dev/null and b/frontend/app/public/logo/pwa-maskable-192x192.png differ diff --git a/frontend/app/public/logo/pwa-maskable-512x512.png b/frontend/app/public/logo/pwa-maskable-512x512.png new file mode 100644 index 000000000..52dfc4b71 Binary files /dev/null and b/frontend/app/public/logo/pwa-maskable-512x512.png differ diff --git a/frontend/app/src/App.vue b/frontend/app/src/App.vue index f25d06662..267b65f78 100644 --- a/frontend/app/src/App.vue +++ b/frontend/app/src/App.vue @@ -36,9 +36,13 @@ import { \ No newline at end of file diff --git a/frontend/app/src/main.js b/frontend/app/src/main.js index 18790be92..2aa982f66 100644 --- a/frontend/app/src/main.js +++ b/frontend/app/src/main.js @@ -6,6 +6,10 @@ import { useAuthStore } from "./stores/authStore"; import { useThemeStore } from "./stores/themeStore"; import { useServerSettingsStore } from "./stores/serverSettingsStore"; +// PWA service worker registration (required for `injectRegister: 'auto'`) +import { registerSW } from 'virtual:pwa-register'; +registerSW(); + import "bootstrap/dist/css/bootstrap.min.css"; import "bootstrap/dist/js/bootstrap.bundle.min.js"; diff --git a/frontend/app/vite.config.js b/frontend/app/vite.config.js index 3bd16df51..76e9c2ebb 100644 --- a/frontend/app/vite.config.js +++ b/frontend/app/vite.config.js @@ -10,10 +10,76 @@ export default defineConfig({ plugins: [ vue(), VitePWA({ + registerType: 'autoUpdate', + strategies: 'generateSW', + injectRegister: 'auto', + minify: true, + manifest: { + name: 'Endurain', + short_name: 'Endurain', + description: 'A self-hosted fitness tracking service', + start_url: '/', + display: 'standalone', + background_color: '#212529', + theme_color: '#FFFFFF', + icons: [ + { + src: '/logo/pwa-192x192.png', + sizes: '192x192', + type: 'image/png', + purpose: 'any' + }, + { + src: '/logo/pwa-512x512.png', + sizes: '512x512', + type: 'image/png', + purpose: 'any' + }, + { + src: '/logo/logo-512.png', + sizes: '512x512', + type: 'image/png', + purpose: 'any' + }, + { + src: '/logo/pwa-maskable-192x192.png', + sizes: '192x192', + type: 'image/png', + purpose: 'maskable' + }, + { + src: '/logo/pwa-maskable-512x512.png', + sizes: '512x512', + type: 'image/png', + purpose: 'maskable' + } + ] + }, workbox: { maximumFileSizeToCacheInBytes: 5 * 1024 * 1024, + globPatterns: ['**/*.{js,css,html,ico,png,svg,woff2}'], + clientsClaim: true, + skipWaiting: true, + sourcemap: false, + navigateFallback: '/', + runtimeCaching: [ + { + urlPattern: ({ url }) => /^\/api\/v1(?:\/|$)/.test(url.pathname), + handler: 'NetworkFirst', + options: { + cacheName: 'api-cache', + expiration: { + maxEntries: 100, + maxAgeSeconds: 86400 + } + } + } + ] }, - registerType: 'autoUpdate' , + devOptions: { + enabled: true, + type: 'module', + } }), ], resolve: {