Logo GH

UX feedback in empty states

1) What are empty states and why they are needed

A blank state is a screen/widget where the main content is temporarily absent: before the first action, after cleaning, with a zero result, with a download error, with no rights/access.

Empty state targets:
  • explain "why is it empty here";
  • show the value of the section;
  • Suggest a clear next step (or more to choose from)
  • reduce anxiety and prevent grooming.

Good empty state = context + benefit + action.

2) Empty state typology

1. first-time empty-The user has not created/configured anything yet.
2. Zero Search/Filter: The query returned no results.
3. Temporary void: Data is being loaded or queue is running.
4. Restriction/right: no access, insufficient verification level.
5. User Cleared: Recycle Bin/History Cleared.
6. Technical problem: network/service failure, retray.

3) Design principles

Contextuality: we are talking about a specific reason for emptiness.
Value → action: first why this section, then what to do.
One main CTA: if necessary - secondary (learn more/FAQ).
Brevity and specificity: 1-2 sentences + clear button.
Visual support: the icon/illustration supports meaning, does not distract.
Avoiding dead ends: There's always a way forward.
Tone consistency: friendly and calm; no joke in critical steps (payments, security).
A11y and localization: readable by the screen reader, correctly inclined, takes into account the length of the lines.

4) Empty state frame (template)

Title (optional, 1 line) - Claim value or reason.

Text (1-2 sentences) - "why is empty" + "what's next."

Primary CTA is the main target action.
Secondary ACS/link - help/rules/documentation.
Visual (optional) - easy illustration of 24-96 px, do not overload.

Phrase template:
💡 Here will be [result/content] as soon as you [action]. Start with the [key step].

5) Scripted patterns

5. 1 Onboarding/first zero

Goal: lead to the first successful action.

Text: "To see personalized recommendations, fill out a profile and select leads."

CTA: Populate Profile/Select Leads.

Tip: Add a micro force/time indicator: "It will take ~ 1 minute."

5. 2 Search/filters = zero result

Purpose: Help adjust the request.

Text: "Nothing found on "live blackjack." Try "blackjack" or remove the "Provider: X "filter"

CTA: "Reset Filters" secondary: "Open Directory."

5. 3 Payments/wallet empty

Objective: to stimulate method addition/first replenishment.

Text: "Save your payment method - refills and withdrawals will go faster."

CTA: "Add Payment Method" secondary: "Rules and Fees."

5. 4 Verification/access

Purpose: transparently explain the restriction and the withdrawal route.

Text: "This section is available after identity confirmation. It usually takes up to 2 minutes"

CTA: "Get Verified" secondary: "Why is it necessary?"

5. 5 Data in transit/temporary void

The goal: to reduce anxiety waiting.

Text: "Collecting your data. This usually takes up to 30 seconds. You can leave a page - we will notify you when everything is ready"

CTA: "Understandable" secondary: "What happens next?"

5. 6 After cleaning/removal

The goal is to confirm the action and suggest the next step.

Text: "History cleared. New transactions will appear after the next refill"

CTA: "Top Up."

5. 7 Error/Retray

The goal: a clear path of recovery.

Text: "Failed to load data. Check your network or try again"

CTA: "Repeat" secondary: "System status."

6) Microtexts: ready-made templates

First zero (directory/favorites):
  • "Selected games will appear here when you add the first one. [Add to Favorites"
Search:
  • "Nothing was found for "{query}." Refine the request or reset the filters. [Reset Filters]"
Purse/Payments:
  • "You do not have any saved methods yet. Add a card or wallet to speed up your payments. [Add Method]"
Access/verification:
  • "The feature is not available without age confirmation. It will take ~ 2 minutes. [Confirm age] [Why?]"
Temporary void:
  • "We are counting the statistics for the last 24 hours... This is usually up to 30 seconds. We'll show you a notification when you're done"
Failures:
  • "The service is unavailable. We are already repairing. Please try later or check the status. [Repeat] [System Status]"

7) Visual language and illustrations

Use light monochrome/two-tone illustrations to avoid arguing with the CTA.
Dimensions and indents - like a content card (visual consistency).
Do not depict humorous scenes in stressful scenarios (payment/security).

