port-nimara-client-portal/docs/pwa-implementation.md

118 lines
3.6 KiB
Markdown

# 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