Migration Source SelectorPRO

A migration section where your current system is picked from frosted glass cards floating on a photo panel, swapping the right side to a plain-language summary, a checked list of what carries across, the typical timeline, and a caveat.

Saas105: Migration Source Selector

Migration section where the system you are on today is picked from frosted glass cards floating on a photo panel, swapping the right side to a plain-language summary, a checked list of what carries across, the typical timeline, and the caveat that comes with it.

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

Base UI flavor

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

This installs the block to components/beste/block/saas105.tsx plus the badge23 and button21 components it uses for the eyebrow and the CTA.

Quick start

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

tsx
import { Saas105, saas105Demo } from "@/components/beste/block/saas105";

export default function MigrationPage() {
  return <Saas105 {...saas105Demo} />;
}

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

tsx
import { Saas105 } from "@/components/beste/block/saas105";

export default function MigrationPage() {
  return (
    <Saas105
      badge={{ label: "Migration" }}
      heading="Bring the last ten years with you"
      description="Whatever you are on today, the history comes across."
      image={{ src: "/images/paperwork.jpg", alt: "Paperwork on a desk" }}
      labels={{
        sourcesLabel: "Where you are today",
        carriesLabel: "What comes across",
        timelineLabel: "Typical timeline",
      }}
      items={[
        {
          name: "Spreadsheets",
          summary: "The most common starting point, and the easiest one.",
          timeline: "2 days, including the review",
          carries: ["Member details and contact history", "Outstanding balances"],
          note: "Column names never match. That part is our job.",
        },
        {
          name: "Another practice system",
          summary: "If yours can export, it can move.",
          timeline: "3 to 5 days, run alongside your live system",
          carries: ["Member records with full history", "Invoice and payment ledger"],
        },
      ]}
      button={{ label: "Plan your migration", href: "/migration" }}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Monospace eyebrow above the hairline rule, rendered via Badge23
headingstringSection heading in the left column
descriptionstringSupporting paragraph, right-aligned from md up
image{ src: string; alt: string }Photo behind the source cards
labelsSaas105Labels{}Kicker and column headings, see below
itemsSource[][]Selectable source systems and what each one implies
button{ label: string; href: string }CTA under the timeline column
classNamestringExtra classes for the outer <section>
ts
type Source = {
  name: string;
  summary: string;
  timeline: string;
  carries?: string[];
  note?: string;
};

type Saas105Labels = {
  sourcesLabel?: string;
  carriesLabel?: string;
  timelineLabel?: string;
};

Behavior notes

More SaaS blocks

View all SaaS
PRO

saas103

Onboarding Split

A reversed split with an image tile floating a live setup checklist on the left, and an eyebrow, light heading, checked bullets, and an accent button on the right.

FREE

saas16

Changelog Timeline

Version history cards with version badges, dates, and update type labels (Feature, Improvement, Fix). Perfect for product update pages and release notes.

FREE

saas108

Branching Scoping Form

A contact section that asks a branching set of questions instead of one long form: a rail lists the steps that currently apply and lets you jump between them, and answering the first question adds or removes the steps below it.

PRO

saas99

SaaS Integrations Grid

An editorial integrations section pairing a big-type pitch with a bordered mosaic of grayscale partner logo tiles.

PRO

saas34

Press Coverage

Media mentions list with publication source badges, headlines, and dates. Perfect for showcasing company press coverage and news articles.

PRO

saas98

SaaS Interface Split

Feature split pairing a focused pitch with a built monochrome app-window mockup of skeletons, nav, and metrics.

Markdown version