UI + UX Feedback, Status, And System State standard

Offline state

Expose an offline state that scopes the connection loss to affected tasks, keeps cached or local work usable, labels stale and queued data honestly, prevents online-only actions from pretending to succeed, and provides reconnect plus sync handoff paths.

Decision first

Choose this pattern when the problem matches

Use when

  • Connection loss or server reachability changes the user's current task.
  • The app can offer cached content, local editing, queued actions, read-only fallback, or a controlled offline page.
  • Users need to distinguish device-local state from server-confirmed state.
  • Reconnect and later sync behavior matter for trust, data integrity, or task completion.

Avoid when

  • A single request failed while the rest of the app is reachable and an error state is clearer.
  • The operation is still actively pending and connection status is not yet known.
  • The app has no offline capability beyond a basic navigation failure and cannot provide useful next steps.
  • The issue is permission, validation, service outage, or conflict rather than network absence.
  • The message would be global noise while the current task is unaffected.

Problem it prevents

Users lose connection while reading, editing, saving, uploading, or navigating, and need to know what still works, what is only local, what is stale, and what will happen when the app reconnects.

Pattern anatomy

What a strong implementation has to make clear

User need

The app can detect a missing, intermittent, captive, or unreachable connection that affects current work.

Pattern promise

Expose an offline state that scopes the connection loss to affected tasks, keeps cached or local work usable, labels stale and queued data honestly, prevents online-only actions from pretending to succeed, and provides reconnect plus sync handoff paths.

Required state

Online normal state with no offline warning.

Recovery path

Users keep typing into a form that later disappears because the app did not persist local changes.

Access contract

Announce significant connectivity changes with status messaging when they affect the current task.

Quality bar

The difference between expert and weak execution

Strong implementation

Specific, visible, recoverable

  • A field report says Offline: 3 edits saved on this device, cached customer history shown from 10:42, Submit disabled until connection returns, and Retry connection.
  • A cached dashboard labels figures Last updated 09:15, allows filtering cached rows, and disables Refresh and Export with no-connection copy.
  • A user loses connection while editing an inspection note, sees it saved on this device, attaches photos to a queue, and later watches the queue sync after reconnect.
  • A user opens a cached case offline, sees stale timestamp and unavailable online actions, then refreshes successfully when the connection returns.
Weak implementation

Vague, hidden, hard to recover from

  • A blank page says You are offline even though the app has cached drafts and help content.
  • A green Saved label appears while offline without saying the save is local only.
  • The app keeps a spinner on Save during airplane mode and never explains that no network request can start.
  • A submitted offline form disappears from the screen even though it was neither queued nor accepted by the server.
UI guidance
  • Show offline status where it changes the current task, naming what remains available such as cached reports, local draft editing, queued saves, or read-only history.
  • Visually distinguish online-saved, device-saved, queued, stale, syncing, and failed-sync states with text labels and actions, not only a disconnected icon or color.
UX guidance
  • Use offline state to preserve trust and task continuity when connection loss changes what users can read, edit, submit, sync, refresh, or share.
  • Keep useful cached and local work available, disable only online-only actions, and move users through reconnect, sync, conflict, or failed-sync handoff when connectivity returns.
Implementation contract

What the implementation must handle

States

  • Online normal state with no offline warning.
  • Offline banner or local status that names affected scope.
  • Cached read-only state with last updated timestamp.
  • Local draft saved state that is not yet server-synced.

Interaction

  • The offline indicator appears only when connectivity affects the current task or a global app capability users can reasonably act on.
  • The UI never claims a server save, upload, payment, invite, or submit has completed while the app is offline.
  • Safe local work remains available and clearly local; unsafe online-only actions are disabled, queued, or routed to an explained fallback.
  • Retry connection checks update status to still offline, reconnected, server unreachable, syncing, or failed instead of doing nothing.

Accessibility

  • Announce significant connectivity changes with status messaging when they affect the current task.
  • Do not rely on a disconnected icon or color alone; include visible text such as Offline, Saved on this device, Queued, or Last updated.
  • Keep disabled online-only actions associated with an explanation and provide an alternative path where possible.
  • Ensure reconnect, retry, export local copy, view cached data, and cancel queued action controls are keyboard reachable.

Review

  • What can users still do without network, and what must wait?
  • Which content is cached, how old is it, and does freshness matter for this decision?
  • Where exactly are local edits stored, and how will users know they are not yet synced?
  • What does Retry connection test: device network, server reachability, or a specific API?
Interactive lab

Inspect the states before you copy the pattern

Keep work understandable offline

Switch a field report through online, offline, local save, queued uploads, reconnecting, synced, sync failed, read-only cache, and stale data; compare against blank pages, fake saves, discarded drafts, and disabled-everything misuse.

Offline state
Interactive demo is ready

Launch the live UI/UX lab when you want to inspect states, keyboard behavior, and common failure modes.

State To Inspect

Online normal state with no offline warning.

Keyboard / Access

Focus does not jump merely because the app detects offline status.

Avoid Generating

Showing only a browser-style offline page when useful cached or local content exists.

Evidence trail

Source-backed claims behind this guidance

Material Design Offline states

Material Design - checked

Material supports explicit no-internet labels, offline-capable feature indicators, and planning for slow, intermittent, or absent connections.

Full agent/debug reference

