What offline-first actually means for UX

Spinners are a symptom. When reads come from local storage, the entire mental model of a web app changes — and so does how you design it.

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.