# PWA Implementation Guide ## Overview The Port Nimara Portal has been implemented as a Progressive Web App (PWA) to provide users with a native app-like experience on mobile devices. ## Features Implemented ### 1. PWA Configuration - **App Name**: Port Nimara Portal - **Short Name**: Port Nimara - **Theme Color**: #387bca (brand primary color) - **Background Color**: #ffffff - **Display Mode**: standalone - **Start URL**: / - **Icons**: Multiple sizes from 72x72 to 512x512 pixels ### 2. Install Banner - **Location**: Login page, below the login form - **Behavior**: - Only shows on mobile devices - Hidden if app is already installed (standalone mode) - Shows only once (dismissal stored in localStorage) - Animated slide-in with 1-second delay ### 3. Installation Flow - **Android**: Direct browser install prompt - **iOS**: Step-by-step instructions modal - **Other browsers**: Fallback instructions ### 4. Offline Support - **Service Worker**: Auto-updating with Workbox - **Caching**: Network-first for API calls, cache-first for assets - **Navigation Fallback**: Routes to home page when offline ## Files Added/Modified ### New Files - `components/PWAInstallBanner.vue` - Install banner component - `composables/usePWA.ts` - PWA functionality composable - `plugins/pwa.client.ts` - PWA initialization plugin - `docs/pwa-implementation.md` - This documentation ### Modified Files - `nuxt.config.ts` - Added PWA configuration - `pages/login.vue` - Added install banner component ## Configuration Details ### PWA Module Settings ```typescript pwa: { registerType: 'autoUpdate', manifest: { name: 'Port Nimara Portal', short_name: 'Port Nimara', description: 'Port Nimara Client Portal - Manage your berth interests and expressions of interest', theme_color: '#387bca', background_color: '#ffffff', display: 'standalone', orientation: 'portrait', start_url: '/', scope: '/', icons: [/* 8 icon sizes */] }, workbox: { // Caching strategies } } ``` ### Icon Requirements The following icon sizes are configured: - 72x72, 96x96, 128x128, 144x144 (Android) - 152x152, 192x192 (iOS, Android) - 384x384, 512x512 (Splash screens, large displays) All icons are located in `/public/icons/` and based on the circular Port Nimara logo. ### Browser Support - **Chrome/Edge (Android)**: Full PWA support with install prompt - **Safari (iOS)**: Manual installation via "Add to Home Screen" - **Firefox**: Basic PWA support - **Other browsers**: Graceful degradation with instructions ## Usage Instructions ### For Users 1. Visit the login page on a mobile device 2. If eligible, an install banner will appear below the login form 3. Tap "Install App" to begin installation 4. Follow platform-specific instructions if needed ### For Developers The PWA functionality is automatically initialized. Use the `usePWA()` composable to access PWA state: ```typescript const { isInstalled, canInstall, install, isMobile, isIOS } = usePWA(); ``` ## Testing - Test on actual mobile devices for best results - Use Chrome DevTools > Application > Manifest to verify configuration - Check Service Worker registration in DevTools > Application > Service Workers - Test offline functionality by disabling network ## Deployment Notes - Ensure HTTPS is enabled (required for PWA) - Icons must be accessible via direct URLs - Service worker will be auto-generated and registered - Manifest will be auto-generated from nuxt.config.ts settings ## Future Enhancements - Push notifications - Background sync - App shortcuts - Share target functionality - Install banner in dashboard for non-mobile users