# 8-bit 404 Undead

> Cursed 404 page with pixel undead character.

A shadcn/ui block from the [@8bitcn](https://www.8bitcn.com) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/8bitcn/not-found3).

- Page, with a live preview: https://shadcn.exchange/r/8bitcn/not-found3
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/8bitcn/not-found3-light-f9db84ce3249dc8c.png
- Registry item: https://www.8bitcn.com/r/not-found3.json
- Categories: layout
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://www.8bitcn.com/r/not-found3.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- Registry items: `badge`, `button`

## Files

### `components/ui/8bit/blocks/not-found3.tsx`

```tsx
import Link from "next/link";
import Image from "next/image";

import { cn } from "@/lib/utils";

import { Badge } from "@/components/ui/8bit/badge";
import { Button } from "@/components/ui/8bit/button";

import "@/components/ui/8bit/styles/retro.css";

interface NotFound3Props {
  badge?: string;
  className?: string;
  cta?: string;
  ctaSecondary?: string;
  description?: string;
  href?: string;
  hrefSecondary?: string;
  imageSrc?: string;
  title?: string;
}

export default function NotFound3({
  title = "This page should have stayed buried",
  description = "Looks like this route crawled out of the crypt and disappeared again.",
  badge = "CURSED ROUTE",
  cta = "Return Home",
  ctaSecondary = "Browse Blocks",
  href = "/",
  hrefSecondary = "/docs/blocks",
  imageSrc = "/images/8bit-undead.png",
  className,
}: NotFound3Props) {
  return (
    <div
      className={cn(
        "retro grid w-full place-content-center gap-5 bg-background px-4 py-16 text-center md:py-24",
        className,
      )}
    >
      {badge && (
        <div className="flex justify-center">
          <Badge variant="secondary">{badge}</Badge>
        </div>
      )}

      <div className="retro font-bold text-6xl tracking-tight sm:text-8xl">
        404
      </div>

      {imageSrc && (
        <div className="flex justify-center -mt-10">
          <Image
            alt="404"
            className="pixelated"
            height={200}
            src={imageSrc}
            width={200}
          />
        </div>
      )}

      <h1 className="retro font-bold text-xl tracking-tight sm:text-2xl">
        {title}
      </h1>

      <p className="retro text-muted-foreground text-[9px]">{description}</p>

      <div className="flex flex-wrap justify-center gap-4">
        <Button asChild>
          <Link href={href}>{cta}</Link>
        </Button>
        {ctaSecondary && hrefSecondary && (
          <Button asChild variant="outline">
            <Link href={hrefSecondary}>{ctaSecondary}</Link>
          </Button>
        )}
      </div>
    </div>
  );
}
```

### `components/ui/8bit/styles/retro.css`

```css
@import url("https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap");

.retro {
  font-family:
    "Press Start 2P",
    system-ui,
    -apple-system,
    sans-serif;
  line-height: 1.5;
  letter-spacing: 0.5px;
}

.pixelated {
  image-rendering: pixelated;
  image-rendering: crisp-edges;
}
```
