forked from jsnbuchanan/crowd-funder-for-time-pwa
- Create logical sub-folder classification for all documentation - Organize 91 migration files into component-specific folders - Separate user guides, build system, migration, and development docs - Maintain maximum 7 items per folder for easy navigation - Add comprehensive README and reorganization summary - Ensure all changes tracked in git with proper versioning Structure: - user-guides/ (3 items): user-facing documentation - build-system/ (3 items): core, platforms, automation - migration/ (6 items): assessments, testing, templates - development/ (4 items): tools and standards - architecture/, testing/, examples/ (ready for future docs) Total: 24 folders created, all within 7-item limits
289 lines
9.2 KiB
Markdown
289 lines
9.2 KiB
Markdown
# PWA Build Analysis - Web Environments
|
|
|
|
**Date**: July 15, 2025
|
|
**Author**: Matthew Raymer
|
|
**Scope**: Web builds across dev, test, and prod environments
|
|
|
|
## Executive Summary
|
|
|
|
The TimeSafari application has comprehensive PWA (Progressive Web App) support configured across all web build environments. **PWA functionality is now always enabled for web platforms**, removing the previous environment-specific toggle mechanism. The PWA features are properly integrated and provide consistent functionality across all web builds.
|
|
|
|
## PWA Configuration Overview
|
|
|
|
### Core PWA Setup
|
|
- **Plugin**: `vite-plugin-pwa` with `VitePWA` configuration
|
|
- **Service Worker**: Custom service worker with Workbox integration
|
|
- **Manifest**: Dynamic PWA manifest with environment-specific settings
|
|
- **Registration**: Auto-update registration type
|
|
- **Status**: ✅ **Always enabled for web platforms**
|
|
|
|
### Environment-Specific PWA Status
|
|
|
|
| Environment | PWA Status | Dev Options | Service Worker | Manifest | Install Prompt |
|
|
|-------------|------------|-------------|----------------|----------|----------------|
|
|
| **Development** | ✅ Always Enabled | ✅ `enabled: true` | ✅ Active | ✅ Generated | ✅ Available |
|
|
| **Test** | ✅ Always Enabled | ✅ `enabled: true` | ✅ Active | ✅ Generated | ✅ Available |
|
|
| **Production** | ✅ Always Enabled | ✅ `enabled: true` | ✅ Active | ✅ Generated | ✅ Available |
|
|
|
|
## Detailed Environment Analysis
|
|
|
|
### Development Environment (`.env.development`)
|
|
|
|
**Configuration**:
|
|
```bash
|
|
VITE_DEFAULT_ENDORSER_API_SERVER=http://127.0.0.1:3000
|
|
```
|
|
|
|
**PWA Features**:
|
|
- ✅ **Full PWA Support**: Always enabled for development testing
|
|
- ✅ **Service Worker**: Active with development optimizations
|
|
- ✅ **Manifest**: Generated with development settings
|
|
- ✅ **Install Prompt**: Available for testing PWA installation
|
|
- ✅ **Dev Options**: `enabled: true` for consistent testing
|
|
|
|
**Build Command**:
|
|
```bash
|
|
npm run build:web:dev
|
|
# or
|
|
./scripts/build-web.sh --dev
|
|
```
|
|
|
|
### Test Environment (`.env.test`)
|
|
|
|
**Configuration**:
|
|
```bash
|
|
VITE_APP_SERVER=https://test.timesafari.app
|
|
VITE_DEFAULT_ENDORSER_API_SERVER=https://test-api.endorser.ch
|
|
```
|
|
|
|
**PWA Features**:
|
|
- ✅ **Full PWA Support**: Always enabled for test environment
|
|
- ✅ **Service Worker**: Active with test optimizations
|
|
- ✅ **Manifest**: Generated and fully utilized
|
|
- ✅ **Install Prompt**: Available for test installations
|
|
- ✅ **Dev Options**: Enabled for debugging
|
|
|
|
**Build Command**:
|
|
```bash
|
|
npm run build:web:test
|
|
# or
|
|
./scripts/build-web.sh --test
|
|
```
|
|
|
|
### Production Environment (`.env.production`)
|
|
|
|
**Configuration**:
|
|
```bash
|
|
VITE_APP_SERVER=https://timesafari.app
|
|
VITE_DEFAULT_ENDORSER_API_SERVER=https://api.endorser.ch
|
|
```
|
|
|
|
**PWA Features**:
|
|
- ✅ **Full PWA Support**: Always enabled for production users
|
|
- ✅ **Service Worker**: Active with production optimizations
|
|
- ✅ **Manifest**: Generated with production settings
|
|
- ✅ **Install Prompt**: Available for user installations
|
|
- ✅ **Dev Options**: Enabled for production debugging
|
|
|
|
**Build Command**:
|
|
```bash
|
|
npm run build:web:prod
|
|
# or
|
|
./scripts/build-web.sh --prod
|
|
```
|
|
|
|
## Technical Implementation
|
|
|
|
### Vite Configuration (`vite.config.web.mts`)
|
|
|
|
```typescript
|
|
VitePWA({
|
|
registerType: 'autoUpdate',
|
|
manifest: appConfig.pwaConfig?.manifest,
|
|
// Enable PWA in all web environments for consistent testing
|
|
devOptions: {
|
|
enabled: true, // ✅ Enable in all environments
|
|
type: 'module'
|
|
},
|
|
workbox: {
|
|
cleanupOutdatedCaches: true,
|
|
skipWaiting: true,
|
|
clientsClaim: true,
|
|
sourcemap: mode !== 'production',
|
|
maximumFileSizeToCacheInBytes: 10 * 1024 * 1024, // 10MB
|
|
// Environment-specific caching strategies
|
|
runtimeCaching: mode === 'production' ? [
|
|
{
|
|
urlPattern: /^https:\/\/api\./,
|
|
handler: 'NetworkFirst',
|
|
options: {
|
|
cacheName: 'api-cache',
|
|
expiration: {
|
|
maxEntries: 100,
|
|
maxAgeSeconds: 60 * 60 * 24 // 24 hours
|
|
}
|
|
}
|
|
}
|
|
] : []
|
|
}
|
|
})
|
|
```
|
|
|
|
### PWA Manifest Configuration (`vite.config.utils.mts`)
|
|
|
|
```typescript
|
|
manifest: {
|
|
name: appName,
|
|
short_name: appName,
|
|
theme_color: "#4a90e2",
|
|
background_color: "#ffffff",
|
|
icons: [
|
|
{
|
|
src: "./img/icons/android-chrome-192x192.png",
|
|
sizes: "192x192",
|
|
type: "image/png",
|
|
},
|
|
{
|
|
src: "./img/icons/android-chrome-512x512.png",
|
|
sizes: "512x512",
|
|
type: "image/png",
|
|
},
|
|
{
|
|
src: "./img/icons/android-chrome-maskable-192x192.png",
|
|
sizes: "192x192",
|
|
type: "image/png",
|
|
purpose: "maskable",
|
|
},
|
|
{
|
|
src: "./img/icons/android-chrome-maskable-512x512.png",
|
|
sizes: "512x512",
|
|
type: "image/png",
|
|
purpose: "maskable",
|
|
},
|
|
],
|
|
share_target: {
|
|
action: "/share-target",
|
|
method: "POST",
|
|
enctype: "multipart/form-data",
|
|
params: {
|
|
files: [
|
|
{
|
|
name: "photo",
|
|
accept: ["image/*"],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
## Build Process Analysis
|
|
|
|
### Environment Detection
|
|
The build system automatically detects the environment and applies appropriate PWA settings:
|
|
|
|
1. **Environment Files**: `.env.development`, `.env.test`, `.env.production`
|
|
2. **Vite Mode**: Passed via `--mode` parameter
|
|
3. **PWA Status**: Always enabled for web platforms (no longer environment-dependent)
|
|
4. **Dev Options**: Always enabled for consistent testing
|
|
|
|
### Build Script Integration
|
|
The `build-web.sh` script properly handles environment setup:
|
|
|
|
```bash
|
|
# Environment-specific configuration
|
|
case $BUILD_MODE in
|
|
"production")
|
|
export NODE_ENV="production"
|
|
;;
|
|
"test")
|
|
export NODE_ENV="test"
|
|
;;
|
|
"development"|*)
|
|
export NODE_ENV="development"
|
|
;;
|
|
esac
|
|
|
|
# Load environment-specific .env file
|
|
local env_file=".env.$BUILD_MODE"
|
|
if [ -f "$env_file" ]; then
|
|
load_env_file "$env_file"
|
|
fi
|
|
```
|
|
|
|
## PWA Features by Environment
|
|
|
|
### Development Features
|
|
- **Hot Reload**: Service worker updates automatically
|
|
- **Debug Mode**: Full PWA functionality for testing
|
|
- **Local Testing**: Install prompt available
|
|
- **Development Server**: PWA features work on localhost
|
|
|
|
### Test Features
|
|
- **Full PWA**: Complete PWA functionality for testing
|
|
- **Service Worker**: Active with test optimizations
|
|
- **Manifest**: Generated and fully utilized
|
|
- **Install Prompt**: Available for test installations
|
|
|
|
### Production Features
|
|
- **Full PWA**: Complete Progressive Web App functionality
|
|
- **Service Worker**: Production-optimized caching
|
|
- **Install Prompt**: Available for user installations
|
|
- **API Caching**: Network-first strategy for API calls
|
|
- **Offline Support**: Cached resources for offline use
|
|
|
|
## Recent Changes
|
|
|
|
### PWA Always Enabled
|
|
- **Removed**: `VITE_PWA_ENABLED` environment variable (no longer used)
|
|
- **Updated**: Service worker registration to always run
|
|
- **Simplified**: PWA component logic
|
|
- **Consistent**: PWA behavior across all environments
|
|
|
|
### Updated Files
|
|
- `vite.config.common.mts`: Removed PWA toggle logic
|
|
- `src/registerServiceWorker.ts`: Removed (VitePWA handles registration automatically)
|
|
- `src/main.web.ts`: Always import service worker
|
|
- `src/components/PWAInstallPrompt.vue`: Removed PWA check
|
|
- `src/services/platforms/WebPlatformService.ts`: Always return true for PWA
|
|
- `scripts/common.sh`: Removed VITE_PWA_ENABLED setting
|
|
- Environment files: Removed VITE_PWA_ENABLED variables
|
|
- Vite configs: Removed VITE_PWA_ENABLED and VITE_DISABLE_PWA assignments
|
|
|
|
## Recommendations
|
|
|
|
### Current State Assessment
|
|
✅ **Excellent**: PWA is properly configured and always enabled for web
|
|
✅ **Consistent**: Same PWA functionality across all environments
|
|
✅ **Simplified**: Removed unnecessary conditional logic
|
|
✅ **Reliable**: No environment-specific PWA toggles
|
|
|
|
### Potential Improvements
|
|
1. **Test Environment**: Consider PWA-specific test scenarios
|
|
2. **Caching Strategy**: Review API caching for all environments
|
|
3. **Manifest Icons**: Ensure all icon sizes are optimized
|
|
4. **Service Worker**: Add more sophisticated offline strategies
|
|
|
|
### Monitoring Considerations
|
|
1. **Installation Metrics**: Track PWA installations across environments
|
|
2. **Service Worker Performance**: Monitor cache hit rates
|
|
3. **Offline Usage**: Analyze offline functionality usage
|
|
4. **Update Success**: Monitor service worker update success rates
|
|
|
|
## Conclusion
|
|
|
|
The TimeSafari web build system now has **simplified and consistent PWA support** across all environments. PWA functionality is controlled entirely through build-time configuration:
|
|
|
|
- **Web platforms**: PWA is always enabled via `vite.config.web.mts` plugin inclusion
|
|
- **Native platforms**: PWA is disabled via build-time package exclusion in `vite.config.common.mts`
|
|
- **No environment variables**: Removed redundant `VITE_PWA_ENABLED` and `VITE_DISABLE_PWA` variables
|
|
|
|
This approach provides a more reliable and predictable user experience with cleaner configuration.
|
|
|
|
The implementation follows best practices with proper environment detection, consistent PWA enabling, and comprehensive service worker configuration. The PWA features are well-integrated into the build process and provide a solid foundation for progressive web app functionality across all web environments.
|
|
|
|
---
|
|
|
|
**Analysis Date**: July 15, 2025
|
|
**Status**: ✅ PWA always enabled for web platforms
|
|
**Next Review**: After major PWA feature updates |