# First-Run Welcome Screen

> First-run onboarding empty state with a layered rocket illustration, welcome badge, create-project button, take-the-tour action, and reassurance hints.

A shadcn/ui block from the [@7ovr](https://7ovr.com) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/7ovr/onboarding-4).

- Page, with a live preview: https://shadcn.exchange/r/7ovr/onboarding-4
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/7ovr/onboarding-4-light-c2239d4b89a36e97.png
- Registry item: https://7ovr.com/r/onboarding-4.json
- Categories: onboarding
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://7ovr.com/r/onboarding-4.json
```

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

## Dependencies

- npm packages: `@base-ui/react`
- Registry items: `badge`, `button`

## Files

### `registry/blocks/onboarding/4/onboarding-block.tsx`

```tsx
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
import { IconPlaceholder } from "@/components/icons/icon-placeholder"

type IconProps = { className?: string; size?: number | string }

const hints = [
  {
    icon: (p: IconProps) => (
      <IconPlaceholder
        lucide="Flashlight"
        tabler="IconBulb"
        hugeicons="FlashlightIcon"
        phosphor="Flashlight"
        remixicon="RiFlashlightLine"
        {...p}
      />
    ),
    label: "Set up in under two minutes",
  },
  {
    icon: (p: IconProps) => (
      <IconPlaceholder
        lucide="Sparkles"
        tabler="IconSparkles"
        hugeicons="SparklesIcon"
        phosphor="Sparkle"
        remixicon="RiSparkling2Line"
        {...p}
      />
    ),
    label: "Invite your team anytime",
  },
]

export default function OnboardingBlock() {
  return (
    <section className="flex min-h-svh w-full items-center justify-center bg-background px-6 py-16 text-foreground">
      <div className="flex w-full max-w-md flex-col items-center text-center">
        <div className="relative flex size-20 items-center justify-center">
          <div
            className="absolute inset-0 rounded-lg border border-border bg-muted"
            aria-hidden="true"
          />
          <div
            className="absolute inset-1 rounded-md border border-border bg-background"
            aria-hidden="true"
          />
          <IconPlaceholder
            lucide="Rocket"
            tabler="IconRocket"
            hugeicons="RocketIcon"
            phosphor="Rocket"
            remixicon="RiRocket2Line"
            className="relative size-8 text-foreground"
            aria-hidden="true"
          />
        </div>

        <Badge variant="secondary" className="mt-6">
          Welcome
        </Badge>
        <h1 className="mt-4 font-heading text-2xl font-bold tracking-tight text-balance sm:text-3xl">
          Let us get your workspace set up
        </h1>
        <p className="mt-3 text-pretty text-muted-foreground">
          You are a few steps away from your first project. Create one now or
          take a quick tour to see how everything fits together.
        </p>

        <div className="mt-8 flex w-full flex-col gap-3 sm:flex-row sm:justify-center">
          <Button size="lg">
            Create Your First Project
            <IconPlaceholder
              lucide="ArrowRight"
              tabler="IconArrowRight"
              hugeicons="ArrowRightIcon"
              phosphor="ArrowRight"
              remixicon="RiArrowRightLine"
              data-icon="inline-end"
              aria-hidden="true"
            />
          </Button>
          <Button size="lg" variant="outline">
            <IconPlaceholder
              lucide="BookOpen"
              tabler="IconBook2"
              hugeicons="BookOpenIcon"
              phosphor="BookOpen"
              remixicon="RiBookOpenLine"
              data-icon="inline-start"
              aria-hidden="true"
            />
            Take The Tour
          </Button>
        </div>

        <div className="mt-8 flex flex-wrap items-center justify-center gap-x-5 gap-y-2">
          {hints.map((hint) => (
            <span
              key={hint.label}
              className="flex items-center gap-2 text-xs text-muted-foreground"
            >
              <hint.icon className="size-4 shrink-0" aria-hidden="true" />
              {hint.label}
            </span>
          ))}
        </div>
      </div>
    </section>
  )
}
```
