Two-Path Closing Cards

Two ways in

Start on your own, or start with us on the call

Both routes end in the same workspace. The only question is whether you would rather poke at it first or have someone walk the first clinic through with you.

Self-serve

Open a workspace now

Sign up, import a list of members, and have a working booking page before lunch.

  • Free for your first clinic
  • No card, no sales call
  • Import from CSV in one pass
Guided

Bring the whole practice across

Thirty minutes with an engineer who has migrated a practice like yours, then a dry run on your own data.

  • Mapping done with your lead
  • A private dry-run workspace
  • Go live one clinic at a time
About this block

Two-Path Closing CardsPRO

A closing call to action offering two routes as side-by-side cards, each with an icon tile, a short kicker, a checked list on hairlines, and its own action, with the recommended route outlined in the accent.

Cta83: Two-Path Closing Cards

A closing call to action offering two routes as side-by-side cards, each with an icon tile, a short kicker, a checked list on hairlines and its own action, with the recommended route outlined in the accent.

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

Base UI flavor

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

This installs the block to components/beste/block/cta83.tsx plus the badge23 and button21 components it uses for the eyebrow and the card actions.

Quick start

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

tsx
import { Cta83, cta83Demo } from "@/components/beste/block/cta83";

export default function Page() {
  return <Cta83 {...cta83Demo} />;
}

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

tsx
import { Cta83 } from "@/components/beste/block/cta83";
import { PhoneCall, Rocket } from "lucide-react";

export default function Page() {
  return (
    <Cta83
      badge={{ label: "Two ways in" }}
      heading="Start on your own, or start with us on the call"
      description="Both routes end in the same workspace."
      paths={[
        {
          icon: Rocket,
          kicker: "Self-serve",
          title: "Open a workspace now",
          description: "Sign up, import a list of members, and have a booking page before lunch.",
          points: ["Free for your first clinic", "No card, no sales call"],
          button: { label: "Start free", href: "/signup" },
          featured: true,
        },
        {
          icon: PhoneCall,
          kicker: "Guided",
          title: "Bring the whole practice across",
          description: "Thirty minutes with an engineer, then a dry run on your own data.",
          points: ["Mapping done with your lead", "A private dry-run workspace"],
          button: { label: "Book a call", href: "/demo" },
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Centered eyebrow above the heading, rendered through Badge23
headingstringSection heading, centered and capped at max-w-2xl
descriptionstringCentered supporting paragraph, capped at max-w-xl
pathsPathCard[][]Route cards, laid out two-up from md
classNamestringExtra classes for the outer section
ts
import type { LucideIcon } from "lucide-react";

type ActionLink = {
  label: string;
  href: string;
};

type PathCard = {
  icon: LucideIcon;
  kicker: string;
  title: string;
  description: string;
  points: string[];
  button: ActionLink;
  featured?: boolean;
};

Behavior notes

  • featured drives two things at once: the card border switches from border-border to border-primary and its surface from bg-muted to bg-card, and the action switches from outline to primary. Marking both paths featured removes the distinction entirely.
  • Nothing enforces a single featured card, so it is on you to mark exactly one.
  • Cards are flex flex-col with the point list marked flex-1, so two cards with different amounts of copy still end at the same height and both actions land on the same line.
  • Point lists use border-t with last:border-b, closing each list at the bottom so it reads as a small table rather than an open list.
  • Both actions carry the same ArrowRight icon through Button21's icon prop, so the visual weight difference between the two routes comes from tone alone rather than from different affordances.
  • Icons are passed as components, not names. Import the lucide-react icon and hand it over; the block renders it at size-5 in a size-10 tinted tile marked aria-hidden.
  • The grid is md:grid-cols-2 with no lg variant, so the two cards go side by side at tablet width and stay that way.

More CTA blocks

View all CTA
PRO

cta80

Two Path Closing CTA

Closing section that offers two routes side by side, each a ruled column with a title, a short pitch, a dotted-rule list of what to expect and its own pill CTA, one solid and one outline.

PRO

cta29

Dual CTA

Two equal side-by-side call-to-action cards offering different paths. Perfect for segmenting audiences like developers vs designers or free vs paid.

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

cta13

Multi-Card CTA

Multiple action cards with different tiers or options side by side. Perfect for offering multiple paths like free trial, demo booking, and enterprise contact.

PRO

cta86

Contact And Availability CTA

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.

PRO

cta36

Accent Sidebar CTA

Card with colored accent left border and inline call-to-action. Perfect for attention-grabbing inline conversion prompts.