Wide Banner & Product Cards

Maison de Parfum

Scent as autobiography

An independent perfume house creating small-batch fragrances from rare, ethically sourced botanicals. No focus groups. No celebrity endorsements. Just extraordinary scent.

Perfume atelier with glass bottles

Terre Noire

2013
Woody Oriental
Top — Black pepper, bergamot
Heart — Oud, incense, iris
Base — Vetiver, amber, musk

Jardin Sauvage

2016
Green Floral
Top — Fig leaf, galbanum
Heart — Jasmine sambac, violet leaf
Base — Oakmoss, white cedar

Sel Marin

2019
Aquatic Aromatic
Top — Sea salt, lemon zest
Heart — Seaweed absolute, lavender
Base — Driftwood, ambergris

Sourced Ingredients

Oud

Assam, India

Rose de Mai

Grasse, France

Sandalwood

Mysore, India

Bergamot

Calabria, Italy

Jasmine Sambac

Tamil Nadu, India

Vetiver

Haiti

About this block

Wide Banner & Product CardsPRO

Centered header with wide panoramic image, product cards with layered attributes, and sourcing grid.

About29: Wide Banner & Product Cards

Centered header above a wide panoramic banner image, a three-column grid of product cards with a layered notes structure, and a sourcing grid of raw ingredients with their origin. Modeled on a perfume house's "about" page, but the shape works for any maker with a structured product line and a sourcing story.

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

Base UI flavor

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

This installs the block to components/beste/block/about29.tsx and the badge and button shadcn/ui primitives it depends on.

Quick start

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

tsx
import { About29, about29Demo } from "@/components/beste/block/about29";

export default function AboutPage() {
  return <About29 {...about29Demo} />;
}

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

tsx
import { About29 } from "@/components/beste/block/about29";

export default function AboutPage() {
  return (
    <About29
      badge={{ label: "Maison de Parfum", variant: "secondary" }}
      heading="Scent as autobiography"
      description="Small-batch fragrances from rare, ethically sourced botanicals."
      image={{
        src: "https://images.unsplash.com/photo-1626277890580-1924372c21fa?w=1200&h=500&fit=crop",
        alt: "Perfume atelier with glass bottles",
      }}
      fragrances={[
        {
          name: "Terre Noire",
          family: "Woody Oriental",
          year: "2013",
          notes: { top: "Black pepper, bergamot", heart: "Oud, incense, iris", base: "Vetiver, amber, musk" },
        },
        {
          name: "Jardin Sauvage",
          family: "Green Floral",
          year: "2016",
          notes: { top: "Fig leaf, galbanum", heart: "Jasmine sambac, violet leaf", base: "Oakmoss, white cedar" },
        },
      ]}
      ingredients={[
        { name: "Oud", origin: "Assam, India" },
        { name: "Rose de Mai", origin: "Grasse, France" },
      ]}
      buttons={[{ label: "Discovery Set", href: "https://beste.co" }]}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string; variant?: "default" | "secondary" | "outline" }Eyebrow badge above the heading
headingstringCentered section heading
descriptionstringCentered lead paragraph under the heading
image{ src: string; alt: string }Wide panoramic banner below the header
fragrancesFragrance[][]Product cards with layered notes, below the banner
ingredientsIngredient[][]Sourcing grid of raw materials and origins
buttonsButtonItem[][]Centered CTA row at the bottom
classNamestringExtra classes for the outer <section>
ts
type Fragrance = {
  name: string;
  family: string;
  year: string;
  notes: { top: string; heart: string; base: string };
};

type Ingredient = { name: string; origin: string };

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

Behavior notes

  • The banner image uses a fixed aspect-[21/9] box, noticeably wider and shorter than the 4:3 or 16:9 ratios most other About blocks use, matching its "wide panoramic" framing.
  • Each fragrance card renders a three-line notes pyramid, one line per key in notes (top, heart, base); the label text for each line (`Top — `, `Heart — `, `Base — `) is hardcoded in the component with a literal em dash, not a configurable prop.
  • The fragrance grid is a fixed lg:grid-cols-3 layout regardless of how many entries fragrances has.
  • The ingredients grid steps through three fixed breakpoints (grid-cols-2 sm:grid-cols-3 lg:grid-cols-6) rather than the dynamic column-count pattern, so it always targets six columns at the widest breakpoint no matter how many ingredients are supplied.
  • The "Sourced Ingredients" heading above the ingredients grid is hardcoded text in the component, not a prop.

More About blocks

View all About
PRO

about60

Team Member Grid

Team section with an eyebrow, big heading, description and CTA above a responsive grid of people cards (portrait image, name, role).

PRO

about11

Hero Banner with Avatars

Wide hero image with gradient overlay text, inline stats, and a stacked avatar strip of team members.

PRO

about20

Team Photo & List

Wide team photo, member list with avatars, team stats grid, and a culture quote. A rich team showcase layout.

PRO

about68

Team Portrait Grid

A team section with an eyebrow over a hairline rule, a two-column heading, and a grid of portrait cards each with a name and role.

PRO

about2

Values with Team Photo

Full-width team photo with a three-column values grid below. Great for culture pages and brand storytelling.

PRO

about64

Principles Card Grid

Principles section with a header and a three-column grid of six bordered cards, each pairing a circular icon with a title and description.