Files
marketplaces/docs/PWA_SETUP.md
2026-01-18 18:57:06 +04:00

5.6 KiB
Raw Blame History

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

# 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

{
  "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)

Replace the default Angular icons with brand-specific ones:

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)

# 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 <link rel="manifest">
  • 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