# PWA Setup Guide ## ✅ Implemented Features ### 1. Service Worker - **Caching Strategy**: Aggressive prefetch for app shell - **API Caching**: Freshness strategy with 1-hour cache (max 100 requests) - **Image Caching**: Performance strategy with 7-day cache (max 50 images) - **Configuration**: `ngsw-config.json` ### 2. Web App Manifests - **Dexar**: `public/manifest.webmanifest` (purple theme #a855f7) - **Novo**: `public/manifest.novo.webmanifest` (green theme #10b981) - **Features**: - Installable on mobile/desktop - Standalone display mode - 8 icon sizes (72px to 512px) - Russian language metadata ### 3. Offline Support - App shell loads instantly from cache - API responses cached for 1 hour - Product images cached for 7 days - Automatic background updates ## 🚀 Testing PWA Functionality ### Local Testing with Production Build ```bash # Build for production npm run build -- --configuration=production # Serve the production build npx http-server dist/dexarmarket -p 4200 -c-1 # For Novo brand npx http-server dist/novomarket -p 4201 -c-1 ``` ### Chrome DevTools Testing 1. Open `http://localhost:4200` 2. Open DevTools (F12) 3. Go to **Application** tab 4. Check: - **Service Workers**: Should show registered worker - **Cache Storage**: Should show `ngsw:/:db`, `ngsw:/:assets` - **Manifest**: Should show app details ### Install Prompt Testing 1. Open app in Chrome/Edge 2. Click the **install icon** in address bar (➕) 3. Confirm installation 4. App opens as standalone window 5. Check Start Menu/Home Screen for app icon ### Offline Testing 1. Open app while online 2. Navigate through pages (loads assets) 3. Open DevTools → Network → Toggle **Offline** 4. Refresh page - should still work! 5. Navigate to cached pages - should load instantly ## 📱 Mobile Testing ### Android Chrome 1. Open app URL 2. Chrome shows "Add to Home Screen" banner 3. Install and open - works like native app 4. Splash screen with your logo/colors ### iOS Safari 1. Open app URL 2. Tap Share → "Add to Home Screen" 3. Icon appears on home screen 4. Opens in full-screen mode ## 🔧 Configuration Details ### Service Worker Caching Strategy ```json { "app": { "installMode": "prefetch", // Download immediately "updateMode": "prefetch" // Auto-update in background }, "assets": { "installMode": "lazy", // Load on-demand "updateMode": "prefetch" }, "api-cache": { "strategy": "freshness", // Network first, fallback to cache "maxAge": "1h" // Keep for 1 hour }, "product-images": { "strategy": "performance", // Cache first, update in background "maxAge": "7d" // Keep for 7 days } } ``` ### Manifest Differences | Property | Dexar | Novo | |----------|-------|------| | Theme Color | #a855f7 (purple) | #10b981 (green) | | Name | Dexar Market | Novo Market | | Icons | Default Angular | Default Angular | | Background | White (#ffffff) | White (#ffffff) | ## 🎨 Custom Icons (Recommended) Replace the default Angular icons with brand-specific ones: ```bash public/icons/ ├── icon-72x72.png # Smallest (splash screen) ├── icon-96x96.png ├── icon-128x128.png ├── icon-144x144.png ├── icon-152x152.png # iOS home screen ├── icon-192x192.png # Android home screen ├── icon-384x384.png └── icon-512x512.png # Largest (splash, install prompt) ``` **Design Guidelines**: - Use solid background color (purple for Dexar, green for Novo) - Center white logo/icon - Keep design simple (shows at small sizes) - Export as PNG with transparency or solid background ## 🔄 Update Strategy ### How Updates Work 1. User visits app 2. Service worker checks for updates 3. New version downloads in background 4. User refreshes → gets updated version 5. Old cache automatically cleared ### Force Update (Development) ```bash # Clear all caches chrome://serviceworker-internals/ # Unregister worker chrome://settings/clearBrowserData # Clear cache # Or in code (add to app.config.ts) navigator.serviceWorker.getRegistrations().then(registrations => { registrations.forEach(reg => reg.unregister()); }); ``` ## 📊 Performance Benefits ### Before PWA - Initial load: ~2-3s (network dependent) - Subsequent loads: ~1-2s - Offline: ❌ Not available ### After PWA - Initial load: ~2-3s (first visit) - Subsequent loads: **~200-500ms** (cached) - Offline: ✅ **Fully functional** - Install: ✅ **Native app experience** ## 🐛 Troubleshooting ### Service Worker Not Registering - Check console for errors - Ensure HTTPS (or localhost) - Clear browser cache and reload ### Old Version Not Updating - Hard refresh: `Ctrl+Shift+R` (Windows) or `Cmd+Shift+R` (Mac) - Unregister worker in DevTools - Wait 24 hours (automatic update) ### Manifest Not Loading - Check `index.html` has `` - Verify manifest path is correct - Check manifest JSON is valid (no syntax errors) ### Icons Not Showing - Check icon paths in manifest - Ensure icons exist in `public/icons/` - Verify icon sizes match manifest ## 📚 Next Steps 1. **Custom Icons**: Create brand-specific icons for both themes 2. **Push Notifications**: Add user engagement (requires backend) 3. **Background Sync**: Queue offline orders, sync when online 4. **Analytics**: Track PWA installs, offline usage 5. **A2HS Prompt**: Show custom "Install App" banner ## 🔗 Resources - [PWA Checklist](https://web.dev/pwa-checklist/) - [Angular PWA Guide](https://angular.dev/ecosystem/service-workers) - [Manifest Generator](https://www.simicart.com/manifest-generator.html/) - [Icon Generator](https://realfavicongenerator.net/)