Skip to content

Add PRD for iOS receiver app (Game Master Bell) - #45

Open
mnindrazaka wants to merge 1 commit into
mainfrom
claude/ios-receiver-app-prd-kmswnj
Open

Add PRD for iOS receiver app (Game Master Bell)#45
mnindrazaka wants to merge 1 commit into
mainfrom
claude/ios-receiver-app-prd-kmswnj

Conversation

@mnindrazaka

Copy link
Copy Markdown
Contributor

Summary

This PR introduces the product requirements document for a native iOS receiver app that extends the Game Master Bell system to support iPhone devices alongside the existing Android receiver.

Changes

  • New document: docs/PRD-ios-receiver.md — comprehensive 600-line PRD covering:

    • Architecture: iOS app subscribes to the same game-masters FCM topic as Android, receiving alert payloads via APNs
    • Design decisions: native Swift/SwiftUI app (not cross-platform framework), alert vs. data-only payload trade-offs, TestFlight distribution model
    • Functional requirements: push registration, custom bell sound, recent calls list, localized notifications
    • Non-functional requirements: $99/yr Apple Developer Program cost, 90-day TestFlight build expiry, platform parity discipline
    • 9-phase implementation plan with clear rollout sequence and rollback strategy
    • Open questions on deployment target, Critical Alerts entitlement, and account ownership
  • Updated: README.md — added pointer to the new iOS PRD and brief summary of the iOS receiver addition

Key Design Points

  • API change is additive only: The FCM message gains an apns block with alert payload, localization keys, custom sound, and time-sensitive interruption level. The existing data and android blocks remain unchanged to avoid regressing Android receivers.
  • No new server state: iOS devices subscribe client-side to the same topic; the API remains stateless.
  • Distribution trade-off: TestFlight requires $99/yr membership and quarterly build refreshes (90-day expiry), but provides automatic updates and no App Review for internal testing.
  • Honest about platform gaps: iOS cannot ring through the Ring/Silent switch without Critical Alerts (unlikely to be granted); the runbook must document this operational constraint.
  • Phased rollout: 9 phases from PRD adoption through staff rollout, each a single small PR that keeps main green and production working.

Notes for Review

This is a planning document, not code. It supersedes exactly one line of PRD-v3 (the "No iOS receiver" non-goal) and leaves v3's architecture, API contract, and bell web app unchanged. The document is detailed enough to guide implementation but defers several decisions (iOS 15 vs. 16, Critical Alerts request, NSE for recent-calls parity) to the appropriate phase with clear rationale for each deferral.

https://claude.ai/code/session_01HU5Mt8Szu4LxdwPd9fkN8g

PRD-v3 assumed every staff phone is Android, so a game master carrying an
iPhone cannot receive calls at all. This adds docs/PRD-ios-receiver.md,
specifying a native Swift/SwiftUI receiver at apps/receiver-ios subscribed
to the same game-masters FCM topic, plus a nine-phase plan where each phase
is one small reviewable PR.

The design work is mostly in two places. First, iOS cannot use the
data-only FCM message Android depends on — on iOS that becomes a silent
background push, which is throttled, displays nothing, and is not delivered
at all once the app is force-quit. So the API's message grows an apns block
with a real alert payload, deliberately without a top-level notification
block, which would otherwise make Android's system render the notification
and bypass the custom-sound channel on every phone already in production.
Second, distribution inverts: Android sideloads an APK for free but fights
OEM battery managers, while iOS delivers reliably but requires a paid
developer membership, TestFlight, and a rebuild every 90 days.

Also records the platform ceiling honestly: nothing short of the Critical
Alerts entitlement rings through the Ring/Silent switch, and that
entitlement is unlikely to be granted for a cafe bell, so the plan ships on
Time Sensitive notifications plus a runbook rule and treats approval as a
payload-only upgrade if it ever arrives.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HU5Mt8Szu4LxdwPd9fkN8g
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants