Virtual Tour Frame

Virtual tour

Walk through the show apartment from wherever you are

A guided tour of the Type C show home in the warehouse, filmed in the late afternoon when the river light comes through the arched windows. Six minutes, no appointment needed.

A double-height living room in the warehouse, exposed brick, a tall oak window and a linen sofa
  1. 010:00

    Living room and kitchen

    The long room along the river wall, with the oak kitchen and the stone island at the courtyard end.

  2. 022:10

    Main bedroom and shower room

    The brick wall, the birch view and the limestone shower room behind the oak door.

  3. 034:20

    Terrace and the courtyard

    Out through the sliding window onto the terrace, then down to the birches and the river walk.

About this block

Virtual Tour FramePRO

A virtual tour entry for a development's sales page: an eyebrow, heading and lead in the header grid, then a wide 21:9 photograph that opens from the top once loaded and in view, with a centred paper pill and play icon that plays the tour film inside the same frame (with native controls and a close button), and under it a row of three tour stops under hairlines, each with its number, a time marker, a title and a line.

Realestate85: Virtual Tour Frame

A virtual tour entry for a development's sales page: an eyebrow, heading and lead in the header grid, then a wide 21:9 photograph that opens from the top once loaded and in view, with a centred paper pill and play icon that plays the tour film right inside the frame, with native controls and a close button. Under it a row of three tour stops under hairlines, each with its number, a time marker, a title and a line.

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

Base UI flavor

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

This installs the block to components/beste/block/realestate85.tsx plus the badge24 rule eyebrow, the button25 quiet pill used for the play affordance, and the shadcn/ui button primitive behind it.

Quick start

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

tsx
import { Realestate85, realestate85Demo } from "@/components/beste/block/realestate85";

export default function Page() {
  return <Realestate85 {...realestate85Demo} />;
}

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

tsx
import { Realestate85 } from "@/components/beste/block/realestate85";

export default function Page() {
  return (
    <Realestate85
      eyebrow="Virtual tour"
      heading="Walk through the show apartment from wherever you are"
      description="A guided tour of the Type C show home, filmed in the late afternoon. Six minutes, no appointment needed."
      image={{
        src: "https://oud.pics/b/realestate/alder-warehouse-living.webp",
        alt: "A double-height living room in the warehouse, exposed brick and a tall oak window",
      }}
      tour={{ label: "Start the tour", video: { src: "/films/show-apartment.mp4", title: "Virtual tour of the show apartment" } }}
      labels={{ close: "Close the tour" }}
      stops={[
        { at: "0:00", title: "Living room and kitchen", description: "The long room along the river wall, with the oak kitchen at the courtyard end." },
        { at: "2:10", title: "Main bedroom and shower room", description: "The brick wall, the birch view and the limestone shower room." },
        { at: "4:20", title: "Terrace and the courtyard", description: "Out onto the terrace, then down to the birches and the river walk." },
      ]}
    />
  );
}

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.
image{ src: string; alt: string }–The tour still, cropped to 4:3 on small screens and 21:9 from md.
tour{ label: string; video: { src: string; title: string } }–The play pill centred on the photograph and the film it plays in the frame.
stopsStop[][]Tour chapters under the frame, three across on desktop.
labels{ close?: string }{}Accessible name of the button that closes the film.
classNamestring–Extra classes merged onto the section.
ts
type Stop = {
  at: string;
  title: string;
  description: string;
};

Behavior notes

  • The photograph is gated on its own load event (and complete for cached images) and on the frame being in view; it then opens from the top with a clipPath inset over 1.6 s while the image settles from scale 1.18 to 1.12 over 2.2 s, and a small parallax moves it from -6% to 6% against the scroll.
  • The play affordance is a button25 in the neutral (paper) tone with a Play icon; it fades and scales from 0.9 to 1 only after the frame has revealed, 0.9 s into the sequence.
  • The film is a video element that is always in the markup with preload="none", so nothing downloads until the tour starts. Pressing the pill fades the video in over the photograph, rewinds it and plays it with native controls; the pill fades out at once and leaves the tab order, and a round close button appears in the corner. The film itself only fades in once it is actually playing, so the frame never flashes empty.
  • The close button, the Escape key and the end of the film all pause the video and fade the photograph back in, with the pill returning 0.2 s later.
  • The tour stops are a three-column list with top hairlines that draw from the left; each column rises 0.1 s after the previous one and carries a two-digit index on the left and the time marker on the right, both in tabular numerals.
  • Nothing on the photograph carries text other than the pill, so no scrim is needed and the still stays legible as a photograph.
  • With prefers-reduced-motion the frame, image and pill render in their final states at once, the parallax is held at its start, and every initial state is skipped.

More Real Estate blocks

View all Real Estate
PRO

realestate43

Book a Viewing Form

PRO

realestate61

Masonry Gallery with Lightbox

PRO

realestate40

Launch Offer with Countdown

Get Pro