Editorial Split Hero

Independent Studio

We build brands
worth remembering and products worth keeping.

Polaris is a product and brand studio for founders who refuse the generic. We move from first sketch to shipped in weeks, not quarters.

Polaris studio team reviewing brand direction at a workspace
Trusted by
LumenVerdantSolsticeOrbitHarborPulse
About this block

Editorial Split HeroPRO

Two-column studio hero with a two-tone headline, dual CTAs, tall image and a client wordmark strip.

Hero112: Editorial Split Hero

Studio-style two-column hero: an eyebrow label, a two-line, two-tone headline (bold black text with a muted second line), a short paragraph, a primary pill button plus a bordered secondary link, and a tall portrait image on the other side. A client wordmark strip runs beneath the fold once a logo list is supplied.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Upgrade Now

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/hero112?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/hero112?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/hero112.tsx, the badge6 component it uses for the eyebrow label, the button1 component it uses for the primary CTA pill, and their dependencies.

Quick start

The installed file exports hero112Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.

tsx
import { Hero112, hero112Demo } from "@/components/beste/block/hero112";

export default function Page() {
  return <Hero112 {...hero112Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Hero112 } from "@/components/beste/block/hero112";

export default function Page() {
  return (
    <Hero112
      label="Independent Studio"
      heading="We design brands<br /><strong>that outlast trends</strong>."
      description="A small studio for founders who want the work to speak first."
      buttons={[
        { label: "Start a project", href: "https://beste.co", variant: "primary" },
        { label: "View our work", href: "https://beste.co", variant: "outline" },
      ]}
      image={{
        src: "https://images.unsplash.com/photo-1600880292203-757bb62b4baf?w=900&h=1200&fit=crop",
        alt: "Studio team reviewing a brand direction",
      }}
      clientsLabel="Trusted by"
      clients={["Lumen", "Verdant", "Orbit"]}
    />
  );
}

Props

PropTypeDefaultDescription
labelstringEyebrow text rendered through Badge6
headingstringHeadline HTML; wrap a phrase in <strong> to render it muted, and use <br /> for a manual line break
descriptionstringSupporting paragraph, capped at max-w-md
buttonsButtonItem[][]CTA row; primary renders as a solid pill, outline as a bordered link
imageImageItemTall portrait image for the opposite column
clientsLabelstringLabel prefixing the client wordmark strip (for example "Trusted by")
clientsstring[][]Client/brand names rendered as plain text wordmarks
classNamestringExtra classes for the outer <section>
ts
type ButtonItem = {
  label: string;
  href: string;
  variant?: "primary" | "outline";
};

type ImageItem = {
  src: string;
  alt: string;
};

Behavior notes

  • heading is injected via dangerouslySetInnerHTML, so it accepts both a literal <br /> for the line break between the two headline lines and a <strong> wrapper for the muted second phrase; there are no separate line/highlight props.
  • Only the primary button variant renders through the Button1 seal-arrow pill; outline buttons are a hand-styled bordered Link, not a second Button1 tone, so their hover and focus treatment differs slightly from the primary pill.
  • The client strip only renders when clients is non-empty; it sits below a border-t divider and lays the label and wordmarks out in a row on md screens, stacked on mobile.
  • The image column is a fixed aspect-[3/4] portrait box with object-cover, so it always crops to that ratio regardless of the source image's dimensions.
  • There is no animation; every element is present at first paint.

More Hero blocks

View all Hero
PRO

hero114

Collage Hero

Split studio hero with a two-tone headline and a four-image arranged collage.

PRO

hero143

Editorial Split Hero

A light editorial hero with an oversized display heading on the left, an offset supporting paragraph and accent button on the right, and a full-bleed image band below.

PRO

hero166

Split Headline Hero

An editorial hero that breaks its display heading across two lines and slots a square image tile floating a live payment card into the gap, with the paragraph and action landing under a hairline.

PRO

hero121

Split Hero with Stats

Split hero with a big headline and CTA on the left, a divided vertical stat rail on the right, and a full-width wide image strip below.

PRO

hero135

Editorial Split Masthead

Two-pane masthead hero: a solid dark editorial panel with eyebrow, value-prop heading, supporting copy, a CTA and an availability note on one side, and a full-bleed image on the other.

PRO

hero150

Offset Image Pair Hero

Split hero pairing a statement, paragraph and two pill CTAs with a pair of captioned portrait images, the second dropped by a stagger on desktop so the column reads as an editorial spread.