Problem Context

  • The app can detect a missing, intermittent, captive, or unreachable connection that affects current work.
  • Some content, drafts, settings, help, forms, or records may remain useful from cache or local storage.
  • Users may start or continue work offline and need to understand whether it is local, queued, blocked, stale, or ready to sync.
  • Connectivity can return while queued actions still need upload, server validation, conflict handling, or failure recovery.

Selection Rules

  • Choose offline state when connection loss changes what users can read, edit, save, submit, refresh, upload, export, or share.
  • State the scope of the outage: whole app, current page, one record, one action, one attachment queue, or one data source.
  • Label cached data with its last successful update time or source when freshness affects decisions.
  • Label local changes as saved on this device, queued, waiting to sync, or sync failed rather than simply Saved.
  • Allow safe local actions such as editing drafts, reading cached content, copying text, or exporting a local backup when available.
  • Disable or explain online-only actions such as Submit, Refresh, Share, Export, Payment, or Invite when they cannot complete.
  • Provide manual reconnect or retry check when users need control, and automatic reachability checks when appropriate.
  • Use error state when a specific operation failed even though the broader app may still be online.
  • Use loading spinner only while an operation is actively pending and before the app knows it is offline.
  • Use sync state after the connection returns and the main question becomes whether queued changes are reconciling, complete, failed, or conflicting.

Required States

  • Online normal state with no offline warning.
  • Offline banner or local status that names affected scope.
  • Cached read-only state with last updated timestamp.
  • Local draft saved state that is not yet server-synced.
  • Queued action state for saves, photos, messages, uploads, or submissions.
  • Online-only action unavailable state with explanation.
  • Reconnecting or checking connection state.
  • Reconnected and syncing handoff state.
  • Sync failed or conflict-ready state that preserves local work.
  • No offline fallback state when nothing useful can be shown except a controlled offline page.

Interaction Contract

  • The offline indicator appears only when connectivity affects the current task or a global app capability users can reasonably act on.
  • The UI never claims a server save, upload, payment, invite, or submit has completed while the app is offline.
  • Safe local work remains available and clearly local; unsafe online-only actions are disabled, queued, or routed to an explained fallback.
  • Retry connection checks update status to still offline, reconnected, server unreachable, syncing, or failed instead of doing nothing.
  • Queued work remains visible until it syncs, fails, is cancelled, exported, or enters conflict resolution.
  • Stale cached data is labeled with last updated time and does not silently replace current data after reconnect without reconciliation.
  • Focus and announcements communicate major connectivity transitions without interrupting every transient network fluctuation.

Implementation Checklist

  • Define connectivity sources: browser online state, server reachability, API health, service-worker cache availability, and per-feature offline capability.
  • Inventory which content and actions are available online, cached read-only, editable locally, queued for later, or unavailable.
  • Write state copy that names the affected object and save location, such as saved on this device or 2 photos queued.
  • Persist local drafts and queued actions with stable IDs, timestamps, user-visible status, and retry or cancel options.
  • Use service workers, cache storage, local storage, IndexedDB, native storage, or platform queues according to product architecture.
  • Keep stale labels, last-updated times, disabled action explanations, and reconnect controls visually close to affected content.
  • Announce offline, reconnected, queued, sync failed, and conflict-needed transitions through appropriate status messaging.
  • Test airplane mode, flaky network, captive portal, server timeout, refresh while offline, app restart, background return, duplicate queued actions, and multi-device conflicts.

Common Generated-UI Mistakes

  • Showing only a browser-style offline page when useful cached or local content exists.
  • Using a spinner forever during connection loss.
  • Claiming a server save or submit succeeded while the work is only local.
  • Disabling every control instead of only online-only actions.
  • Hiding stale-data timestamps or presenting cached data as current.
  • Clearing queued changes after reconnect failure.
  • Treating offline, server outage, permission failure, and validation error as the same message.

Critique Questions

  • What can users still do without network, and what must wait?
  • Which content is cached, how old is it, and does freshness matter for this decision?
  • Where exactly are local edits stored, and how will users know they are not yet synced?
  • What does Retry connection test: device network, server reachability, or a specific API?
  • What happens after reconnect if queued work fails validation or conflicts with newer server data?
  • Can users recover local work by retrying, cancelling, exporting, or contacting support?
Accessibility
  • Announce significant connectivity changes with status messaging when they affect the current task.
  • Do not rely on a disconnected icon or color alone; include visible text such as Offline, Saved on this device, Queued, or Last updated.
  • Keep disabled online-only actions associated with an explanation and provide an alternative path where possible.
  • Ensure reconnect, retry, export local copy, view cached data, and cancel queued action controls are keyboard reachable.
  • Avoid repeatedly announcing brief network flaps; announce meaningful state changes such as offline, reconnected, syncing, failed, or conflict.
  • Make cached timestamps and local-only status available to assistive technology near the affected data.
Keyboard Behavior
  • Focus does not jump merely because the app detects offline status.
  • Retry connection, save locally, export local copy, cancel queued item, and view cached content actions appear in normal tab order.
  • When an online-only action becomes unavailable while focused, nearby status explains why and offers the next reachable action.
  • When reconnect or sync succeeds, focus remains stable unless the user explicitly activated a retry action that resolves to a new result.
  • When sync fails after reconnect, focus can move to the failed queued item or persistent recovery region if that is the next task.
Variants
  • Global offline banner
  • Record-level offline state
  • Cached read-only mode
  • Local draft offline mode
  • Queued upload offline mode
  • Offline fallback page
  • Reconnect check state
  • Offline-to-sync handoff
  • Stale data warning
  • Offline mobile retry

Verification

Last verified: