Push notifications, auth migration, deploy separation, Flutter app fixes. 8 areas resolved.
| Area | Issue | Fix | Status |
|---|---|---|---|
| Push Notifications | Silent notifications (no sound) | Added sound: "default" to APNs payload | Fixed |
| Push Notifications | Super admins not receiving pushes | Added super_admin to 4 API routes | Fixed |
| Push Notifications | No repeat alerts for unacknowledged orders | 30-second repeat timer + in-app banner | Fixed |
| Auth Migration | 77 Firebase users missing from prod | Migration scripts created and run | Fixed |
| Admin Access | No admins on production database | Nicky, Ariane, Nelson set as super_admin | Fixed |
| Deployment | Staging and prod deployed together | Separate deploy scripts created | Fixed |
| Flutter App | Restaurant list not scrollable | DraggableScrollableSheet in settings | Fixed |
| Flutter App | Alert sound continues after logout | Clear polling/timers on sign out | Fixed |
| Environment | Key ID | APNs Host | Used By |
|---|---|---|---|
| Production | G3BHXM2HW6 | api.push.apple.com | TestFlight, App Store, ricoya-live |
| Sandbox | XZZ44W7RYR | api.sandbox.push.apple.com | Xcode debug builds, staging |
Production key cannot send to sandbox APNs (returns BadEnvironmentKeyInToken). Each environment requires its matching key and endpoint.
Note: .env.local is never synced. Cloudflare proxy must remain ON (SSL uses Origin cert).
| File | Change |
|---|---|
| AppDelegate.swift | Forward push data (title, body, userInfo) to Flutter instead of nil |
| orders_provider.dart | 30s repeat alert timer, in-app banner flag, clear on logout |
| settings_screen.dart | Scrollable restaurant picker (DraggableScrollableSheet) |
| login_screen.dart | Increased TabBarView height to fix email text cutoff |
| theme.dart | White bottom sheet (overrides Material 3 pinkish tint) |
| new_order_banner.dart | New widget — orange banner overlay, shows 5s on alert fire |
| main.dart | Stop OrdersProvider polling on sign out |