V8 Central — Product & Technical Spec
  1. Docs
  2. Experience
  3. Loading, error & empty states

#Loading, error & empty states

Every API-driven screen defines all of these states. No screen ships with only the happy path.

StateTriggerUIRecovery
LoadingRequest in flightSkeletons shaped like the content (tables: 5 rows; cards: card outline). Spinner only inside buttons. Route loading.js for page transitions—
Empty200 with no itemsIcon + one-line explanation + primary CTA (e.g. "Connect your first server"). Filtered-empty is different: "No results for these filters" + Clear filtersCTA / clear filters
Error5xx / unexpectedReadable message (translated) + Retry. Show OSS/BE reference when present ("Reference: 3f9a…")Retry (manual), auto-retry GET once on 502/503/504
SuccessMutation OKSonner toast + the UI updated (refetch or optimistic update rolled back on failure)—
Validation422Field errors under inputs from errors. Focus the first invalid fieldFix + resubmit
Unauthorized (403)Permission or plan403 state: "You don't have access to this", why (role / plan / expired subscription when the API says), link to dashboard / upgradeAsk an owner / upgrade
Not found (404)Missing or other organization's resourcenot-found.js: "This page or item doesn't exist" + back linkBack
Session expired (401)Token expired / revokedTry refresh once. If that fails, clear the session → /[locale]/login?next=<path> with "Your session expired"Log in again
Network failureNo response / offlineInline banner "You're offline / can't reach Central" + Retry. Keep the form dataRetry
Rate limited (429)Too many requests"Too many requests, try again in N s" from Retry-After. Disable the action until thenWait
Server unreachableOSS offline / timeout (proxied)Section-level "This server isn't responding (last seen …)" + Retry + Disconnect. Other sections of Central keep workingRetry / fix the server
Server key invalidOSS 401 (proxied)"Central can no longer access this server" + "Reconnect with a new key"Reconnect
Long-running job202 + run idProgress with steps, safe to leave the page, notification when done—

#Rules

  • One error boundary per route segment (error.js) plus per-widget boundaries on the dashboard.
  • Errors never show stack traces or raw HTML. Unknown errors show a generic translated message + reference.
  • Mutations disable their trigger while pending (no double submit).
  • Destructive actions use a confirm dialog that states the effect, sometimes type-to-confirm (server name). The V8 delete protection setting (3.6) is checked by the backend before any delete is sent to OSS.
  • Toasts are not the only feedback for errors that need action. Use inline messages.
ServerAvatar V8 Central · prepared by central-app-2 (Pair 2 frontend) for Bhavik Jethwa · nothing in this spec is implemented yet · Built 2026-10-03 12:35 UTC