Photo Button CTA

Next step

Sayhello.Thatisthewholefirststep.

A short call, a first session if you want one, and a rhythm only if it suits you.

About this block

Photo Button CTAPRO

A call to action with the text above the picture: a centred serif heading that settles in word by word and an intro, then a wide rounded photograph drifting under a light scrim and film grain with a single large sliding-marker pill at its centre.

Cta104: Photo Button CTA

A centred invitation over a wide photographic band, where the only thing inside the picture is the button: the image drifts under an ink wash and film grain while a pale pill sits dead centre.

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

Base UI flavor

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

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

Quick start

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

tsx
import { Cta104, cta104Demo } from "@/components/beste/block/cta104";

export default function Page() {
  return <Cta104 {...cta104Demo} />;
}

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

tsx
import { Cta104 } from "@/components/beste/block/cta104";

export default function Page() {
  return (
    <Cta104
      eyebrow="Next step"
      heading="Say hello. That is the whole first step."
      description="A short call, a first session if you want one, and a rhythm only if it suits you."
      button={{ label: "Say hello", href: "/contact", tone: "light" }}
      image={{ src: "/photos/wildflowers.jpg", alt: "A field of wildflowers under a soft sky" }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstringSmall-caps line above the heading
headingstringSection heading, rendered as an h2 through Text1
descriptionstringParagraph under the heading
buttonActionButtonPill centred inside the band, defaulting to the light tone
image{ src: string; alt: string }The band itself; without it the band and its button are both dropped
classNamestringExtra classes for the outer <section>
ts
type ActionButton = {
  label: string;
  href: string;
  tone?: "primary" | "light" | "dark" | "outline";
};

Behavior notes

  • The button lives inside the band, so image is what carries it: with no image there is no band, and the section ends after the copy. Give the block an image whenever you want the action.
  • The band switches aspect ratio rather than height, 16/9 on a phone becoming 21/9 from md, so the crop stays cinematic on a wide screen without going letterbox-thin on a small one.
  • The pill takes the light tone by default and is given extra padding, because it sits alone in the middle of a photograph and needs to read as the one thing to press.
  • The wash over the photograph is only foreground/40, lighter than the full-bleed bands in the family, since a single centred pill needs less contrast behind it than a paragraph of copy would.
  • The photograph drifts -14% to 14% against a 1.3 scale and clears from blur(24px) on decode, with a complete check on mount so a cached image is not left blurred.
  • The grain filter's id comes from useId, so two grain surfaces on one page cannot collide on a global SVG id.
  • Layers sit on explicit negative z-indices inside an isolate context, which keeps them behind the button but never behind the section around them.

More CTA blocks

View all CTA
PRO

cta96

Half Photo CTA

A two-panel call to action inside one rounded frame: a soft muted panel with a serif heading that settles in word by word, an intro, a sliding-marker pill and dotted reassurances, beside a photograph that drifts inside its half as the page scrolls.

PRO

cta84

Photo Band Story CTA

A closing call to action set on a photographic panel with a directional gradient, pairing an eyebrow badge, light heading, and two actions with a live customer quote card.

PRO

cta95

Parallax Panel CTA

A closing call to action on a rounded photographic panel: the photo drifts under the panel as the page scrolls, soft light and film grain sit over it, and a centred serif heading settles in word by word above the intro, a pill button, an email link and a star rating line.

PRO

cta74

Centered Closing CTA

A centered call to action with an eyebrow pill, a large light heading, a short paragraph, and two accent buttons on a clean surface.

PRO

cta99

Two Paths CTA

A call to action that offers two doors: under a serif heading that settles in word by word, two soft muted cards each with a serif title, a description and a sliding-marker pill, the first topped by a photograph that drifts inside its frame as the page scrolls.

PRO

cta18

Fullwidth Image CTA

Full-width call-to-action with background image overlay, heading, and action buttons. Perfect for bold, visually striking conversion sections.