One hour, one room, and the version of the problem you have not managed to write down yet. We will tell you plainly whether we are the right studio for it.
No deck, no paid discovery phase. If it is not a fit we say so and point you somewhere better.
Closing call to action splitting a tall photo against an oversized heading, a short pitch, a pill CTA beside a plain email link, and a ruled two-column row stating reply time and next availability.
Closing call to action that puts a tall photo against the pitch: a parenthetical eyebrow, an oversized heading, a short paragraph, a pill CTA beside a plain email link, then a ruled two-column row stating reply time and next availability so the ask carries its own terms.
Free block
This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.
Radix flavor
npx shadcn add "https://ui.beste.co/r/cta78"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/cta78"This installs the block to components/beste/block/cta78.tsx plus the badge7 eyebrow and button12 pill button it uses.
The installed file exports cta78Demo alongside the block: the exact props behind the preview above. Spread it to get a working closing section in one line.
import { Cta78, cta78Demo } from "@/components/beste/block/cta78";
export default function Page() {
return <Cta78 {...cta78Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Cta78 } from "@/components/beste/block/cta78";
export default function Page() {
return (
<Cta78
badge={{ label: "Open commissions" }}
heading="Bring the brief you keep rewriting."
description="One hour, one room, and the version of the problem you have not written down yet."
image={{ src: "/studio/meeting-room.jpg", alt: "Studio meeting room lit by a tall window" }}
button={{ label: "Book a studio hour", href: "/contact" }}
link={{ label: "Or send the brief by email", href: "mailto:studio@example.com" }}
details={[
{ title: "First reply", value: "Within two days" },
{ title: "Next opening", value: "September" },
]}
labels={{ note: "No deck, no paid discovery phase." }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow label rendered as a Badge7 |
heading | string | – | Plain-text heading above the pitch |
description | string | – | Supporting paragraph under the heading |
image | { src: string; alt: string } | – | Tall photo filling the left half |
button | ActionButton | – | Primary pill CTA, rendered as Button12 |
link | ActionButton | – | Secondary underlined text link beside the pill |
details | DetailRow[] | [] | Ruled key and value pairs under the actions |
labels | Cta78Labels | {} | Fixed strings that are not content: the closing note |
className | string | – | Extra classes for the outer <section> |
type ActionButton = {
label: string;
href: string;
};
type DetailRow = {
title: string;
value: string;
};
type Cta78Labels = {
note?: string;
};heading renders as plain text, not an HTML string: there is no inline highlight markup to escape, and emphasis comes from the size jump to md:text-5xl lg:text-6xl on a tight leading-[0.95] instead of a recoloured phrase.aspect-[4/5] box (md:aspect-[3/4]) with object-cover, so a landscape or square source still fills the column without stretching, and the two halves stay balanced on md:items-center.details render as ruled border-t pairs rather than a boxed grid, which is the set's pattern for facts and specs and keeps the row from reading as a second card.flex-wrap row, so a pill on its own, a text link on its own, or both side by side all lay out correctly.md with the photo on top, so the ask still lands above the fold on a phone.cta9
Two-column call-to-action with decorative image on one side and feature list with action buttons on the other. Perfect for visually rich conversion sections.
cta86
A closing call to action splitting a bordered container between a hairline contact table and an inverted dark column that floats a live card naming the person you will meet above the booking action.
cta75
A split call to action pairing an eyebrow, light heading, paragraph, and two accent buttons with an image tile that floats a live team message thread.
cta24
Asymmetric two-column layout with large heading on the left and description with buttons on the right. Perfect for editorial-style conversion sections.