An empty dashboard is a surprisingly awkward thing to design.
Leave it blank, and the page looks unfinished. Add a large illustration, and suddenly a project management app looks like a greeting card.
Then there’s the familiar message underneath:
Nothing here yet!
Friendly enough. But what should the user do next?
Before choosing an illustration, it helps to work out what the empty page needs to explain.
Let’s use a bookmarks app as an example.
Start with the reason the page is empty
A bookmarks page can be empty because someone has just created an account. It can also be empty because their search returned no matches.
Those situations need different responses.
For a new account:
Save your first bookmark
Add a link you want to come back to.
Add bookmark
For an unsuccessful search:
No bookmarks match “CSS grid”
Try another search or remove a filter.
Clear search
A welcome illustration might fit the first state. Reusing it for the second could make the app appear to have lost the user’s saved links.
The illustration belongs to a particular state, just like the heading and button.
Give the illustration one job
For the first-use state, the visual could show a bookmark going into a small tray.
That is enough.
It does not need a person, a desk, a laptop, floating browser windows, three plants, and a rocket.
At the size used in an interface, extra objects compete with the thing the illustration is supposed to communicate.
A useful brief might be:
A small tray with one bookmark card hovering above it. Simple shapes, limited colors, no lettering. Intended for the empty bookmarks page of a web app.
This is specific about the subject and where it will appear. It leaves room to explore the visual style.
Generate a draft against that brief
You can use PicLumen to explore an illustration from the brief, then judge the result against the actual component.
For example:
Minimal flat illustration for a bookmarks app empty state. One rounded bookmark card hovering above a shallow tray. Muted blue and warm gray palette, simple geometric shapes, front three-quarter view, isolated on a plain white background. No text, no logos, no surrounding interface.
Keep the heading and button out of the generated image. They should remain HTML text so they can be edited, translated, and resized with the rest of the interface.
The generated draft also needs inspection. Look for odd overlaps, unnecessary details, and shadows that make the composition harder to read.
A result can look appealing on its own and still be a poor fit for the page.
Review it at the size you will ship
Open the illustration inside the empty-state component.
If the planned display width is 160 pixels, review it at 160 pixels. A full-screen preview will hide some practical problems.
Check whether:
- The bookmark still reads as a bookmark.
- Thin lines disappear.
- The shadow looks too heavy.
- Empty margins make the drawing appear smaller than expected.
- The image attracts more attention than the action button.
If the concept only works when enlarged, simplify it before spending time polishing the details.
Let the markup carry the meaning
For this example, the illustration repeats information already conveyed by the heading and description. It can have an empty alt attribute:
<section
class="empty-state"
aria-labelledby="empty-bookmarks-title"
>
<img
src="/images/empty-bookmarks.webp"
alt=""
width="160"
height="120"
/>
<h2 id="empty-bookmarks-title">
Save your first bookmark
</h2>
<p>Add a link you want to come back to.</p>
<button type="button">
Add bookmark
</button>
</section>
The button still needs to be connected to the app’s add-bookmark flow.
If an illustration communicates information that is missing from the text, reconsider that decision. Instructions someone needs to use the page should be available without interpreting the picture.
Check the component without the image
Temporarily hide the illustration.
Can someone still understand what this page is for and what to do next?
In the bookmarks example, they should be able to. The heading explains the starting point, the description gives a small amount of context, and the button names the action.
Then bring the illustration back.
Its contribution should be visible: it makes the page feel considered, introduces the visual style, or helps someone recognize the situation.
If it pushes the button down the screen without adding much, making it smaller—or leaving it out—is a reasonable design decision.
The empty state is finished when the next step is clear. The illustration gets its place by helping that page work.
Top comments (1)
empty state first, illustration second. most teams leave it till last.