Staaarter

Wellness Hero Section

Split-layout hero with large typography, serene imagery (a MediaSlot placeholder by default), and a floating testimonial card over the image. Perfect for yoga studios, meditation apps, and wellness retreat websites.

By Staaarter Team
Health
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its button, avatar, avatar-initials, media-slot dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/wellness-hero-section.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/health/health7.tsx instead.

Usage

The file also exports health7Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Health7, health7Demo } from "@/components/blocks/health/health7";

export default function Page() {
  return <Health7 {...health7Demo} />;
}

Props

PropTypeDefaultDescription
eyebrowstringundefinedSmall uppercase label above the heading; only rendered when set.
headingReactNodenoneLarge hero heading.
descriptionstringundefinedIntro paragraph below the heading.
image{ src: string; alt: string }undefinedHero photo; renders MediaSlot's placeholder when omitted.
testimonialTestimonialnoneQuote shown in the floating card over the image.
buttonsButtonItem[][]CTA buttons below the description.
classNamestringnoneExtra classes for the outer section element.

Types

type ButtonItem = {
  label: string;
  href?: string;
  variant?: "default" | "secondary" | "outline" | "ghost" | "link" | "destructive";
};

type Testimonial = {
  quote: string;
  name: string;
  role: string;
  avatar?: { src: string; alt: string };
};

Behavior notes

  • image defaults to undefined, which renders MediaSlot's built-in placeholder rather than a photo; pass a real { src, alt } pair to show serene wellness imagery.
  • The floating testimonial card's avatar falls back to initials (via AvatarFallback/initialsFromName) whenever testimonial.avatar is omitted.
  • buttons defaults to an empty array; each button becomes a real link via Button's render prop only when href is set, otherwise it renders as a plain, inert button.
  • eyebrow only renders when set, and only affects the heading's top margin when present.