Partner Agents Side by Side

Partner agents

Two local agencies also sell Alder Row

Both offices hold the full brochure, the price list and keys to the show apartment. Call whichever is nearer, or come straight to the sales suite on Mill Lane.

About this block

Partner Agents Side by SidePRO

Two estate agencies selling a development, set as two muted cards side by side: each opens with a 16:9 office photograph that unveils from the top once loaded and drifts with the scroll, then its name and office line, hairline rows for the named contact, a phone link and an email link, an opening-hours list, and a dark button pinned to the card's foot; cards and rows rise in sequence.

Realestate80: Partner Agents Side by Side

Two estate agencies selling a development, set as two muted cards side by side. Each card opens with a 16:9 office photograph, then the agency name and office line, hairline rows for the named contact, a phone link and an email link, an opening-hours list, and a dark button at the foot of the card; cards and rows rise in sequence.

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://beste.dev/r/realestate80?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/realestate80.tsx plus the badge24 rule eyebrow, the button25 quiet pill used for each agency's button, and the shadcn/ui button primitive behind it.

Quick start

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

tsx
import { Realestate80, realestate80Demo } from "@/components/beste/block/realestate80";

export default function Page() {
  return <Realestate80 {...realestate80Demo} />;
}

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

tsx
import { Realestate80 } from "@/components/beste/block/realestate80";

export default function Page() {
  return (
    <Realestate80
      eyebrow="Partner agents"
      heading="Two local agencies also sell Alder Row"
      description="Both offices hold the full brochure, the price list and keys to the show apartment."
      agents={[
        {
          name: "Riverside & Partners",
          office: "14 Mill Lane, opposite the station",
          contact: "Brian Eno",
          role: "Associate director",
          phone: "+44 20 7946 0000",
          email: "[email protected]",
          hours: [
            { days: "Monday to Friday", time: "9:00 to 18:00" },
            { days: "Saturday", time: "10:00 to 16:00" },
          ],
          image: { src: "https://oud.pics/b/realestate/alder-river-walk.webp", alt: "The stone river walk beside the warehouse" },
          button: { label: "Email Riverside & Partners", href: "/contact" },
        },
        {
          name: "Granary Square Estates",
          office: "2 Granary Square, by the park",
          contact: "Max Richter",
          role: "Senior negotiator",
          phone: "+44 20 7946 0000",
          email: "[email protected]",
          hours: [
            { days: "Monday to Friday", time: "8:30 to 18:30" },
            { days: "Saturday", time: "9:00 to 17:00" },
          ],
          image: { src: "https://oud.pics/b/realestate/alder-courtyard-exterior.webp", alt: "The warehouse and the concrete wing around the birch courtyard" },
          button: { label: "Email Granary Square Estates", href: "/contact" },
        },
      ]}
      labels={{ office: "Office", contact: "Your contact", phone: "Phone", email: "Email", hours: "Opening hours" }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Short line above the heading, rendered through badge24.
headingstring–Section heading in the left seven columns of the header grid.
descriptionstring–Lead paragraph in the right four columns of the header grid.
agentsAgent[][]The agencies to show as cards; two fill a row on desktop, more wrap into further rows of two.
labelsLabels{}Captions for the office line and the four detail rows.
classNamestring–Extra classes merged onto the section.
ts
type Hours = { days: string; time: string };

type Agent = {
  name: string;
  office: string;
  contact: string;
  role: string;
  phone: string;
  email: string;
  hours: Hours[];
  image?: { src: string; alt: string };
  button: { label: string; href: string };
};

type Labels = {
  office?: string;
  contact?: string;
  phone?: string;
  email?: string;
  hours?: string;
};

Behavior notes

  • The phone and email rows are real links: the phone number becomes a tel: href with its spaces stripped, the address a mailto: href, both with a quiet colour change on hover.
  • Each agency sits in a rounded-md bg-muted card that rises into place on its own delay. The optional image fills a 16:9 frame at the top of the card: it stays clipped until the file has loaded and the frame is in view, then opens from the top over 1.6 s while settling from a 1.18 to a 1.12 scale, and drifts from -6% to 6% with the scroll.
  • Each agency's rows (contact, phone, email, hours) rise 0.08 s apart, and the whole second column starts 0.15 s after the first, so the two sides read in order rather than at once; each row's top hairline draws on the same delay, and the hours row closes the list without a line under it.
  • Opening hours are a plain list of day ranges and times with tabular numerals, so the times align down the column.
  • The button on each card uses the dark tone with an arrow icon, is pushed to the card's foot so both buttons line up, and rises last; with prefers-reduced-motion every initial state is skipped and the block renders complete.

More Real Estate blocks

View all Real Estate
PRO

realestate66

Shared Spaces Photo Cards

PRO

realestate69

Sales Progress Photo Cards

PRO

realestate50

Single Testimonial With Photo

Get Pro