81 lines
2.9 KiB
Markdown
81 lines
2.9 KiB
Markdown
# PWA Release Concept (Phase 1 -> Phase 2)
|
|
|
|
## Goal
|
|
Ship a strong mobile-ready release quickly without splitting into separate app codebases too early.
|
|
|
|
## Phase 1: strongest possible web push path
|
|
|
|
### Core deliverables
|
|
- Installable manifest with stable identity:
|
|
- `id`, `name`, `short_name`, `start_url`, `scope`, `display: standalone`
|
|
- maskable icons
|
|
- shortcuts to core actions
|
|
- Service worker versioning and controlled lifecycle:
|
|
- version token tied to theming/cachebuster
|
|
- `install`, `activate`, `push`, `notificationclick`
|
|
- Notification readiness flow:
|
|
- explicit onboarding/readiness screen
|
|
- notification permission state
|
|
- service worker registration state
|
|
- push subscription state
|
|
- Notification UX/ops controls:
|
|
- `Test notification` button
|
|
- `Last successful push received at` status
|
|
- subscription refresh/re-register action
|
|
|
|
### Delivery behavior
|
|
- Deep links should target exact app/resource URLs.
|
|
- Use notification actions where practical in service worker payload handling.
|
|
- Keep fallback email for important notifications.
|
|
- Keep optional SMS for critical-only events (later connector/backend expansion).
|
|
|
|
### Health + telemetry expectations
|
|
- Track per-device registration state in backend.
|
|
- Record subscription freshness and stale endpoints.
|
|
- Expose in-app health checks before users rely on Talk alerts.
|
|
|
|
## Phase 2: wrap, do not rewrite
|
|
|
|
When web reliability becomes the limiting factor:
|
|
- Wrap existing web app with Capacitor first.
|
|
- Defer React Native/full native split unless native-heavy features become mandatory.
|
|
|
|
### Why this path
|
|
- Faster route to APNs/FCM native push channels.
|
|
- Better background behavior and app-store presence.
|
|
- Lower risk than parallel app rewrites.
|
|
|
|
## Current implementation baseline
|
|
|
|
Implemented now in `custom_pwa`:
|
|
- Expanded install page into readiness center:
|
|
- install prompt state
|
|
- standalone state
|
|
- notification permission state
|
|
- service worker registration state
|
|
- push subscription state
|
|
- last notification timestamp
|
|
- Added test notification action.
|
|
- Added service worker refresh/re-register action.
|
|
- Added service worker endpoint with versioned script.
|
|
- Added manifest enrichments (description, display override, shortcuts).
|
|
- Added backend per-device status scaffolding:
|
|
- device registration API
|
|
- device status API
|
|
- push-received timestamp API
|
|
- test-notification backend status API
|
|
- VAPID-backed browser push delivery test
|
|
- stale endpoint marking for failed push delivery
|
|
|
|
## Next immediate tasks
|
|
|
|
1. Add deeper push delivery result reporting for operational dashboards.
|
|
2. Add readiness deep-link checks for Talk preflight path.
|
|
3. Add optional email fallback adapter trigger for critical notification classes.
|
|
|
|
## Current config keys (custom_pwa app values)
|
|
|
|
- `vapid_subject` (example: `mailto:alerts@your-domain.tld`)
|
|
- `vapid_public_key` (base64url VAPID public key)
|
|
- `vapid_private_key` (PEM EC private key or base64url 32-byte private key)
|