shadcn.io is not affiliated with official shadcn/ui
Planned Maintenance Progress Error Block for React
A full-height maintenance page for an online bank that shows a five-segment progress bar with the window's start and expected return, and a Check again button that reports a typed result.
Installation
Overview
Keep members calm while a service is down on purpose, with this maintenance block for React with Base UI. It's the "back soon" page of Willowbank, a credit union's online banking: the page's rails run its full height and one band crosses the screen between two rules with a plus mark at each end. The product's mark, the heading and one sentence that says what is still working come first. Under them a ruled band runs from rail to rail and holds a Progress bar cut into five segments, how much of the window has passed, the time the work started and the time banking is expected back, all in UTC. Below it a Shine Button, the only colored control, says "Check again", and a ghost Button links to the status page. It's built from Progress, Shine Button, Button and Guides, with a CSS entrance only. For banks, billing portals and any app that announces its maintenance in advance.
FAQ
Where do the times and the percent come from?
They are typed. WINDOW_START and WINDOW_END are the maintenance window and AS_OF is the moment the page was drawn, all ISO times in UTC. The percent is worked out from those three, so the bar, the "65% done" text and the clock times always agree, and nothing reads the clock, so the page looks the same on the server and in every time zone. In your app, pass the real window, and use the current time for AS_OF if you want the bar to move.
What does Check again do?
It waits 600 ms behind a busy button, then says "Checked at 15:17 UTC: still in maintenance", the same typed result every time, and adds that this demo asked nothing. Focus moves to that line, which is a polite status region present from load, so a screen reader hears the result. Replace the wait with a request to your health endpoint and show what it answers.
Which status code should the server send?
A planned outage is a 503 Service Unavailable, ideally with a Retry-After header holding the expected return time. A 200 would let search engines index the notice as your page, and a 500 says something broke rather than something is planned. A component can't set the status: return it from your server or edge when the maintenance flag is on.
Does the bar show the real work done?
It shows how much of the window has passed, not the work finished, which a page seldom knows. That's why the copy says "Maintenance progress" next to the start and the expected return rather than promising a finish time. The bar is decorative for assistive technology; the percent and both times are in text beside it.
Related
- Pro
Scheduled Downtime Panel Error
MaintenanceA maintenance notice for a payroll service as one framed panel: a clock you scrub through the 02:00 to 06:00 UTC window drives the time left, a progress bar and four tasks that read Done, Running or Queued.
- Pro
Region Migration Status Error
MaintenanceA full-height status page for cloud storage moving an account between regions: a drawn move whose dashes run three cycles, and an accordion of five steps that each say what they do and what stays available.
- Pro
500 Server Error
Server and outagesA full-height 500 page for an event-ticketing site: the heading, a copyable reference and time, a Try again that honestly keeps failing, and a framed figure of the request's path with the failed stop marked.
- Pro
Under Construction Notify Error
MaintenanceA full-height holding page for a marketplace that is not open yet: an email form that checks itself and notes the address in place, beside the four phases of the build as a vertical Steps with a bar for the schedule.
- Pro
Banner Stack Window Error
In-app errorsA banner stack in an on-call console window: a critical banner that cannot be dismissed, a warning and an info banner that fold away, and a Dismissed row that restores them, in a window that never changes height.
- Pro
Version Mismatch Ruler Error
MaintenanceA full-height page for a web app tab running a retired version: a ruler of five releases with the supported range shaded and You are here marked, a radio group to read each release, three changes in 5.0 and a reload button.