Version: 1.0
Last Updated: 2026-07-23
| State | Use When | Don't Use When |
|---|---|---|
| Empty state | Content genuinely doesn't exist yet | Content is loading |
| Skeleton | Content is loading for first time | Content exists but there's an error |
| Error state | Request failed / can't load data | Content is just empty |
| Zero results | Search/filter returns nothing | Page has never had data |
┌──────────────────────────────────────────────────────┐
│ │
│ [Illustration — 200×160px SVG] │
│ neutral-300 line art style │
│ │
│ Action-Oriented Headline │
│ [H3 — 20px, neutral-900, center] │
│ │
│ Short, encouraging description in 1-2 lines. │
│ [body-sm — 14px, neutral-500, center] │
│ │
│ ┌────────────────────────────┐ │
│ │ Primary Action → │ │
│ │ [Optional CTA button] │ │
│ └────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────┘
[⭐ Star illustration]
No rewards earned yet
Browse partner campaigns to start earning NOVA tokens.
[Browse Campaigns →]
[🕐 Clock illustration]
No activity yet
Earn or redeem NOVA tokens to see your transaction history here.
[Start Earning →]
[📢 Megaphone illustration]
No active campaigns
Check back soon — new merchant campaigns are added regularly.
[Notify Me →] (optional)
[👛 Wallet illustration]
Connect your wallet
Connect a Stellar wallet to see your NOVA balance and transactions.
[Connect Wallet →]
[⚠ Triangle warning illustration]
Something went wrong
[Error message from API, if available]
[Try Again →]
[🔍 Magnifier illustration]
No results for "coffee"
Try a different search term or browse all campaigns.
[Clear Search ×]
✅ Do:
- Use action-oriented headlines: "No rewards earned yet"
- Describe what the user can do: "Browse campaigns to start earning"
- Be encouraging, never apologetic
- Keep descriptions under 2 lines (max 100 chars)
- Match the page context
❌ Don't:
- Say "No data found" (robotic)
- Say "Sorry, there's nothing here" (apologetic)
- Show technical error codes in user-facing messages
- Include multiple CTAs that compete with each other
- Format: SVG (inline or
<img>with alt text) - Dimensions: 200×160px (desktop), 160×128px (mobile)
- Style: Light line art, single color using
currentColor - Color:
neutral-300on light mode,neutral-600on dark mode - Accessibility: decorative →
aria-hidden="true", orrole="img"withalttext - Do not use illustrations that require understanding specific shapes (color-blind safe)
Container: flex flex-col items-center text-center py-12 px-6
Illustration margin-bottom: mb-6 (24px)
Headline margin-bottom: mb-2 (8px)
Description margin-bottom: mb-6 (24px)
- Illustration:
text-neutral-600(auto viacurrentColor) - Headline:
text-white - Description:
text-neutral-400 - CTA button: uses standard button dark mode styles