Hero

Minimal Centered Hero

Plain centered hero: a small eyebrow, a large headline, a description and a primary and an outline button. Theme tokens only, light and dark.

Free, MIT licenseOpen in Browse
import { CaretRightIcon } from "@phosphor-icons/react/dist/ssr"
import { cn } from "cn"

import {
  Announcement,
  AnnouncementAction,
  AnnouncementText,
} from "@/components/editorial/announcement"
import {
  Hero,
  HeroActions,
  HeroContainer,
  HeroContent,
  HeroDescription,
  HeroHeading,
} from "@/components/editorial/hero"
import { buttonVariants } from "@/components/ui/button"

// The copy: change text here, not in the markup.
const COPY = {
  announcement: {
    text: "New: release calendars",
    label: "Explore",
    href: "#",
  },
  title: "Plan the release, not the meeting about it",
  body: "Orbcore keeps the plan, the review and the handoff in one place, so your team ships without chasing each other.",
  primary: { label: "Start free", href: "#" },
  secondary: { label: "See how it works", href: "#" },
} as const

export default function MinimalHero01() {
  return (
    <Hero>
      <HeroContainer variant="stack" className="py-24">
        <HeroContent align="center">
          <Announcement href={COPY.announcement.href}>
            <AnnouncementText>{COPY.announcement.text}</AnnouncementText>
            <AnnouncementAction>
              {COPY.announcement.label}
              <CaretRightIcon aria-hidden="true" />
            </AnnouncementAction>
          </Announcement>
          <HeroHeading>{COPY.title}</HeroHeading>
          <HeroDescription className="text-muted-foreground">
            {COPY.body}
          </HeroDescription>
          <HeroActions>
            <a
              href={COPY.primary.href}
              data-slot="button"
              className={cn(buttonVariants({ size: "lg" }))}
            >
              {COPY.primary.label}
            </a>
            <a
              href={COPY.secondary.href}
              data-slot="button"
              className={cn(buttonVariants({ variant: "outline", size: "lg" }))}
            >
              {COPY.secondary.label}
            </a>
          </HeroActions>
        </HeroContent>
      </HeroContainer>
    </Hero>
  )
}

Installation

pnpm dlx shadcn add @01orbital/minimal-hero-01
npx shadcn add @01orbital/minimal-hero-01
yarn shadcn add @01orbital/minimal-hero-01
bunx --bun shadcn add @01orbital/minimal-hero-01

Free under the MIT license. Add the @01orbital registry to components.json once (install guide), then run the command.

It lands at components/blocks/hero/minimal-hero-01/index.tsx, as source you own and edit.

Usage

import MinimalHero01 from "@/components/blocks/hero/minimal-hero-01"

export default function Example() {
  return <MinimalHero01 />
}

Dependencies

npm: @phosphor-icons/react, cn. The CLI installs them for you.

Registry pieces it installs with it: