Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Services Status Error Block for React

A hosting platform's status as one framed panel: six services with a shape and a word for each state, a summary counted from them, an Affected only filter that holds the panel's height, and a Refresh status button.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Tell people which parts of your product are down, with this services status error for React with Base UI. It's a panel, not a whole page: a short header over one hairline frame with a plus mark on each corner, for the place in your app where something stopped working. The summary band counts the services for you ("2 down, 1 degraded") with a Status icon, the only token color on the panel, and a Toggle Group switches the list between All services and Affected only. The list has a row per service, its name and what it covers at the start, its state at the end as a shape and a word: a solid square for operational, an outline triangle for degraded and a cross for down, and heavier type for the worse states, so nothing depends on a color. Shine Button Refresh status is the one colored control; it waits a moment and says what it found. The status page and subscribe are plain links in the foot, and the whole panel is built from Toggle Group, Status, Shine Button and Guides, with a CSS entrance only. For a dashboard's outage state, a settings page or the top of a docs site.

FAQ

Does it check anything for real, and how do I wire it?

No. The six services are typed at the top of the file in SERVICES, and Refresh status waits 600 ms and reports "no change", so a viewer can run it as often as they like. To wire it, fetch your status API (or monitoring provider) in the handler where the code says so, replace SERVICES and the checked time with what it returns, keep the busy state until it answers, and say what changed in the status line. The summary, the counts and the filter are all computed from the list, so they follow.

Does Affected only change the height of the panel?

No. Behind the visible list sits an unseen copy of every row that holds the height, so switching the filter never moves the panel or the page below it. The hidden services are counted in a line under the list ("3 operational services hidden"), and a polite status message says how many services are shown.

How can you tell the states apart without color?

Each state has a shape and a word: a solid square and "Operational", an outline triangle and "Degraded", a cross and "Down". The words get heavier as the news gets worse, from muted to medium to semibold. The one color on the panel is the status token on the summary icon, and the words next to it say the same thing, so the page reads the same in grayscale, in dark mode and for people who can't tell red from green.

What does Refresh status do while it waits?

It shows a spinner for a moment, keeps its size so nothing shifts, then moves focus to the status line, which says "Checked again at 14:05 UTC: no change" and that a real check would ask your status API. The button disables itself while it waits, which drops keyboard focus, so focus goes to the result instead of to the page.

Is it usable with a keyboard and a screen reader?

Tab reaches Refresh status, the toggle, the status line's two links in order. The toggle is a group of two named buttons, one pressed at a time. The toggle group moves with the arrow keys and follows the page's direction. Each row is a list item that reads its name, what it covers and its state as one line, and the status line is a polite live region.

Should an error page promise that someone is fixing it?

Only say what you know. The panel shows what is down and when it last checked, and leaves "our team is working on it" for a status page that a person updates. Link yours where the code has href="#", and return a real 503 from the server for the page this panel sits on, so browsers and search engines don't treat the outage as content.

  • Pro

    API Uptime Strips Error

    Server and outages

    A full-screen outage page for an API host: the display 503, a notify-me form that saves in the page, and four APIs as rows of thirty day-cells with a shape and a word for today and an uptime counted from the minutes.

  • Pro

    A full-screen page for one failing service in a marketplace: a framed map of five services joined by hairlines, a radio group that opens each service's panel, and a list of what still works counted from the dependencies.

  • Pro

    A full-screen page for a live connection that dropped and fell back: three signal bars, three transport rows with a shape and a word each, Reconnect now as a short scripted attempt, and a Keep using polling toggle.

  • Pro

    A full-screen page for a database that refuses connections: Retry now and a switch that retries by itself on a press-started countdown, four pool cells and the backoff schedule drawn to scale.

  • Pro

    A services callout for a cloud platform: a green dot and a heading that counts "All 12 of 12 services operational" from the data, a status-page link, and a matrix of the twelve services on shared hairlines.

  • Pro

    Region Status Footer

    Trust and compliance

    A split footer for a webhook-relay API: a subscribe-to-updates popover at the start, a framed figure of three regions with latency and thirty-day bars at the end.