Pricing Plan Explorer

Pricing Preview

Take a look at the plans. The price is the only secret left.

Switch between plans to see exactly what each one gives you. Join the list and you'll be first to see the numbers, plus a launch-week discount.

Solo

For one maker keeping everything in one place.

$/mo

Full pricing revealed at launch

What's included

  • A single workspace
  • Unlimited projects
  • Community support
About this block

Pricing Plan ExplorerPRO

An interactive pricing-preview section with a centered square eyebrow and heading, a plan switcher that swaps a detail card showing a locked blurred price, accent-checked features, and a dark seal notify button.

ComingSoon41: Pricing Plan Explorer

An interactive Polaris pricing-preview section centered on a square eyebrow and heading, with a plan switcher that swaps a detail card showing a blurred locked price, accent-checked features, and a dark seal notify button.

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

Base UI flavor

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

This installs the block to components/beste/block/comingsoon41.tsx.

Quick start

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

tsx
import { ComingSoon41, comingsoon41Demo } from "@/components/beste/block/comingsoon41";

export default function Page() {
  return <ComingSoon41 {...comingsoon41Demo} />;
}

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

tsx
import { ComingSoon41 } from "@/components/beste/block/comingsoon41";

export default function Page() {
  return (
    <ComingSoon41
      label="Pricing Preview"
      labels={{
        priceCaption: "Full pricing revealed at launch",
        priceSuffix: "/mo",
        featuresTitle: "What's included",
      }}
      heading="Take a look at the plans."
      description="Switch between plans to see what each one gives you."
      plans={[
        {
          name: "Solo",
          summary: "For one maker keeping everything in one place.",
          teasedPrice: "9",
          features: ["A single workspace", "Unlimited projects"],
        },
        {
          name: "Studio",
          summary: "For small teams shipping together.",
          teasedPrice: "29",
          tag: "Most popular",
          features: ["Everything in Solo", "Up to ten seats"],
        },
      ]}
      button={{ label: "Notify Me On Pricing", href: "/notify" }}
    />
  );
}

Props

PropTypeDefaultDescription
labelstringSquare eyebrow rendered above the heading via Badge6
labelsComingSoon41Labels{}Price caption, price suffix, and features-column title
headingstringCentered section heading
descriptionstringSupporting paragraph under the heading
plansPlanItem[][]Plans shown in the switcher and the detail card
buttonActionLinkDark seal notify link rendered via Button1
classNamestringExtra classes for the outer <section>
ts
type PlanItem = {
  name: string;
  summary: string;
  teasedPrice: string;
  tag?: string;
  features: string[];
};

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

type ComingSoon41Labels = {
  priceCaption?: string;
  priceSuffix?: string;
  featuresTitle?: string;
};

Behavior notes

  • A useState active index drives a role="tablist" plan switcher; clicking a tab swaps the visible detail card, and there is no email form on this block.
  • The detail card renders only when plans is non-empty and a plan is resolved at the active index, so the whole switcher collapses when you pass no plans.
  • The teasedPrice is rendered aria-hidden behind a blur-[9px] select-none filter, prefixed with a $ and followed by labels.priceSuffix, so the number reads as a locked, unreadable teaser.
  • A Lock icon sits beside labels.priceCaption under the price, and plan.tag renders a bg-primary uppercase pill next to the plan name when present.
  • Each feature renders with an accent Check badge in a list under labels.featuresTitle.
  • The button renders as a real navigation via Button1 asChild wrapping a Next.js <Link href={button.href} /> with the dark tone, so it points at a URL rather than firing a handler.

More Coming Soon blocks

View all Coming Soon
PRO

comingsoon54

Locked Product Preview

A two-column coming-soon section with a square eyebrow, a heading and a working email notify form, beside a browser-window mockup showing a blurred, lock-badged product preview.

PRO

comingsoon5

Sneak Peek Feature Grid

Coming soon section with a grid of blurred sneak-peek feature cards and lock overlays that tease upcoming features. Perfect for building anticipation by showing what's coming without revealing full details.

PRO

comingsoon58

Store Drop Coming Soon

An e-commerce coming-soon section with a square eyebrow, a heading, a drop-date card, a grid of product teaser cards with blurred prices, and a working email notify form with a success state.

PRO

comingsoon23

Founding Member Offer

A bordered pre-launch offer card with a square eyebrow, a heading, a checked benefit list, a seats-claimed progress bar, and a working rounded email-capture form with a success state.

PRO

comingsoon20

Maintenance Back Soon

A centered scheduled-maintenance section with a pulsing status dot, a monospace parenthetical eyebrow, a large heading, a reassuring paragraph, a ruled key-value list of status details, and a status-page pill button.

PRO

comingsoon39

Feature Voting Roadmap

A pre-launch feature-voting section with a centered square eyebrow and heading, and a list of upcoming feature cards each with a title, description, and an interactive upvote control that updates the count.