Progressive Web App (PWA)¶
Speakr is a Progressive Web App that can be installed on your device for a more native-app like experience and wake lock support to prevent screen sleep during recording.
What is a PWA?¶
A Progressive Web App combines the best of web and mobile apps:
- Installable - Add to your home screen like a native app
- Fast loading - Cached assets load instantly
- Wake lock - Prevents screen from auto-sleeping during recording
- No app store - Install directly from your browser
- Auto-updates - Always get the latest version automatically
Installing Speakr as a PWA¶
On Android (Chrome/Edge)¶
- Open Speakr in Chrome or Edge browser
- Look for the "Add to Home Screen" prompt at the bottom of the screen
- Tap "Add" or "Install"
- Alternatively:
- Tap the three-dot menu (⋮) in the browser
- Select "Add to Home screen" or "Install app"
-
Follow the prompts
-
Launch the app from your home screen
Banner Prompt
If you don't see the install prompt, you may need to visit Speakr a few times first. The browser will offer installation after detecting regular usage.
On iOS (Safari)¶
- Open Speakr in Safari
- Tap the Share button (□↑) at the bottom of the screen
- Scroll down and tap "Add to Home Screen"
- Edit the name if desired and tap "Add"
- Launch the app from your home screen
iOS Limitations
iOS has some restrictions on PWAs: - Wake Lock API requires iOS 16.4+ (Safari 16.4+) - Background execution is more limited than Android - Some features work better on iOS 17+
On Desktop (Chrome/Edge/Brave)¶
- Open Speakr in your browser
- Look for the install icon (⊕) in the address bar
- Click it and select "Install"
- Alternatively:
- Click the three-dot menu
-
Select "Install Speakr" or "Add to applications"
-
Launch from your applications menu or desktop shortcut
PWA Features¶
Offline Support¶
Once installed, Speakr caches essential files for offline use:
- Application interface and UI
- CSS stylesheets and fonts
- JavaScript application code
- Icons and images
Note: API calls and file uploads require internet connection.
Offline Capabilities
While you can access the app offline, transcription and AI features require an internet connection to your configured API endpoints.
Mobile Recording Features¶
Wake Lock API¶
Prevents your device screen from auto-sleeping while app is visible:
- Automatic activation - Enabled when you start recording
- Keeps screen on - Prevents screen from turning off while app is in foreground
- Auto-recovery - Re-acquires if released during recording
- Battery consideration - Only active during recording sessions
Persistent Notifications¶
Shows recording status in your notification tray (mobile only):
- Status indicator - Visual reminder that recording is active
- One-tap return - Tap notification to return to the app
- Silent - No sound or vibration
Page Visibility Detection¶
Monitors when the app goes to background:
- Detects minimization - Knows when app is backgrounded
- Smart recovery - Re-activates wake lock when returning to app
- State awareness - Tracks recording state across visibility changes
How Background Recording Works¶
Critical Limitation: Keep App Visible on Mobile
Mobile browsers (Chrome, Safari, etc.) suspend audio recording when the app is minimized or the screen is locked. This is a fundamental browser limitation that cannot be overcome with PWA features.
What this means: - Recording will pause if you minimize the window - Recording will pause if you lock your screen - Recording will pause if you switch to another app - Recording continues if you keep Speakr visible in foreground - Wake lock prevents screen from auto-sleeping while Speakr is visible
For long meetings on mobile, you have two options: 1. Keep Speakr visible - Don't minimize, lock screen, or switch apps 2. Use native recorder - Use your phone's built-in voice recorder app, then upload the file to Speakr afterward
Why this happens:
Mobile browsers intentionally suspend web pages in the background to save battery. This affects: - JavaScript execution (timers, code) - MediaRecorder API (audio capture) - Audio context (audio processing)
Native apps don't have this limitation because they use platform-specific APIs that run outside the browser.
Desktop browsers work differently: - Recording continues when window is minimized - Can switch to other apps - Only stops when browser is completely closed
Starting a recording on mobile (with limitations):
- Start recording (microphone or system audio)
- Wake lock prevents screen from auto-sleeping
- Notification appears in notification tray
- Keep Speakr visible in the foreground
- Do not minimize, lock screen, or switch apps
If you accidentally minimize:
- Recording audio will pause (silence)
- Timer continues counting
- When you return to app, recording resumes
- Silent gap will be in the final recording
Permissions¶
Required Permissions¶
Microphone Access¶
- When: Starting a microphone recording
- Why: Capture audio from your device's microphone
- Scope: Only active during recording
System Audio Access (Desktop)¶
- When: Recording system audio or both mic + system
- Why: Capture audio from browser tabs, applications
- Scope: Only active during recording
Recommended Permissions¶
Notification Permission (Mobile)¶
- When: First recording on mobile device
- Why: Show visual reminder that recording is active
- Impact: Provides quick access to return to app
- Scope: Only shown during active recordings
Granting Permissions
If you accidentally deny a permission, you can reset it in your browser/device settings:
- Android Chrome: Settings → Site settings → Speakr URL → Permissions
- iOS Safari: Settings → Safari → Speakr URL → Permissions
- Desktop: Click the lock icon (🔒) in the address bar → Permissions
Service Worker¶
Speakr uses a service worker to provide PWA capabilities:
What it Does¶
- Caches static assets - For offline access and faster loading
- Manages updates - Automatically updates cached content
- Handles notifications - Manages persistent recording notifications
- Background sync - Foundation for future features like upload retry
Viewing Service Worker Status¶
Chrome DevTools:
- Press F12 to open DevTools
- Go to Application tab
- Select Service Workers in the sidebar
- See registration status and version
Console Logs:
The service worker logs its activity to the browser console:
[Service Worker] Installing...
[Service Worker] Caching static assets
[Service Worker] Activating...
[Service Worker] Script loaded
Updating Service Worker¶
The service worker automatically updates:
- Check interval: Every 60 seconds while app is open
- Update process: Downloads new version in background
- Activation: Takes effect on next page reload
To force an update:
- Close all Speakr tabs/windows
- Reopen Speakr
- New service worker activates automatically
Browser Compatibility¶
Mobile Browsers¶
| Feature | Chrome Android | Safari iOS | Samsung Internet |
|---|---|---|---|
| PWA Install | ✅ Android 5+ | ✅ iOS 11.3+ | ✅ 4.0+ |
| Service Worker | ✅ Chrome 40+ | ✅ iOS 11.3+ | ✅ 4.0+ |
| Wake Lock | ✅ Chrome 84+ | ✅ iOS 16.4+ | ✅ 13.0+ |
| Notifications | ✅ Chrome 42+ | ✅ iOS 16.4+ | ✅ 4.0+ |
| Page Visibility | ✅ All versions | ✅ All versions | ✅ All versions |
Desktop Browsers¶
| Feature | Chrome | Edge | Brave | Firefox | Safari |
|---|---|---|---|---|---|
| PWA Install | ✅ 73+ | ✅ 79+ | ✅ All | ⚠️ Limited | ⚠️ Limited |
| Service Worker | ✅ 40+ | ✅ 17+ | ✅ All | ✅ 44+ | ✅ 11.1+ |
| Wake Lock | ✅ 84+ | ✅ 84+ | ✅ All | ❌ | ✅ 16.4+ |
Firefox & Safari Desktop
Firefox and Safari have limited PWA install support on desktop but all core features work in the browser.
Troubleshooting¶
Recording Stops When Screen Locks¶
This is expected behavior on mobile browsers. Recording will pause when you minimize the app or lock the screen.
Solutions:
- Keep app visible - Don't minimize or lock screen during recording
- Wake lock prevents auto-sleep - Screen won't turn off automatically while recording
- Use native recorder - For long meetings, use your phone's built-in voice recorder
- Desktop works differently - Recording continues when minimized on desktop browsers
PWA Not Offered for Installation¶
Solutions:
- Visit the app multiple times - Browser may require several visits
- Check HTTPS - PWA requires secure connection (https://)
- Try different browser - Use Chrome/Edge for best support
- Clear browser cache - Force refresh of manifest
Service Worker Not Registering¶
Check console for errors:
Solutions:
- Verify HTTPS - Service workers require secure context
- Check browser support - Update to latest browser version
- Clear site data - Browser settings → Clear site data
- Hard reload - Ctrl+Shift+R (Windows) or Cmd+Shift+R (Mac)
Offline Features Not Working¶
Verify:
- Service worker is registered (check DevTools → Application)
- Assets are cached (check DevTools → Application → Cache Storage)
- You've visited the site at least once while online
Solutions:
- Reload the page while online
- Clear cache and reload
- Uninstall and reinstall PWA
Best Practices¶
For Mobile Recording¶
- Keep app visible - Don't minimize, lock screen, or switch apps
- Keep phone plugged in for long recordings
- Close unnecessary apps to free memory
- Avoid taking calls during recording (will pause)
- For long meetings - Consider using native recorder app instead
For Optimal Performance¶
- Install as PWA for better performance
- Keep browser updated for latest features
- Clear old recordings to free space
- Monitor storage in device settings
Privacy Considerations¶
- Microphone access - Only granted during recording
- Notifications - Only shown during recording (mobile)
- Cached data - Stored locally on your device
- Service worker - Can be unregistered in browser settings
Uninstalling the PWA¶
Android¶
- Long-press the app icon on home screen
- Select "App info" or drag to "Remove"
- Tap "Uninstall"
iOS¶
- Long-press the app icon
- Select "Remove App"
- Confirm "Delete App"
Desktop¶
- Open installed app
- Click three-dot menu
- Select "Uninstall Speakr"
Alternatively, remove from: - Chrome: chrome://apps → Right-click app → Remove - Edge: edge://apps → Click ⋮ on app → Uninstall
Have questions about PWA features? Check the FAQ or Troubleshooting Guide.