Practitioner Portraits

The practitioners

Threepeople.Onewayoflistening.

We trained in different rooms and arrived at the same conviction: the work goes better when nobody is in a hurry.

Choose who to talk to
Portrait of a psychotherapist

Hania Rani

Psychotherapist

Fifteen years in long-term therapy, with a soft spot for people who say they are fine.

Portrait of a coach

Sufjan Stevens

Coach and counsellor

Works with career change, endings and the strange quiet after a big decision is finally made.

Portrait of a psychotherapist

Lianne La Havas

Psychotherapist

Runs the evening practice and the walking sessions. Believes most conversations go better outdoors.

About this block

Practitioner PortraitsPRO

A team section: a serif heading that settles in word by word beside the intro and a pill action, then three portrait photographs that drift inside their frames as the page scrolls, each with a serif name, a small-caps role and a short bio.

About75: Practitioner Portraits

A team section for a small practice: the heading settles in word by word beside an intro and a pill action, then a row of portraits drifts inside its frames as the page scrolls, each carrying a serif name, a small-caps role and a short bio.

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

Base UI flavor

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

This installs the block to components/beste/block/about75.tsx plus the button22 sliding-marker pill and the text1 word stagger it uses.

Quick start

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

tsx
import { About75, about75Demo } from "@/components/beste/block/about75";

export default function Page() {
  return <About75 {...about75Demo} />;
}

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

tsx
import { About75 } from "@/components/beste/block/about75";

export default function Page() {
  return (
    <About75
      eyebrow="The practitioners"
      heading="Three people. One way of listening."
      description="We trained in different rooms and arrived at the same conviction: the work goes better when nobody is in a hurry."
      button={{ label: "Choose who to talk to", href: "/team", tone: "outline" }}
      people={[
        {
          name: "Hania Rani",
          role: "Psychotherapist",
          bio: "Fifteen years in long-term therapy, with a soft spot for people who say they are fine.",
          image: { src: "/team/hania.jpg", alt: "Portrait of a psychotherapist" },
        },
        {
          name: "Sufjan Stevens",
          role: "Coach and counsellor",
          bio: "Works with career change, endings and the strange quiet after a big decision.",
          image: { src: "/team/sufjan.jpg", alt: "Portrait of a coach" },
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstringSmall-caps line above the heading
headingstringSection heading, rendered as an h2 through Text1
descriptionstringIntro paragraph in the right column
buttonActionButtonPill action under the intro
peoplePerson[][]Portrait cards; the grid is skipped entirely when empty
classNamestringExtra classes for the outer <section>
ts
type Person = {
  name: string;
  role: string;
  bio: string;
  image: { src: string; alt: string };
};

type ActionButton = {
  label: string;
  href: string;
  tone?: "primary" | "light" | "dark" | "outline";
};

Behavior notes

  • Each portrait owns its own scroll listener rather than sharing the section's, so the three photographs drift at their own moment as they reach the viewport instead of moving together in lockstep.
  • The travel is deliberately short, -8% to 8% against a 1.18 scale, because a portrait that moves as far as a landscape band reads as a glitch on a face.
  • Photos arrive blurred and clear on decode, with a complete check on mount so a cached image is not left waiting for an onLoad that already fired.
  • The header row aligns on md:items-end, which puts the intro and its button on the same baseline as the heading rather than beside the top of a heading that may run to two or three lines.
  • Cards enter with a 0.12s stagger by index, so on a three-up grid the row resolves left to right instead of appearing as one block.
  • Names are h3 under the section h2, and roles are plain paragraphs, so the outline stays readable when this block sits inside a longer about page.
  • Nothing here is a link. The card is presentational, and button is the only interactive element in the section.

More About blocks

View all About
PRO

about82

Band and Figures

An about section built around a wide photograph that drifts inside its frame: a serif heading that settles in word by word above it, then an intro with a sliding-marker pill beside four ruled serif figures that count up as they arrive.

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

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

about81

Three Values

A values section: a serif heading that settles in word by word beside the intro and a pill action, then three soft muted cards with a round icon, a serif title and a description that rise into view in turn.

PRO

about77

The Rooms Grid

A studio tour: a serif heading that settles in word by word beside the intro and a pill action, four photographs of the rooms in an uneven, offset grid that each drift at their own pace as the page scrolls, and a ruled row of visiting details.

PRO

about38

Overlap Heading About

About where a large heading overlaps a portrait, with a paragraph, CTA and a bottom stat ribbon.