fix: improve PWA manifest and SW cache for Android standalone mode

- Add id field and display_override to manifest.json for reliable
  Chrome Android PWA recognition
- Serve manifest.json with application/manifest+json MIME type
- Add /i18n.js and locale files to SW app shell cache (were missing)
- Bump SW cache version to v21

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ulas
2026-04-01 09:07:57 +02:00
parent dd940ab05d
commit cd9f26911b
3 changed files with 12 additions and 3 deletions
+2
View File
@@ -2,9 +2,11 @@
"name": "Oikos Familienplaner", "name": "Oikos Familienplaner",
"short_name": "Oikos", "short_name": "Oikos",
"description": "Selbstgehosteter Familienplaner", "description": "Selbstgehosteter Familienplaner",
"id": "/",
"start_url": "/", "start_url": "/",
"scope": "/", "scope": "/",
"display": "standalone", "display": "standalone",
"display_override": ["standalone", "minimal-ui"],
"orientation": "portrait-primary", "orientation": "portrait-primary",
"theme_color": "#007AFF", "theme_color": "#007AFF",
"background_color": "#F5F5F7", "background_color": "#F5F5F7",
+6 -3
View File
@@ -12,9 +12,9 @@
* API: Immer Netzwerk (kein Caching von Nutzerdaten) * API: Immer Netzwerk (kein Caching von Nutzerdaten)
*/ */
const SHELL_CACHE = 'oikos-shell-v20'; const SHELL_CACHE = 'oikos-shell-v21';
const PAGES_CACHE = 'oikos-pages-v20'; const PAGES_CACHE = 'oikos-pages-v21';
const ASSETS_CACHE = 'oikos-assets-v20'; const ASSETS_CACHE = 'oikos-assets-v21';
const ALL_CACHES = [SHELL_CACHE, PAGES_CACHE, ASSETS_CACHE]; const ALL_CACHES = [SHELL_CACHE, PAGES_CACHE, ASSETS_CACHE];
// App-Shell: sofort benötigt für ersten Render // App-Shell: sofort benötigt für ersten Render
@@ -23,7 +23,10 @@ const APP_SHELL = [
'/index.html', '/index.html',
'/api.js', '/api.js',
'/router.js', '/router.js',
'/i18n.js',
'/rrule-ui.js', '/rrule-ui.js',
'/locales/de.json',
'/locales/en.json',
'/sw-register.js', '/sw-register.js',
'/lucide.min.js', '/lucide.min.js',
'/styles/tokens.css', '/styles/tokens.css',
+4
View File
@@ -112,6 +112,10 @@ app.use(express.static(path.join(__dirname, '..', 'public'), {
// HTML, JS, CSS, JSON, manifest, sw — immer revalidieren // HTML, JS, CSS, JSON, manifest, sw — immer revalidieren
res.setHeader('Cache-Control', 'no-cache, must-revalidate'); 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');
}
}, },
})); }));