# Push Notification Testing Findings (Jul 9, 2026)

## iOS Safari: PushManager not available in browser tab
- Safari on iPhone does NOT expose `PushManager` in normal browsing mode
- `FAIL: No PushManager` is expected
- User must install the PWA: Share icon -> Add to Home Screen
- Then open from home screen (fullscreen PWA mode)
- APNs endpoint: `https://web.push.apple.com/...`
- Chrome/Edge/Firefox on desktop work natively

## Common bugs fixed:
1. **Banner hidden**: `display:none` in HTML, JS must set `style.display='block'`
2. **user_id NULL**: Foreign key constraint on `push_subscriptions.user_id` means test/no-auth subscriptions fail. Column must allow NULL or skip auth requirement on the subscribe endpoint
3. **Silent failure**: `send_push_notification()` used `except: pass` — changed to print the error
4. **Import missing**: `import json` was missing and `webpush()` needs it for `json.dumps()` payload
5. **Wrong venv**: `pywebpush` must be installed in the same venv the systemd service uses

## Trigger flow for scoring pushes:
- `send_push_notification(user_id, title, body, icon)` is called after score events
- Currently only works for authed users with subscriptions
- No quiet hours check yet in the push function itself (only in settings toggle)
