GH GambleHub

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!

Telegram
@Gamble_GC
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.