Linked Referral Rows

About this block

Linked Referral RowsPRO

A ruled list of people to refer on to, every row a whole link: a round portrait, a serif name over a role and a line of what they hold, a place column and an arrow that lifts as the row tints.

Social60: Linked Referral Rows

A ruled list of people to refer on to, every row a whole link with a round portrait and a place column.

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

Base UI flavor

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

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

Quick start

The installed file exports social60Demo alongside the block: the exact props behind the preview above. Spread it to get a working linked Referral Rows in one line.

tsx
import { Social60, social60Demo } from "@/components/beste/block/social60";

export default function Page() {
  return <Social60 {...social60Demo} />;
}

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

tsx
import { Social60 } from "@/components/beste/block/social60";

export default function Page() {
  return (
    <Social60
      eyebrow="People we send you to"
      heading="When we are not the right room."
      description="Practitioners we know well and would sit with ourselves."
      button={ label: "Join the list", href: "/referrals", tone: "outline" }
      partners={[
        {
          name: "Joanna Newsom",
          role: "Trauma and the body",
          description: "Long work with people who found talking was not enough.",
          place: "Lisbon and online",
          href: "/referrals/joanna",
          portrait: { src: "/people/joanna.jpg", alt: "Portrait" },
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Small-caps line above the heading
headingstring–Section heading, rendered as an h2 through Text1
descriptionstring–Intro paragraph under the heading
buttonActionButton–Pill action centred under the list
partnersPartner[][]Linked rows, in order
classNamestring–Extra classes for the outer <section>
ts
type Partner = {
  name: string;
  role: string;
  description: string;
  place?: string;
  href: string;
  portrait: Image;
};

type Image = { src: string; alt: string };

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

Behavior notes

  • Each row is one Link laid out as a grid, so the portrait, the name, the place and the arrow all lead to the same page.
  • Portraits sit in a round size-16 frame with no parallax: faces are held still while landscape photographs elsewhere in the set drift.
  • The row tints on hover rather than moving, which keeps a list of people from shifting under a travelling cursor.
  • place is optional and keeps its track, so names stay aligned whether or not a row carries one.
  • The grid collapses below md, where the place sits under the description and the arrow is hidden rather than wrapped.
  • Portraits clear from blur(24px) on decode, with a complete check for cached files.

More Social blocks

View all Social
PRO

social56

Referral Programme

PRO

social54

Inverted Follow Panel

FREE

social48

Community Channels

Get Pro access