You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Global error handling: persistent UI states + readable messages across all pages
Infrastructure:
- lib/apiError.ts: shared apiErrorMessage() extracts FastAPI detail from
axios responses, falls back to err.message, then a readable fallback string
- components/PageError.tsx: reusable full-page error with WifiOff icon +
Retry button, styled for both light and dark mode
Pages fixed (initial data load):
- revenue, relationships, knowledge, sequences, quotes, crm: add loadError
state; on load failure show <PageError> with retry instead of disappearing
toast leaving user looking at blank page
- billing, actions, settings: SWR hooks already carry error state; now render
<PageError> instead of silently rendering broken UI
All mutation catches across 8 pages now use apiErrorMessage() so backend
validation messages (e.g. "Product unavailable", "Invalid token") surface
directly instead of generic "Failed to X"
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
0 commit comments