Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

IP Address Blocked Error Block for React

A full-screen blocked-address page for a bot-protection layer: a review request form (organisation and reason) beside the evidence: the address with Copy, a five-part bar for 5 of 5 failed sign-ins in 10 minutes, the five attempts and when the block lifts.

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

Show a blocked visitor the evidence and a way to ask for a review, with this blocked address page for React with Base UI. It's the block screen of Moatwell, a bot-protection layer: a whole screen with the page's rails and one band across it, and one framed card ruled by Guides with two columns split by a divider. At the start, Request a review: an organisation in an Input and a reason in a Textarea, checked when the form is sent, and the one Shine Button. At the end, the evidence: the address (203.0.113.42, from a range reserved for documentation) with a Copy Button, a five-part bar for "5 of 5 failed sign-ins in 10 minutes (the limit is 5)", the five attempts in ruled rows, and the time the block lifts on its own, derived from the typed times. It's built from Input, Textarea, Field, Copy Button, Shine Button and Guides, with a CSS entrance only. For any service that blocks addresses.

FAQ

What does Request a review do, and what stays in the page?

Pressing it with an empty organisation or a reason that says nothing names each problem under its field and focuses the first. Otherwise the button waits under a second, and the form is replaced, in the same space, by what was recorded: "Review requested", a reference and the organisation, with Edit request to go back. Nothing is sent. To wire it for real, post the two fields and the address to your abuse desk where the code says so, and show the reference your system gives back.

Where does 'Unblocks on its own at 14:32 UTC' come from?

From the typed attempts: the rule says five failures in ten minutes block an address, so the block lifts when the oldest attempt (14:22:05) is ten minutes old and only four remain in the window. The page adds the window to the first time and prints the minute, so the text and the data can't disagree. If your rule is a fixed cooldown, replace UNBLOCKS with the time your system stored.

Is the address real?

No. It is in 203.0.113.0/24, a range reserved for documentation (RFC 5737), so it can never belong to a real visitor. In your app show the visitor's own address, and be careful with what else you show: the five attempts here list the accounts that were tried, which is fine for the person who made them, but not for a stranger behind a shared address.

Why does the form come before the evidence?

Because on a phone the way forward has to be on the first screen: the heading says what happened, the form follows, and the evidence (the long part) comes after it. On a wide screen the form is at the start of the card and the evidence at the end, in the same order a keyboard or a screen reader meets them.

Does this return a 403 status?

No: a component can't. Send the real HTTP status from your server or edge, so clients, monitors and crawlers see a 403 (or a 429 for a pure rate limit) and not a 200 with an error drawn on it.

Does Copy copy the address?

Yes: it writes the address to the clipboard and a polite status line says "Copied 203.0.113.42." If the browser refuses, the line says so and asks you to select the address by hand.

  • Pro

    Invalid Token Error

    Sign-in and identity

    A full-screen invalid-token page for an identity API: three ruled checks (Format failed with the parts drawn, Signature and Expiry not checked), a masked fingerprint to copy, Sign in again, and a Report to security list of exactly what a report would attach.

  • Pro

    403 Forbidden Error

    Locked and removed

    A full-screen 403 page for a team wiki: a door drawn as the zero of 403, the heading 'Ask someone who can say yes', the three workspace admins in a framed list with a Copy email button each, and a way back to the wiki.

  • Pro

    Account Suspended Error

    Locked and removed

    A full-screen page for a suspended seller account: the reason, the day and a copyable reference, a Submit an appeal button that opens a Dialog with a note field, and a read-only Steps list that moves to Appeal sent.

  • Pro

    Rate Limit Error

    Blocked and limited

    A full-screen 429 for an API key over its limit: a 10 by 10 grid of the last 60 seconds of requests, the Retry-After header worked out from the oldest, and a demo clock that empties the oldest cells so Retry works.

  • Pro

    A full-screen permission page for a design-system manager: a role ladder of four rising steps with you at Viewer and Admin marked as needed, 'Two roles up' in words, and a Request access dialog that records a note and an owner in local state.

  • Pro

    Age Restricted Error

    Blocked and limited

    A host page and the age gate in front of it: an alert dialog with two Tabs (a checkbox, or a date of birth in three selects) that works the age out against a fixed day, stores nothing, and unblurs the drawn page behind it when it passes.