SayCraft

Ideas into working products

Empty-State Design: Real References and Six Worked Interface States

Design empty states for a project dashboard with concrete copy, recovery actions, real Carbon examples, and checks that distinguish empty data from failed loading.

An empty state should explain why the space has no content and offer the next action that fits that cause. First use, zero search results, missing access, and failed loading require different messages. Determine the state first; then write the title, explanation, and action.

The same blank panel can mean different things

Imagine a project dashboard that displays “No projects” whenever its list is empty. A new workspace owner needs to create a first project. A returning member may have selected an overly narrow filter. Another person may lack access. A network failure may mean the system has not loaded any evidence at all. One message cannot describe all four correctly.

This worked redesign follows that dashboard from first use to recovery. The output is a set of copy and behavior specifications that a designer and engineer can implement together. An illustration can make an empty panel more approachable, but it cannot determine which state the application is actually in.

IBM Carbon’s public empty-state pattern provides useful real examples: a title explains the situation, supporting text points to a relevant next action, and imagery is optional. Its distinction between no-data, user-action, and error-management states is more transferable than copying an attractive drawing.

Choose the state from evidence

Do not derive “no projects exist” from an empty array while a request is pending. Wait for a successful response and use the correct scope. Zero projects visible to this member does not establish that the entire workspace is empty.

For the worked dashboard, a successful authorized response supplies the displayed records, active filters, and whether the user can create a project. The product does not expose hidden project counts to unauthorized members. A failed request has its own error state; loading has its own pending state. Use “your first project” only when the service has reliable first-use evidence for the stated scope; otherwise use the neutral “Create a project.”

The priority matters. If access is denied, clearing filters will not fix it. If loading fails, creating a new project is not a sensible recovery action. The table gives the state conditions before the copy, so the design cannot quietly turn unknown data into a confident claim.

Choose the state from evidence
StateEvidence requiredUseful next action
No visible projects; creation allowedSuccessful unfiltered response; no visible projects; user can createCreate project
No accessible projectsSuccessful response; nothing visible; user cannot createExplain how to obtain access
No matching resultsSuccessful filtered response returns zero matchesAdjust or clear filters
LoadingRequest still pendingShow progress without claiming emptiness
Load failureRequest failed; content unknownRetry the read request
Everything completedSuccessful task response shows no remaining tasksConfirm completion; offer completed items if useful

Write copy that explains the next move

The old “No data found” panel provides neither a cause nor a path forward. Replace it with copy specific to the task. For a creator, explain what a project will contain; for a filtered list, preserve the query and make it editable.

The action label should name the operation. “Get started” is less informative than “Create project,” especially when the page already contains other links. Keep secondary help quieter than the action that changes the state.

The following copy assumes the described behavior exists. “Request access” needs a real request route and a recipient; otherwise use an accurate contact instruction. “Your changes are saved” is appropriate only when persistence has been confirmed.

Before: No data found / After: cause, useful context, specific action
ConditionTitle and supporting copyAction
Creator with no visible projectsCreate a project. Keep the brief, tasks, and files for one piece of work together.Create project
Filter: owner Maya; status ActiveNo projects match these filters. Try another owner or include completed projects.Clear filters
No accessible recordsNo projects are available to you here. Ask the workspace owner to add you to a project.View workspace contact
Read request failedProjects could not load. Try loading this list again.Retry
All assigned tasks completedYou have no remaining tasks. Completed work is still available in your history.View completed tasks

Design what happens after the button

Creating a project should open the project form, not a generic marketing tour. When the person cancels, return them to the same dashboard. When creation succeeds, show the new project and place focus or navigation predictably. If creation fails, retain their input and explain the error within that flow.

Clearing filters should remove the active constraints and refresh the list. If the unfiltered result is also empty, switch to the appropriate no-project state. Do not keep saying “no matches” after the query no longer exists.

For a retry, maintain the page context and show that loading is in progress. If the request fails again, keep the recovery action available. When previously loaded content remains visible, distinguish it as potentially stale rather than replacing it with a misleading first-use illustration.

Design what happens after the button
ActionTransitionAcceptance check
Create projectEmpty → form → successful projectNew project appears once; cancelled form returns to the dashboard
Clear filtersNo matches → loading → results or no-visible-projects stateAll displayed filter chips clear; copy matches the new response
RetryFailure → loading → results or failureNo duplicate write occurs; read status is understandable
View workspace contactNo access → authorized contact informationNo inaccessible project names or counts leak
View completed tasksCompletion → completed listThe action shows completed items, not the original empty view

Use illustration and layout with a purpose

Carbon’s examples demonstrate that a compact panel can work with text and an action alone. Its guidance also considers smaller tiles and side panels, where large artwork can overwhelm the useful content. Apply that idea to the dashboard: keep the title, explanation, and button together where the project list would normally appear.

Use an illustration only when it contributes orientation or recognition. A folder illustration can support a first-project state; the same celebratory artwork would be inappropriate for a failed load. Avoid placing several equal primary buttons in adjacent empty cards, which makes the next step harder to choose.

On a narrow screen, the action should remain near its explanation. Check long project terms, text zoom, and translated copy if supported. Treat purely decorative images as decorative for assistive technology; the meaningful state and available action must remain in text.

Test state changes, not just screenshots

Prepare fixtures for each state and walk the transitions. A screenshot of an attractive zero-state cannot show whether the panel flashes incorrectly during loading, loses filters after retry, or sends a read-only member to an unusable creation form.

Observe a first-time user creating one project and a returning user recovering from zero search results. Ask what they think the page means before they act. If they interpret a filtered result as deleted data, the design still has a problem even when the button works.

Keep a compact specification with state condition, title, explanation, action, destination, and expected next state. That record prevents designers and engineers from using “empty state” as a catch-all for missing information.

Test state changes, not just screenshots
FixtureWhat to verify
Slow initial responseLoading appears; no-project copy does not flash prematurely
Creator with zero recordsCreate action is available and completes the intended flow
Read-only member with zero recordsNo unusable create action; access guidance is accurate
Zero filtered resultsFilters remain visible and can be cleared
Network failure then recoveryRetry preserves context and updates the state after success
Keyboard and text zoomAction is reachable, focus visible, and message readable without clipped text

References

SayCraft is built and operated by Ame ame. Find me on X. Questions or corrections: hello@saycraft.ai.

Explore more articles