Empty States: The Screen That Decides If Users Stay
The first screen a new user sees is usually empty, and it quietly decides whether they get your app or give up. Here is how to make empty states do real work.
An empty state is the version of a screen a brand-new user sees when there is nothing in it yet: no projects, no contacts, no results. It matters because it is the first real thing most people meet, and a blank or confusing one makes them assume the app is broken or not for them. A good one explains the screen, points to the first action, and shows what success looks like.
What is an empty state and why does it matter so much?
An empty state is what a screen shows before it has any content. The empty inbox, the dashboard with zero entries, the search with no results. For a returning user it is rare. For a new user it is the entire app: every screen they touch on day one is empty, because they have not created anything yet. So the empty state is not an edge case. It is the front door.
Here is the trap. You, the maker, almost never see your own empty states. By the time you finished building, you had test projects, a seeded account, three things in the list. The screen looks alive to you. The first visitor sees a void. That gap between what you see and what they see is the single most common reason a working app feels dead to a stranger, and it is the same blind spot we cover in why visitors leave in the first 30 seconds.
//The fastest way to see your own empty state
Create a brand-new account in an incognito window and do nothing. Whatever screen you land on, frozen and untouched, is the real first impression. If it does not tell you what to do next, neither will it tell your users.
Why do AI-built apps so often ship a blank, confusing first screen?
AI-built apps ship blank first screens because the tools optimize for the populated case. When you ask Cursor, Lovable, v0, or Bolt to build a dashboard, it builds the dashboard with data in it, often with realistic-looking placeholder rows baked into the mockup. Those placeholders disappear the moment a real, empty account loads. What is left is a header, maybe a chart axis with no chart, and a lot of white space.
There are a few specific ways this happens, and they are worth naming so you can spot them:
- ▸The AI hard-coded sample rows into the component, so your demo looked full but a real empty account renders nothing.
- ▸The list renders a bare
[]with no fallback, so the user sees a heading and a blank rectangle. - ▸The loading spinner and the empty state look identical, so a new user cannot tell if the app is thinking or simply has nothing to show.
- ▸The call-to-action that creates the first item lives somewhere else, so the empty screen is a dead end with no obvious next move.
None of this means the AI did a bad job. It means it built the screen you described, and you described the screen as you imagined it: full. The empty version was never in the prompt, so it was never designed.
What should a good empty state actually do?
A good empty state does three jobs, in order. Miss one and the screen still works against you.
- 1.Explain what this screen is for, in one plain line. Not "No data" but "Your projects will show up here. You do not have any yet." Name the thing and confirm that empty is expected, not broken.
- 2.Show the single next action. One clear button that creates the first item, labeled with a verb and the outcome: "Create your first project", not "Add". One action, not five. The whole point of an empty screen is that there is only one sensible thing to do.
- 3.Show what good looks like. Where you can, seed a sample item or a ghost preview so the user sees the value before they have done any work. A sample invoice, a demo project, a faded example row labeled "example". This turns an abstract promise into something concrete.
That third job is the one most makers skip, and it is the one that moves the needle. The difference between "here is an empty box, good luck" and "here is what your finished thing will look like, now make yours" is the difference between a shrug and a first action.
What do good and bad empty states look like, side by side?
Concrete beats abstract, so here is the same screen done two ways. Imagine a project-management app where a new user just signed up and landed on an empty board.
Before: the blank screen
<!-- What the AI shipped: a heading and a void -->
<section class="board">
<h1>Your Board</h1>
<div class="columns"></div> <!-- renders nothing when empty -->
</section>The user sees the words "Your Board" and a wide stretch of nothing. No instruction, no button, no example. They do not know if it is loading, broken, or just empty. Most people give up here, and they never tell you why. That silent exit is exactly the pattern in why frustrated users leave silently.
After: the screen that earns the first action
<section class="board">
<h1>Your Board</h1>
<div class="empty">
<p>This is where your tasks live. Your board is empty for now.</p>
<button>Add your first task</button>
<div class="ghost">
<span class="tag">example</span> Draft the launch email
</div>
</div>
</section>Same component, three small additions: a sentence that says empty is normal, one labeled button, and a faded example task so the user sees the shape of the thing. Nothing fancy. The user now knows where they are, what to do, and what it will look like when they do it.
How do you guide the first action without a heavy tutorial?
You guide the first action by building it into the empty state itself, not by bolting a tour on top. Multi-step product tours, coach marks, and modal walkthroughs mostly get dismissed in the first two seconds. The empty state is a better teacher because it lives exactly where the user already is, asking for exactly one thing.
- ▸Reduce the screen to one obvious action. If your empty dashboard offers six buttons, you have rebuilt the confusion you were trying to remove.
- ▸Put the action in the empty area, not hidden in a top corner or a side menu. The eye goes to the middle of the empty space.
- ▸Make the first item cheap to create. Pre-fill a name, offer a one-click "start from a sample" so the user gets a populated screen before committing real effort.
- ▸After the first item exists, let the now-populated screen do the teaching. People learn by seeing their own data appear, not by reading instructions about hypothetical data.
+One screen, one job
If you can only fix one empty state, fix the one a brand-new account lands on first. That single screen carries more weight than every other screen combined, because nobody reaches screen two if screen one looks broken.
How do you test your empty states with a true first-timer?
You test empty states by watching someone who has never seen your app touch it for the first time, with a genuinely empty account, and you say nothing. The hard part is not the testing. It is finding a true first-timer, because you cannot be one, and most friends will quietly figure it out to avoid embarrassing you.
- 1.Make a fresh account in a clean browser profile. No seeded data, no leftover test projects.
- 2.Hand it to one person who has never seen it. Ask them to think out loud and to try to do the main thing the app is for.
- 3.Stay silent. The moment you explain a screen is the moment you have proven that screen does not explain itself.
- 4.Watch for the pause. Where they stop, squint, or scroll looking for a button is an empty state that failed.
- 5.Write down the first screen where they hesitated. That is your highest-priority fix.
This is the same objective-stranger lens behind confusing onboarding losing users and worth pairing with a hard read of whether your copy is clear or just clear to you. The empty state is mostly copy plus one button, so clear writing is half the battle.
How does a review and fix-it plan help you find empty-state problems?
An outside review helps because the reviewer is, by definition, a first-timer who is paying attention and willing to tell you the truth. We sign up cold, with an empty account, and write down every screen that left us unsure what to do, in plain language and ranked by how much it costs you. You cannot un-see your own app, so an outsider is the cheapest way to recover the view you lost.
With saasreview that takes two honest forms. A hands-on human review is a person going through your real first-run and reporting back what confused them. The review plus fix-it plan goes further: the same walkthrough, then a prioritized list of what to change first, so you are not staring at ten notes wondering which empty screen actually matters. We are new, so we will be straight with you about that: this is one careful set of fresh eyes, not a crowd. For the front door of a new app, one careful set of fresh eyes is usually exactly what is missing. If you build with AI, the for vibe coders page covers how we look at AI-shipped apps specifically.
Get a person to walk your real first-run, then hand you a ranked list of which empty screens to fix first.
Get my app reviewedFrequently asked questions
What is an empty state in UX? ▾
An empty state is what a screen shows before it has any content: an inbox with no messages, a dashboard with zero entries, a search with no results. For new users it is the whole app, since every screen is empty on day one. A good empty state explains the screen, shows the next action, and previews what filled-in looks like.
Why does my AI-built app show a blank first screen? ▾
AI coding tools build the populated version of a screen, often with placeholder rows baked into the mockup. Those vanish when a real, empty account loads, leaving a heading and white space. The empty version was never described in your prompt, so it was never designed. It is a gap in the brief, not a failure of the tool.
How do I design a good empty state? ▾
Do three things in order: explain what the screen is for in one plain line and confirm empty is expected, show a single clear action labeled with a verb and outcome, and seed a sample or ghost preview so the user sees the value before doing any work. One action, not five. Keep the copy plain.
How do I test my empty states? ▾
Create a fresh account in a clean browser profile with no seeded data, hand it to someone who has never seen the app, and stay silent while they try the main task. Watch for the first pause or squint. That screen is your highest-priority empty-state fix. You cannot be a true first-timer yourself.
Should I use a product tour instead of fixing empty states? ▾
Fix the empty states first. Multi-step tours and coach marks usually get dismissed in seconds. The empty state teaches better because it lives where the user already is and asks for exactly one thing. Once the first item exists, the now-populated screen does the rest of the teaching on its own.
Find the empty screen that is quietly costing you users
A person walks your real first-run with a brand-new account, then hands you a plain-English, ranked list of what to fix first. We are new, so we will be straight with you: one careful set of fresh eyes on your front door.
Get my app reviewedKeep reading
The First 30 Seconds: Why Visitors Leave Your App
Most visitors decide whether to stay almost immediately. Here is what they judge in those first seconds, and the common reasons they quietly close the tab.
Is confusing onboarding making people leave?
If people sign up and then vanish, your onboarding is probably losing them. Here is how to find the confusing moments and turn first-timers into users who stick.
Is my app's copy clear, or just clear to me?
You know what every button and label means because you wrote them. Your visitors do not. Here is how to find the copy that confuses people and fix it.
We put every SaaS through the same honest scorecard, then publish the result.