Command Palette

Search for a command to run...

Docs
Sales AI Hero

Sales AI Hero

An oversized centered hero with a floating announcement pill, paired square + landscape media tiles, and a divider-flanked trusted-by logo strip.

Installation

Usage

import { SalesAiHero } from "@/components/ruixen/sales-ai-hero";
 
export default function Page() {
  return (
    <SalesAiHero
      announcement={{
        label: "New — AI replies that sound like your best rep",
        href: "#",
      }}
      title={
        <>
          Turn every conversation <br className="hidden md:block" />
          into your next closed deal.
        </>
      }
      description="Sales AI that drafts replies, scores intent, and surfaces the next best action — so your team spends time selling, not searching."
      leftMedia={
        <img
          src="/hero/portrait.jpg"
          alt="Customer portrait"
          className="size-full object-cover"
        />
      }
      rightMedia={
        <img
          src="/hero/dashboard.png"
          alt="Product dashboard"
          className="size-full object-cover"
        />
      }
      trustedBy={{
        prefix: "Trusted by revenue teams at ",
        highlight: "fast-growing",
        suffix: " companies",
        logos: [
          { name: "Northwind" },
          { name: "Lumina" },
          { name: "Apex" },
          { name: "Cobalt" },
          { name: "Meridian" },
        ],
      }}
    />
  );
}

Props

PropTypeDefaultDescription
titleReactNodeRequiredCentered headline content. Use <br /> to force a line break on desktop.
descriptionReactNode-Muted subhead rendered under the title.
announcementAnnouncement-Floating pill above the title. Renders as a link when href is provided.
leftMediaReactNode-Content for the left (portrait) media tile. Falls back to a labelled placeholder.
rightMediaReactNode-Content for the right (landscape) media tile with a subtle themed placeholder fallback.
trustedByTrustedBy | false-Divider-flanked headline plus logo strip below the media. Pass false to hide.
classNamestring-Extra classes appended to the outer <section>.

Types

interface Announcement {
  label: string;
  href?: string;
  icon?: React.ReactNode;
}
 
interface LogoItem {
  name: string;
  src?: string;
  logo?: React.ReactNode;
  href?: string;
}
 
interface TrustedBy {
  prefix?: string;
  highlight?: string;
  suffix?: string;
  logos: LogoItem[];
}

Features

  • Floating announcement pill — soft elevated card with a lightning glyph, copy, and filled arrow chip; converts to a Link when href is supplied.
  • Oversized display headline — scales from text-[44px] on mobile to text-[88px] on lg, with tracking-[-0.04em] and a tight 1.02 line-height to mimic editorial SaaS hero typography.
  • Paired media tiles — a 1:3 split: a portrait tile on the left and a 16:9 landscape tile on the right with a built-in subtle themed gradient placeholder. Both accept any ReactNode, so drop in <img>, <video>, or a custom inline mock.
  • Divider-flanked trusted-by line — two bg-border rules pinch a centered headline, with a bold highlight slot for stats like "10,000+".
  • Logo strip with vertical separators — auto-inserted h-6 w-px bg-border rules between logos at md+; logos are desaturated with [filter:brightness(0)_saturate(0)] (inverted in dark mode) to feel uniform.
  • Theme adaptive — every surface uses shadcn tokens (bg-background, bg-card, bg-muted, text-foreground, text-muted-foreground, border-border), so the block inherits your theme without overrides.