All plans
System states — loading, empty, and error handling
Every table page now has skeleton loading states, contextual empty-state CTAs, and retry UI on errors. A JavaScript crash boundary wraps the entire app shell so a broken widget never takes down the page.
- Skeleton rows with animate-pulse in all list views (products, orders, returns, rules)
- Contextual empty states — Products page offers Create, Import CSV, and Pull from Shopify
- DisconnectedBanner with risk list and auto-recovery steps when a channel goes offline
- ConflictBanner for per-field catalog drift with side-by-side comparison and re-push action
- ImportErrorCard with stacked progress bar and per-row fix/retry on onboarding step 4