I built an education management platform for institutions where internet connectivity is a luxury, not a given. Teachers needed to take attendance, track student progress, and manage exam results — and they needed it to work whether the WiFi was up or not. That constraint changed everything about how we designed the app. Instead of treating offline as an edge case, we made it the default mode and treated connectivity as a bonus.
WatermelonDB was the foundation. It's a lazy-loaded, observable database built on SQLite that's designed specifically for React Native. Unlike AsyncStorage or other simple persistence layers, WatermelonDB handles tens of thousands of records without breaking a sweat because it only loads what the UI actually needs. Components subscribe to database queries and re-render automatically when data changes — whether that change came from the user or from a background sync.
The hardest part was sync. When a teacher marks attendance offline and another administrator updates the same student's record on the web portal, you have a conflict. We built a queue-based sync system that batched local changes, sent them when connectivity returned, and applied server-side conflict resolution with last-write-wins for most fields and merge strategies for critical data like grades. Every sync operation was idempotent — you could replay the queue safely without duplicating data.
The real impact was in the classrooms. Teachers stopped carrying paper registers. Attendance that used to take fifteen minutes now took two. Parents received progress updates that were previously delayed by weeks. The app worked the same in a well-connected urban school as it did in a rural institution with intermittent mobile data. That's the design principle I carry into every project now: assume the network will fail, and design for it from day one. Your users will never notice when it works — and that's exactly the point.