Notifications: local-only session reminders; drop the FCM-bridge framing

- Session-expiry reminders are purely on-device (AlarmManager); added an Android
  notification channel and a "Send a test reminder" button (Account > Notifications)
  to verify delivery without a real session
- Strip all FCM/bridge talk from unifiedPush.ts + README; UnifiedPush(ntfy) is now
  an optional no-op stub for hypothetical future server-initiated messages only

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hank 2026-07-07 14:14:34 -07:00
parent 0bc9aa97ba
commit 02e2c750ea
4 changed files with 88 additions and 56 deletions

View file

@ -40,8 +40,8 @@ bigbrainparking/
| Save / share kiosks | ✅ wired | local (no server favorites API exists) |
| Active / past sessions | ✅ wired | list views |
| Start a paid session | 🟡 gated | flow wired to `postStartParkingSession`, disabled pending review (real charge) |
| Session-expiry reminders | ✅ wired | **local** notifications — no FCM needed |
| UnifiedPush (ntfy) | 🟡 partial | endpoint registration done; server→ntfy bridge still needed (see below) |
| Session-expiry reminders | ✅ wired | **local** on-device notifications — no server, no push |
| UnifiedPush (ntfy) | ⚪ optional | not needed for reminders; stub for future server-initiated msgs |
## Build & run (dev)
@ -61,12 +61,12 @@ in `app/app.json` to point elsewhere.
## Notifications on GrapheneOS
Session-expiry reminders are scheduled **locally** from each session's end time, so they
need no push infrastructure and work fully offline of Google. `app/src/notifications/`
also wires **UnifiedPush** (distributor: ntfy) for any genuinely server-initiated push —
but note the ParkSmarter backend only pushes via **FCM**, so server push requires a small
**FCM→ntfy bridge** (a service holding an FCM token that forwards to your ntfy topic, then
registered via `PUT /api/Device`). Until that exists, local reminders cover the main case.
Session-expiry reminders are scheduled **entirely on-device** from each session's end time
(Android `AlarmManager`, via expo-notifications) — no server, no push, no FCM, no Play
Services. They work fully offline. Configure the lead time (default 15 min) in
**Account → Notifications**, where a **"Send a test reminder"** button lets you confirm it
fires on your phone. UnifiedPush (ntfy) is wired only as an optional, no-op stub for any
*future* server-initiated messages; nothing time-based needs it.
## Distribution via Obtainium (self-hosted)