Labels: pwa, performance
Description
public/manifest.json defines a installable PWA (standalone, icons), but there is no service worker. src/utils/offline.js is not integrated with install/update UX.
Tasks
Add Vite PWA plugin or lightweight custom SW caching index.html + static assets (not Horizon responses by default).
Register SW from src/main.jsx; show update banner when new version available.
beforeinstallprompt handler for “Install app” in Settings.jsx.
Fill manifest.json screenshots for store listing.
Acceptance criteria
Lighthouse PWA checks pass (installable, SW registered).
App shell loads offline; clear banner when network required for account data.
Files
public/manifest.json, index.html
src/main.jsx, src/utils/offline.js
vite.config.js
src/components/dashboard/Settings.jsx
Labels: pwa, performance
Description
public/manifest.json defines a installable PWA (standalone, icons), but there is no service worker. src/utils/offline.js is not integrated with install/update UX.
Tasks
Add Vite PWA plugin or lightweight custom SW caching index.html + static assets (not Horizon responses by default).
Register SW from src/main.jsx; show update banner when new version available.
beforeinstallprompt handler for “Install app” in Settings.jsx.
Fill manifest.json screenshots for store listing.
Acceptance criteria
Lighthouse PWA checks pass (installable, SW registered).
App shell loads offline; clear banner when network required for account data.
Files
public/manifest.json, index.html
src/main.jsx, src/utils/offline.js
vite.config.js
src/components/dashboard/Settings.jsx