Goal
Driver-app side of Nostr-signaled voice calling between driver and rider. Companion to variablefate/roadflare-ios#82 — see that issue for the full scope, design questions, and Amethyst reference.
In short: voice calls between matched rider/driver pairs, signaled over Nostr (likely adopting Amethyst's recently-introduced call-signaling kinds), with WebRTC for the actual audio channel. Preserves the trusted-driver-but-not-PII model — no phone-number exchange required.
Driver-app-specific concerns
The shared design questions (signaling kinds, WebRTC choice, lifecycle gating, etc.) are in the iOS issue. Items below are Drivestr Android-flavored:
- WebRTC library on Android. Google's WebRTC native build, or a maintained fork? Binary-size impact non-trivial.
- ConnectionService integration. Android equivalent of iOS CallKit. Optional but provides native-call-screen UX (lockscreen ringing, phone-app call history). Adds manifest declarations and review scrutiny but worth evaluating for v1 quality.
- Foreground service. Active-call audio session likely needs to live in or alongside the existing active-ride foreground service to survive Doze and background restrictions.
- Audio routing. Bluetooth headset, speakerphone toggle, in-call audio focus management. Same complexity surface as any voice app on Android.
- Microphone permission. Distinct from the existing location permission; handle the request UX so it doesn't surprise on first call.
- Push wake. FCM high-priority push for incoming-call wake-up. Need to confirm RoadFlare's relay subscription model can deliver call-offer events fast enough that a push isn't strictly required — or use FCM as a backup.
Cross-platform contract
Both apps speak the same call-signaling protocol — same Nostr kinds, same WebRTC SDP/ICE exchange shape, same accept/decline events. Worth defining in a shared spec doc co-authored with the iOS side before either implementation starts.
Effort
XL — multi-PR feature spanning protocol design, WebRTC integration, ConnectionService evaluation, microphone permission UX, parallel iOS implementation.
Priority
P4 — major feature, future enhancement. Not on the immediate roadmap. Filed so the idea is captured and discoverable.
Companion
iOS-side issue: variablefate/roadflare-ios#82
Goal
Driver-app side of Nostr-signaled voice calling between driver and rider. Companion to variablefate/roadflare-ios#82 — see that issue for the full scope, design questions, and Amethyst reference.
In short: voice calls between matched rider/driver pairs, signaled over Nostr (likely adopting Amethyst's recently-introduced call-signaling kinds), with WebRTC for the actual audio channel. Preserves the trusted-driver-but-not-PII model — no phone-number exchange required.
Driver-app-specific concerns
The shared design questions (signaling kinds, WebRTC choice, lifecycle gating, etc.) are in the iOS issue. Items below are Drivestr Android-flavored:
Cross-platform contract
Both apps speak the same call-signaling protocol — same Nostr kinds, same WebRTC SDP/ICE exchange shape, same accept/decline events. Worth defining in a shared spec doc co-authored with the iOS side before either implementation starts.
Effort
XL — multi-PR feature spanning protocol design, WebRTC integration, ConnectionService evaluation, microphone permission UX, parallel iOS implementation.
Priority
P4 — major feature, future enhancement. Not on the immediate roadmap. Filed so the idea is captured and discoverable.
Companion
iOS-side issue: variablefate/roadflare-ios#82