| .. | .. |
|---|
| 14 | 14 | - Deliver transcript + images together as one message to Claude |
|---|
| 15 | 15 | - Ensures voice prefix sets reply channel correctly |
|---|
| 16 | 16 | |
|---|
| 17 | | -### Push Notifications (iOS APNs) |
|---|
| 18 | | -- Notify when messages arrive while app is backgrounded/closed |
|---|
| 19 | | -- Requires Apple Developer Portal APNs key setup |
|---|
| 20 | | -- Server-side message queue for offline delivery |
|---|
| 17 | +### Push Notifications (iOS APNs) — NEXT SESSION with user at computer |
|---|
| 18 | +- **Step 1**: User creates APNs key in Apple Developer Portal (needs login) |
|---|
| 19 | +- **Step 2**: Save `.p8` key to `~/.aibroker/apns-key.p8`, add env vars (key ID, team ID) |
|---|
| 20 | +- **Step 3**: Server-side APNs HTTP/2 sender (`src/daemon/apns.ts`) with JWT auth |
|---|
| 21 | +- **Step 4**: App sends device token on WebSocket connect |
|---|
| 22 | +- **Step 5**: Gateway buffers messages when no WS clients, sends push notification |
|---|
| 23 | +- **Step 6**: App receives push → user taps → opens app → catch_up drains messages |
|---|
| 24 | +- Optional: silent push to wake app briefly for critical messages |
|---|
| 21 | 25 | |
|---|
| 22 | 26 | ### App Name Renaming (Runner → PAILot) |
|---|
| 23 | 27 | - Rename Xcode target from Runner to PAILot (like Glidr did) |
|---|