Elements

Components / Website

Page Header

Three interior page header patterns inspired by Mode's comparisons and customers pages: adapted to Instant Strata brand tokens. Pair the featured header with the Story Grid for the story index below it.

Split header

Dark forest background with copy and CTA on the left, and a faded competitor grid with a centred brand mark on the right: matching the Mode comparisons hero layout.

Platform comparison

How Instant Strata compares

The search for modern strata management software that prioritises speed, flexibility and transparency is hard. See how Instant Strata stacks up against legacy tools and fragmented workflows.

Editorial header

Off-white background with a tall photo on the right and headline plus body copy anchored bottom-left: matching the Mode customers page layout.

Strata managers collaborating in a bright office

Trusted by modern buildings

When every owner and committee pulls from the same trustworthy records, you can be confident better decisions are on the way.

Featured header

White background with a portrait photo and logo badge on the left, eyebrow, title, body and CTA on the right: matching Mode's featured customer spotlight below the logo strip.

Harbourview strata manager on site
Harbourview

Featured customer

The strata team at Harbourview delivers data from the centre

How Harbourview Towers drives impact with their management team at the centre of every building decision.

Installation

bash
npx shadcn add https://raw.githubusercontent.com/levi-putna/elements/main/registry/page-header/registry.json

Split usage

tsx
import {
  PageHeaderSplit,
  PageHeaderAction,
} from "@/components/ui/page-header"

export function ComparisonsPage() {
  return (
    <PageHeaderSplit
      eyebrow="Platform comparison"
      title="How Instant Strata compares"
      description="The search for modern strata management software that prioritises speed, flexibility and transparency is hard. See how Instant Strata stacks up against legacy tools and fragmented workflows."
      actions={
        <PageHeaderAction href="/demo" onDark>
          Request demo
        </PageHeaderAction>
      }
    />
  )
}

Editorial usage

tsx
import {
  PageHeaderEditorial,
  PageHeaderEditorialImage,
  PageHeaderAction,
} from "@/components/ui/page-header"

export function CustomersPage() {
  return (
    <PageHeaderEditorial
      title="Trusted by modern buildings"
      description="When every owner and committee pulls from the same trustworthy records, you can be confident better decisions are on the way."
      actions={
        <PageHeaderAction href="/demo">Request demo</PageHeaderAction>
      }
      visual={
        <PageHeaderEditorialImage
          src="/img/people/2.webp"
          alt="Strata managers collaborating in a bright office"
        />
      }
    />
  )
}

Featured usage

tsx
import {
  PageHeaderFeatured,
  PageHeaderFeaturedImage,
  PageHeaderAction,
} from "@/components/ui/page-header"

export function FeaturedStory() {
  return (
    <PageHeaderFeatured
      title="The strata team at Harbourview delivers data from the centre"
      description="How Harbourview Towers drives impact with their management team at the centre of every building decision."
      actions={
        <PageHeaderAction href="/stories/harbourview">Read story</PageHeaderAction>
      }
      visual={
        <PageHeaderFeaturedImage
          src="/img/people/3.webp"
          alt="Harbourview strata manager on site"
          logo={<span className="text-sm font-semibold text-forest">Harbourview</span>}
        />
      }
    />
  )
}

PageHeaderSplit props

PropTypeDefaultDescription
eyebrowstring-Small caps label above the headline: rendered in lime on the dark background.
titlestring-Primary page title in Young Serif.
descriptionstring-Supporting paragraph beneath the title.
actionsReactNode-Call-to-action buttons. Use PageHeaderAction with onDark for the split variant.
visualReactNode-Right-hand visual slot. Defaults to PageHeaderSplitVisual.
classNamestring-Additional classes on the outer header element.

PageHeaderEditorial props

PropTypeDefaultDescription
titlestring-Primary page title in Young Serif.
descriptionstring-Supporting paragraph beneath the title.
actionsReactNode-Optional calls-to-action below the copy.
visualReactNode-Right-hand photo slot. Use PageHeaderEditorialImage.
classNamestring-Additional classes on the outer header element.

PageHeaderSplitVisual props

PropTypeDefaultDescription
itemsstring[]-Faded labels arranged around the centre brand mark. Eight items fill the outer grid cells.
brandstring"IS"Centre brand mark text.
classNamestring-Additional classes on the visual wrapper.

PageHeaderEditorialImage props

PropTypeDefaultDescription
srcstring-Image source URL.
altstring-Accessible alt text for the photo.
classNamestring-Classes on the rounded wrapper div.
imgClassNamestring-Classes on the inner img element.

PageHeaderFeatured props

PropTypeDefaultDescription
eyebrowstring"Featured customer"Small caps label above the headline.
titlestring-Spotlight headline in Young Serif.
descriptionstring-Supporting paragraph beneath the title.
actionsReactNode-Call-to-action buttons below the copy.
visualReactNode-Left-hand photo slot. Use PageHeaderFeaturedImage.
classNamestring-Additional classes on the outer header element.

PageHeaderFeaturedImage props

PropTypeDefaultDescription
srcstring-Image source URL.
altstring-Accessible alt text for the photo.
logoReactNode-Logo or mark rendered in the top-right corner.
classNamestring-Classes on the portrait wrapper.
imgClassNamestring-Classes on the inner img element.

PageHeaderAction props

PropTypeDefaultDescription
hrefstring-Link destination.
variant"primary" | "outline""primary"Filled or bordered button style.
onDarkbooleanfalseWhen true, uses off-white fill on dark headers (split variant).
classNamestring-Additional classes on the anchor.