Parent PRD
#110
Depends on
#123 (online-first data layer must exist)
Summary
Implement the offline read path in OfflineDataService and add the persistent offline banner. When offline, all reads route to local SQLite. Mark-as-read works offline (queued). Search by name and filter by read/unread status work from local cache. Settings accessible offline.
OfflineDataService — offline path
- Detect
Connectivity.NetworkAccess != NetworkAccess.Internet
- All read operations delegate to
ILocalDataService
- Mark-as-read sets
IsPendingSync = true locally
Offline banner
- Persistent banner at top of app when offline
- Clearly labels offline state
- Disappears when connectivity restored
Offline search + filter
- Text search filters local post list by name in real time
- Read/unread filter applies to local cache
Acceptance Criteria
Stories from PRD
User stories 2, 3, 6, 9, 12, 13, 14, 15, 16
Parent PRD
#110
Depends on
#123 (online-first data layer must exist)
Summary
Implement the offline read path in
OfflineDataServiceand add the persistent offline banner. When offline, all reads route to local SQLite. Mark-as-read works offline (queued). Search by name and filter by read/unread status work from local cache. Settings accessible offline.OfflineDataService — offline path
Connectivity.NetworkAccess != NetworkAccess.InternetILocalDataServiceIsPendingSync = truelocallyOffline banner
Offline search + filter
Acceptance Criteria
OfflineDataServiceroutes reads to SQLite when offlineConnectivity.NetworkAccess != InternetIsPendingSync)Stories from PRD
User stories 2, 3, 6, 9, 12, 13, 14, 15, 16