What offline-first actually means for UX
Offline-first is not a feature. It's a design constraint that changes everything downstream.
No spinners on reads
If reads come from local storage, there is nothing to wait for. No loading states, no skeleton screens, no spinners. The data is already there. The app feels like a native app.
Writes need different feedback
Writes are async — they go to local storage first, then queue for the server. The UI can show success immediately, but "success" means "written locally" not "confirmed by server." For users who care, a subtle sync indicator communicates "saved but not yet confirmed."
The mental model shift
Network-first apps feel like remote desktops. Local-first apps feel like native apps that happen to sync. The user's mental model shifts from "sending data somewhere" to "editing local state that stays in sync." This is a better model and a more accurate one.