8) Localization and availability

Put stock for the length of the lines (DE/TR longer).
Translate numeric formats, currency, dates locally.
For screen readers: role = "status," aria-live = "polite/assertive" for dynamics.
Do not put meaning only in the image: duplicate with text.
Check for 320 px readability and WCAG contrast.

9) Metrics and experiments

Key metrics:
  • CTR on the main empty CTA;
  • conversion to the "first success" (activation event);
  • Time to first action
  • frequency of return to the screen without progress;
  • Percentage of zero search results
  • calls for scenario support.
A/B ideas:
  • a specific vs common header;
  • CTA action verb vs neutral;
  • Adding a time estimate
  • the presence of a secondary CTA (FAQ) and the order of the buttons;
  • illustration vs icon vs without visual.

10) Anti-patterns

"Here is empty" without explanation or step.
Jokes in critical steps (payment, security).
One Learn More CTA without context.

Passive lien: "must be added." Write actively: "Add...."

Long paragraphs: 1-2 sentences maximum.
Placeholder instead of label in forms - worsens A11y and understanding.
Hidden constraints ("instantaneous," although delay is possible).

11) Pre-release checklist

  • It is clear why it is empty?
  • Is there value to the section in one sentence?
  • Is there one main CTA and, if necessary, a secondary one?
  • Is the text short (≤ 140 characters) and specific?
  • Added time/effort estimate if appropriate?
  • Tone matches script (calm/supportive)?
  • Localization and A11y checked (aria attributes, contrast)?
  • Image does not dominate CTA?

12) Before/after examples

Games Catalog (First Zero)

Before: "There is nothing here yet"

After: "Collect your tape. Choose 3 favorite genres - let's start recommending. [Choose Genres]"

Zero Search

Before: "Nothing found"

After: "By "high-limit roulette" there are no results. Remove the "High-limit" filter or try "roulette." [Reset Filters]"

Payments

Before: "No payment methods"

After: "Save your card or wallet - replenishment and withdrawal will become faster. [Add method] [Fees and terms]"

Verification

Before: "No access"

After: "The section is available after identity confirmation. It takes ~ 2 minutes. [Get Verified] [Why it Matters]"

13) Embedding in a design system

Add the EmptyState component with props to the UI kit:
  • 'title '(string, optional)
  • 'body '(short text 1-2 sentences)
  • `primaryAction { label, onClick }`
  • `secondaryAction { label, href/onClick }`
  • 'icon/illustration '(optional)
`variant` (`firstTime``noResults``temporary``restricted``error`)
'ariaRole '/' ariaLive'for dynamic states

Store texts in i18n files next to the component, maintain keys and descriptions, connect tone-map (tone and lexicon for situations).

14) Quick constructor (copy and use)

Pattern 1 - First zero:
  • Headline: "Start With the First Step"
  • Text: "There will be recommendations here as soon as you choose interests."
  • CTA: "Select Leads"
  • Secondary: "How does it work?"
Template 2 - Search:
  • Text: "Nothing was found by "{query}." Reset the filters or refine the query"
  • CTA: "Reset Filters"
  • Secondary: "Catalogue"
Template 3 - Key function blocked:
  • Text: "Feature available after age confirmation. It's usually up to 2 minutes"
  • CTA: 'Confirm age'
  • Secondary: "Why is it necessary?"
Template 4 - Data in Transit:
  • Text: "We collect data for the day. This is usually up to 30 seconds. We'll let you know when it's done"
  • CTA: "Good"

Final cheat sheet

Context + value + action - in one "stack."

One main CTA with no competition in visual weight.
Short and specific: 1-2 sentences.
Always the way out of the impasse: no dead-end screens.
Localization and A11y are at the component level.

Contact

Get in Touch

Reach out with any questions or support needs.We are always ready to help!

Start Integration

Email is required. Telegram or WhatsApp — optional.

Your Name optional
Email optional
Subject optional
Message optional
Telegram optional
@
If you include Telegram — we will reply there as well, in addition to Email.
WhatsApp optional
Format: +country code and number (e.g., +380XXXXXXXXX).

By clicking this button, you agree to data processing.