Notifications App — Change Log¶
This log tracks software changes for this area.
Current status¶
| Item | Status | Notes |
|---|---|---|
| Active development | Open | Notifications system recently modularized (services, tasks, providers) |
| Next release target | TBA | Stabilization + rollout across apps |
| Known risk | Low | Core flows stable, edge cases still being refined |
Recent changes (newest first)¶
| Date | Type | Summary | Impact | Reference |
|---|---|---|---|---|
| 2026-04-14 | Refactor | Moved notification read logic into notifications.services.read |
Medium | |
| 2026-04-14 | Refactor | Moved notification mutation logic into notifications.services.actions |
Medium | |
| 2026-04-14 | Refactor | Extracted delivery logic into notifications.services.delivery |
Medium | |
| 2026-04-14 | Refactor | Extracted Expo receipt handling into notifications.services.receipts |
Medium | |
| 2026-04-14 | Refactor | Simplified Celery tasks to thin wrappers around services | Medium | |
| 2026-04-14 | Feature | Added grouped (collapsed) notification feed with real pagination | Medium | |
| 2026-04-14 | Feature | Introduced registry metadata endpoint for frontend consumption | Low | |
| 2026-04-14 | Feature | Added push device lifecycle management (upsert, deactivate, ping) | Medium | |
| 2026-04-14 | Feature | Implemented Expo push provider with batching and receipt reconciliation | Medium | |
| 2026-04-14 | Feature | Added scheduled notifications via ScheduledNotification + task runner |
Medium | |
| 2026-04-14 | Performance | Introduced batched delivery processing with SELECT ... FOR UPDATE SKIP LOCKED |
High | |
| 2026-04-14 | Performance | Implemented chunked Expo push sending to respect provider limits | Medium |
Open items and status¶
| ID | Title | Status | Priority | Owner | Target | Reference |
|---|---|---|---|---|---|---|
| NOTIFICATIONS-001 | Add email provider support | Open | P2 | Unassigned | TBA | |
| NOTIFICATIONS-002 | Add FCM/APNS provider abstraction | Open | P2 | Unassigned | TBA | |
| NOTIFICATIONS-003 | Improve preference granularity (split large buckets) | Open | P2 | Unassigned | TBA | |
| NOTIFICATIONS-004 | Add per-user notification mute/snooze | Open | P3 | Unassigned | TBA | |
| NOTIFICATIONS-005 | Add delivery metrics and monitoring (success rate, retries) | Open | P1 | Unassigned | TBA | |
| NOTIFICATIONS-006 | Improve grouping UX (server-side grouping strategies) | Open | P2 | Unassigned | TBA | |
| NOTIFICATIONS-007 | Add bulk clear by group endpoint optimization | Open | P3 | Unassigned | TBA |
Known bugs¶
| ID | Symptom | Severity | Status | Workaround | Reference |
|---|---|---|---|---|---|
| BUG-NOTIFICATIONS-001 | Some Expo receipts may remain in "missing" state before eventual resolution | Low | Open | Handled via retry + max attempts | |
| BUG-NOTIFICATIONS-002 | Push tokens may be reassigned across users due to global uniqueness constraint | Medium | Open | Consider adding ownership validation | |
| BUG-NOTIFICATIONS-003 | Large grouped feeds may be slower under heavy load | Medium | Open | Use flat mode or pagination tuning |
Breaking changes and migrations¶
| Date | Change | Action required | Reference |
|---|---|---|---|
| 2026-04-14 | Services layer introduced; views and tasks refactored to use services | Update imports and integration points if calling internal logic directly | |
| 2026-04-14 | Registry-driven navigation replaces reliance on deep_link | Ensure frontend uses route + params where available |
Notes¶
- The notifications system has been restructured into clear layers:
- models (persistence)
- services (business logic)
- tasks (async orchestration)
- providers (external integrations)
-
views (API surface)
-
The registry is now the central contract for:
- notification types
- templates
- routing metadata
-
preferences
-
Future work will focus on:
- additional delivery channels (email, SMS)
- better observability (metrics, dashboards)
- improved UX (grouping, preferences)
- scalability improvements for large orgs