Skip to content

Polish iPhone chrome and add native notifications - #18

Merged
gitcommit90 merged 1 commit into
mainfrom
feat/polished-mobile-header
Jul 26, 2026
Merged

Polish iPhone chrome and add native notifications#18
gitcommit90 merged 1 commit into
mainfrom
feat/polished-mobile-header

Conversation

@gitcommit90

Copy link
Copy Markdown
Owner

Outcome

Prepares the 0.0.16 mobile submission candidate by fixing the iOS camera termination, making the phone channel header a deliberate two-row native layout, and adding opt-in background notifications with durable server delivery.

Acceptance ledger

  1. Take Photo or Video has camera, photo-library, and recorded-video microphone privacy declarations so iOS no longer terminates the process when that protected picker path opens.
  2. At 390×844, hamburger + channel name occupy the first row and Favorite/Router/resident/Terminal/Notes/Skipper occupy a right-aligned second row with 44-point targets and no horizontal overflow.
  3. Notes retains visible New note and Close controls, and the native status surface visually continues the header behind the Dynamic Island while controls remain below it.
  4. iPhone notifications are explicitly opt-in, bind the APNs token to the signed-in user and individual device, unregister one phone without disabling another, and navigate notification taps to the target channel/thread.
  5. Durable notification fan-out skips the sender, honors per-channel mute, treats global mute as sound-only, collapses duplicate message events, waits for settled agent replies, retries transient delivery failures, and encrypts APNs tokens at rest in the relay.
  6. The relay authenticates installations, rate-limits registration/delivery, uses opaque recipient IDs instead of local user IDs, signs ES256 APNs JWTs, falls back from production to sandbox for development tokens, removes permanent bad tokens, and atomically claims idempotency keys.
  7. The current UI advertises native push only on iOS; Android Firebase delivery is not represented as complete.

Verification

  • npm run typecheck
  • npm run build
  • npm run mobile:sync
  • focused mobile/push/Cloudflare tests: 10 passed, one environment-only browser skip
  • non-native suite: 101 passed, 2 environment-only browser skips
  • npm run test:brief-browser: 39 passed
  • npm run test:onboarding-browser: 20 passed
  • Cloudflare Worker dry-run succeeds with D1 and three rate-limit bindings
  • full native-world was attempted three times and consistently passed the changed/mobile-independent assertions before the deterministic long-running Skipper queue harness timed out at different later checkpoints; no product assertion failed
  • git diff --check

External release gates

  • MacBook Air/iPhone on-device acceptance awaits that currently-offline Mac returning to the network.
  • Cloudflare deployment and real APNs background receipt await existing Cloudflare authorization plus one Apple APNs .p8 server key; neither secret is committed or available on the release hosts.

Signed-off-by: Joseph Yaksich <gitcommit90@users.noreply.github.com>
@gitcommit90
gitcommit90 merged commit f0f9a97 into main Jul 26, 2026
5 checks passed
@gitcommit90
gitcommit90 deleted the feat/polished-mobile-header branch July 26, 2026 21:47
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.

1 participant