Photo Band Feature

A quiet pebble beach with a wooded headland

Online sessions

Theroomcomestoyou.Thequietcomeswithit.

Same practitioner, same hour

Online sessions are not a second tier. You keep the person and the rhythm you started with.

A link, nothing to install

One private link that works in any browser. No accounts, no software, no waiting room.

Recorded nowhere

Video is never stored, by us or by the tools we use. When the call ends, it is gone.

About this block

Photo Band FeaturePRO

A feature that opens on a rounded photographic band with a dark scrim and film grain, the photograph drifting as the page scrolls under a serif heading that settles in word by word and a light sliding-marker pill, then three ruled points beneath it.

Feature279: Photo Band Feature

A tall photographic panel with the heading and a pale pill sitting at its foot, then three ruled points printed underneath on the page itself.

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

Base UI flavor

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

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

Quick start

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

tsx
import { Feature279, feature279Demo } from "@/components/beste/block/feature279";

export default function Page() {
  return <Feature279 {...feature279Demo} />;
}

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

tsx
import { Feature279 } from "@/components/beste/block/feature279";

export default function Page() {
  return (
    <Feature279
      eyebrow="Online sessions"
      heading="The room comes to you. The quiet comes with it."
      button={{ label: "Book an online session", href: "/online", tone: "light" }}
      image={{ src: "/photos/valley.jpg", alt: "A wide green valley under soft evening light" }}
      points={[
        { title: "Same practitioner, same hour", description: "Online sessions are not a second tier." },
        { title: "A link, nothing to install", description: "One private link that works in any browser." },
        { title: "Recorded nowhere", description: "Video is never stored, by us or by the tools we use." },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstringSmall-caps line above the heading, inside the panel
headingstringSection heading, rendered as an h2 through Text1
buttonActionButtonPill at the foot of the panel, defaulting to the light tone
image{ src: string; alt: string }Photograph behind the panel
pointsPoint[][]Ruled points printed under the panel
classNamestringExtra classes for the outer <section>
ts
type Point = {
  title: string;
  description: string;
};

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

Behavior notes

  • The panel keeps its ink background whether or not an image is given, so dropping image leaves a solid dark card with grain over it rather than an empty frame.
  • The gradient is weighted to the foot (from-foreground/85 up to foreground/10), because that is where the copy sits; the top of the photograph stays almost untouched.
  • The panel grows by min-h rather than an aspect ratio, 28rem on a phone and 36rem from md, so a long heading pushes it taller instead of being cropped.
  • The heading takes an explicit delay={0.3} so it follows the eyebrow rather than arriving with it, and the button waits until 0.5.
  • The photograph drifts -14% to 14% against a 1.3 scale, and clears from blur(24px) on decode with a complete check on mount for cached files.
  • The points sit outside the panel on the page surface, each with its own border-t and a small dot, so they read as footnotes to the panel rather than as part of it.
  • The grain filter's id comes from useId, so two grain surfaces on one page cannot collide on a global SVG id.

More Feature blocks

View all Feature
PRO

feature297

Photo Band Command

A rounded photographic band inside the container: the photo blurs in and drifts on scroll under a scrim and film grain, a serif headline settles in word by word, then a frosted pill that copies the install command on click beside a light sliding-marker pill, and a ruled row of three short points along the bottom.

PRO

feature272

Recorded Companion Band

A wide photographic band with a scrim, floating a live video card in the middle of it, over three hairline notes that state how the recordings are made and what ships with them.

PRO

feature237

Product Accordion Feature

A product feature with an eyebrow kicker over a hairline rule, a two-column heading and paragraph, an image tile carrying a floating records panel, and an interactive accordion of capabilities.

PRO

feature287

Photo Steps

Three numbered steps in columns, each topped by a photograph that drifts inside its frame, with a serif title and a description, under a serif heading that settles in word by word and a sliding-marker pill.

PRO

feature227

Sticky feature list with images

Sticky left intro paired with a stacked, numbered list of feature blocks, each with a title, description, and small image.

PRO

feature203

Feature with Stats Grid and Image

Two-column feature section with heading, description, and a 2x2 stats grid (icon card, value, label) on one side and a square image on the other. Image position is configurable.