Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Geo Blocked Error Block for React

A full-screen 451 page for a title that is not licensed in the viewer's region: a tile map of six regions, solid where licensed and dashed where not, a Select that checks another region, and a collapsed note about VPNs.

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 where something can be watched, not only where it can't, with this geo blocked page for React with Base UI. It's the 451 screen Reelgarden, a film-streaming service, shows for a title that isn't licensed in the viewer's region: the page's two side rails run its full height and one band crosses the screen between two rules with a plus mark where each meets a rail, and the screen splits in two on a large display. At the end sit the code as display text, the heading, one sentence, the one Shine Button (Browse titles in your region), a Select that checks any other region and answers in a polite line, and a Collapsible about VPNs. At the start, drawn first on a large screen, is a tile map of six regions in a rough geographic arrangement: solid where the title is licensed, dashed where it isn't, the region being checked ringed, and every tile saying Available or Not available in words as well as in shape. The licensing and the example region are typed: nothing here looks up where you are. For streaming, publishing and any licence that follows the viewer.

FAQ

Does the page detect where I am?

No. Europe is a typed constant (HOME) standing in for the viewer's region, and the licensing of each region is typed in REGIONS. Nothing reads a location, an IP address or the browser's geolocation, and the sentence under the heading says so. In your app, work out the region on your server, offer a manual choice for people it gets wrong, and pass the result in.

What does Check another region do?

It answers locally. Choosing a region moves the ring on the map to its tile and writes one line, "Asia: available" or "Europe: not available", with a few of its countries in words. The line is a polite status, so a screen reader hears it, and the map keeps the same size whichever region you choose. To wire it for real, read the licence for the chosen region from your catalogue.

How is the map read without seeing it?

The tiles are a real list, one item per region, and each says Available or Not available in words as well as in shape (a tick or a dash, a solid or a dashed border). The region being checked carries aria-current as well as its ring. The map is spatial, so it never flips in a right-to-left layout.

Why mention a VPN at all?

Because people ask. The note is closed by default and says only what is true: a VPN changes the address a site sees, not where someone is, and a licence that follows the viewer's region isn't changed by it. It doesn't tell anyone to use one or not to. Edit or drop it to match your terms.

Should this page return an error status?

Yes, from your server: a component can't set it. A title withheld for licensing or legal reasons is a 451 Unavailable For Legal Reasons (some teams use 403); send it so crawlers see the right answer. Keep the page's wording the same for every blocked region.

What changes on a phone?

The copy comes first and the map under it, so the heading and the button stay on the first screen. The tiles keep their arrangement in three columns and say their state in two short lines.

  • Pro

    Country Restricted Error

    Blocked and limited

    A full-screen page for a country a service hasn't launched in: a roadmap of four planned regions with the quarter each opens, a Switch per region, an email field and a Join waitlist button that counts the regions chosen.

  • 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.

  • 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

    IP Address Blocked Error

    Blocked and limited

    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.

  • Pro

    A 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

    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.