diff --git a/public/manifest.json b/public/manifest.json index b3006bc..48b08d8 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -2,9 +2,11 @@ "name": "Oikos Familienplaner", "short_name": "Oikos", "description": "Selbstgehosteter Familienplaner", + "id": "/", "start_url": "/", "scope": "/", "display": "standalone", + "display_override": ["standalone", "minimal-ui"], "orientation": "portrait-primary", "theme_color": "#007AFF", "background_color": "#F5F5F7", diff --git a/public/sw.js b/public/sw.js index fcce436..8efa454 100644 --- a/public/sw.js +++ b/public/sw.js @@ -12,9 +12,9 @@ * API: Immer Netzwerk (kein Caching von Nutzerdaten) */ -const SHELL_CACHE = 'oikos-shell-v20'; -const PAGES_CACHE = 'oikos-pages-v20'; -const ASSETS_CACHE = 'oikos-assets-v20'; +const SHELL_CACHE = 'oikos-shell-v21'; +const PAGES_CACHE = 'oikos-pages-v21'; +const ASSETS_CACHE = 'oikos-assets-v21'; const ALL_CACHES = [SHELL_CACHE, PAGES_CACHE, ASSETS_CACHE]; // App-Shell: sofort benötigt für ersten Render @@ -23,7 +23,10 @@ const APP_SHELL = [ '/index.html', '/api.js', '/router.js', + '/i18n.js', '/rrule-ui.js', + '/locales/de.json', + '/locales/en.json', '/sw-register.js', '/lucide.min.js', '/styles/tokens.css', diff --git a/server/index.js b/server/index.js index 57b7356..eae7b25 100644 --- a/server/index.js +++ b/server/index.js @@ -112,6 +112,10 @@ app.use(express.static(path.join(__dirname, '..', 'public'), { // HTML, JS, CSS, JSON, manifest, sw — immer revalidieren res.setHeader('Cache-Control', 'no-cache, must-revalidate'); } + // manifest.json: korrekter MIME-Type für PWA-Erkennung durch Chrome/Android + if (filePath.endsWith('manifest.json')) { + res.setHeader('Content-Type', 'application/manifest+json; charset=utf-8'); + } }, }));