Split Panel About

Inside Polaris

We build brands that refuse to blend in: loud, deliberate, unmistakable.

Polaris is a creative studio for founders who would rather divide a room than bore it. Strategy, identity, and motion under one roof, shipped without the agency theater.

Start a project
Polaris creative team reviewing concepts at the studio
  • One senior team from kickoff to launch.
  • Brand systems documented, not just delivered.
  • Fixed scope, fixed price, zero surprise invoices.
  • Motion and identity built to move together.

120+

Brands shipped since 2017.

4.9

Average client rating.

About this block

Split Panel AboutPRO

A hard light/dark split about panel: dark statement side and a light image-and-facts side.

About47: Split Panel About

A hard two-panel split: a dark statement side (badge, heading, description, CTA) on the left and a light image-and-facts side (photo, checklist of commitments, stat pair) on the right, both inside a single rounded, overflow-hidden card.

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/about47?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/about47.tsx, the badge6 and button1 components it uses for the eyebrow label and CTA button, and its dependencies.

Quick start

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

tsx
import { About47, about47Demo } from "@/components/beste/block/about47";

export default function AboutPage() {
  return <About47 {...about47Demo} />;
}

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

tsx
import { About47 } from "@/components/beste/block/about47";

export default function AboutPage() {
  return (
    <About47
      label="Inside the studio"
      heading="We build products that refuse to blend in."
      description="A small team for founders who want to move fast without the agency theater."
      button={{ label: "Start a project", href: "https://beste.co" }}
      image={{
        src: "https://images.unsplash.com/photo-1542744173-8e7e53415bb0?w=1200&h=900&fit=crop",
        alt: "Team reviewing concepts at the studio",
      }}
      commitments={[
        "One senior team from kickoff to launch.",
        "Documented systems, not just deliverables.",
        "Fixed scope, fixed price.",
      ]}
      stats={[
        { value: "120+", label: "Products shipped." },
        { value: "4.9", label: "Average client rating." },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
labelstring–Eyebrow badge text on the dark panel
headingstring–Statement heading, rendered as plain text
descriptionstring–Supporting paragraph under the heading
buttonActionLink–CTA rendered as a Button1 on the dark panel
imageImageItem–Photo on the light panel
commitmentsstring[][]Checklist items on the light panel, each with a check icon
statsStatItem[][]Two-column stat pair at the bottom of the light panel
classNamestring–Extra classes for the outer <section>
ts
type ActionLink = { label: string; href: string };
type ImageItem = { src: string; alt: string };
type StatItem = { value: string; label: string };

Behavior notes

  • The two panels are lg:grid-cols-2 inside one overflow-hidden rounded-md wrapper; below lg they stack, statement panel first.
  • The dark panel passes labelClassName="text-background/70" to Badge6 and tone="primary" to Button1 so both remain legible against the bg-foreground background instead of using their default light-surface styling.
  • The dark panel uses justify-between on a full-height flex column, pinning the button to the bottom of the panel regardless of how much heading/description text there is, while the light panel just stacks its blocks top to bottom.
  • The stats grid on the light panel is a fixed grid-cols-2 regardless of how many stat items are passed; more than two items wrap to a second row instead of the grid expanding to more columns.
  • Commitments render only a check icon plus text (no numbering), while the light panel's image, if omitted, simply collapses that space rather than leaving a placeholder box.

More About blocks

View all About
PRO

about63

Studio Story Split

PRO

about55

Four Parts About

PRO

about5

Image & Text Split

Get Pro access