Taste
Design guides
Documentation
← All design guides

Design patterns

Empty state design: first use, no results and failed loading

Write empty states that explain why a screen is empty and offer the right next action. Includes examples for projects, filters and permissions.

An empty area can mean several things

Design an empty state by identifying why the content is absent. A new account with no projects needs a different response from a filtered list with no matches. A failed request is not an empty list, and a lack of permission is not evidence that the workspace has no data.

Start with these causes before writing the illustration brief. If the UI uses the same cheerful “Nothing here yet” message for every case, it can hide failures and send users toward actions they cannot complete.

Four reasons a list can appear empty
StateWhat it meansUseful response
First useNo projects exist yetExplain the object and offer its first creation.
No matchesFilters exclude all itemsKeep filters visible and offer adjustment.
Request failureThe result is unknownExplain the failure and offer supported recovery.
No permissionThis person cannot view the dataExplain access and the available next step.

Match the action to the cause

For a first project, a short explanation and a Create project action may be enough. For a filtered list, keep the active filters visible and offer to clear or adjust them. For unavailable data, explain the failure and provide a retry when the system supports it.

A permission restriction may need a route to the administrator or an explanation of the user’s role. Do not invite a person to create a new record merely because they cannot see existing records. The message should reflect what the application knows, including uncertainty.

Show the shape of the next useful result

An empty project library can explain what a project holds without fabricating existing customer activity. If you include a sample, label it as a sample and make clear whether it is interactive. Avoid realistic counters or recent-activity items that imply real data.

Save references in Taste that demonstrate useful explanations and recovery actions. Note whether a reference is for first use, search or a failure. That label keeps an agent from applying an attractive onboarding treatment to a broken data request.

Ask for separate states in the implementation

Use this prompt for a list that already exists in your app.

Try this prompt

Review this project list. Implement distinct states for first use with no projects, active filters with no matches, loading, request failure and insufficient permission. Use the existing API responses and do not infer one cause from another. Inspect my Taste references for concise explanations and next actions. Preserve filters on failure. Label any demonstration content as sample data. Test the transition from each state to a populated list.

Check transitions, not just screenshots

Try creating the first item, clearing a filter and retrying a failed request. The empty state should disappear when its reason no longer applies. Keep a search field usable when the results area is empty so the user can change the query.

If a status message changes without moving focus, make that update available to assistive technology. Do not announce every decorative change. The useful information is the result of the action, such as no matches or a successful retry.

Sources and next steps