Onboarding MosaicPRO

A six-column bento for getting started: a wide card floating a live step tracker, a numbered week list on hairlines, an inverted quote tile, and a capture card holding a working email row.

Bento13: Onboarding Mosaic

A six-column bento for getting started: a wide card floating a live step tracker, a numbered week list on hairlines, an inverted quote tile and a capture card holding a working email row.

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

Base UI flavor

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

This installs the block to components/beste/block/bento13.tsx, the form36 capture and progress16 tracker pieces it floats on two tiles (installed to components/beste/piece/{name}.tsx), and the badge23 and button21 components it uses for the eyebrow and the action.

Quick start

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

tsx
import { Bento13, bento13Demo } from "@/components/beste/block/bento13";

export default function Page() {
  return <Bento13 {...bento13Demo} />;
}

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

tsx
import { Bento13 } from "@/components/beste/block/bento13";
import { Form36 } from "@/components/beste/piece/form36";
import { Progress16 } from "@/components/beste/piece/progress16";

export default function Page() {
  return (
    <Bento13
      badge={{ label: "Your first fortnight" }}
      heading="Everything you need to start, in one place"
      description="No implementation partner and no discovery phase."
      button={{ label: "Start a migration", href: "/migrate" }}
      progress={{
        kicker: "Live tracker",
        title: "You always know which step you are on",
        description: "Migration is a tracked sequence rather than a thread in someone's inbox.",
        media: (
          <Progress16
            title="Migration"
            steps={["Export", "Map fields", "Review", "Go live"]}
            activeIndex={2}
            caption="Review finishes today."
          />
        ),
        image: { src: "/backdrops/blue.jpg", alt: "Soft blue gradient backdrop" },
      }}
      steps={{
        title: "What each week holds",
        steps: [
          "Send whatever your current system exports",
          "One hour agreeing what each field becomes",
          "A private dry run on your own data",
        ],
      }}
      quote={{
        quote: "Week one is dull and week two is fast. We would rather you knew that in advance.",
        attribution: "Priya Nandan, migration engineer",
      }}
      capture={{
        title: "Get the migration guide",
        media: (
          <Form36
            label="Send me the guide"
            placeholder="you@practice.com"
            submitLabel="Send"
            finePrint="One email with the guide attached."
          />
        ),
      }}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Eyebrow above the hairline rule, rendered through Badge23
headingstringSection heading in the left column of the header
descriptionstringSupporting paragraph, right-aligned from md up
button{ label: string; href: string }Action under the paragraph in the header
progressAssetTileWide card carrying the tracker and its copy
stepsStepTileTwo-column tile holding the numbered list
quoteQuoteTileInverted two-column tile with a pull quote
captureCaptureTileWide card holding the email row
classNamestringExtra classes for the outer section
ts
type ActionLink = {
  label: string;
  href: string;
};

type TileImage = {
  src: string;
  alt: string;
};

type AssetTile = {
  kicker: string;
  title: string;
  description: string;
  media: ReactNode;
  image?: TileImage;
};

type StepTile = {
  title: string;
  steps: string[];
};

type QuoteTile = {
  quote: string;
  attribution: string;
};

type CaptureTile = {
  title: string;
  media: ReactNode;
  image?: TileImage;
};

Behavior notes

Wiring the form up

The email row inside the capture tile is a presentational piece with no submit handling of its own. When you connect it to a real list, the patterns in React Hook Form, TanStack Form, and Formisch cover validation and submission for this shape of single-field form.

More Bento blocks

View all Bento
PRO

bento11

Product Surface Mosaic

A six-column bento mixing a lead card whose image tile floats a live metrics panel, a soft statement tile, an inverted figure tile, a second asset tile carrying an uptime strip, a hairline inclusion list, and a captioned photograph.

PRO

bento12

Evidence Mosaic

A six-column bento of proof: a row of figure tiles with the first inverted, a tall card whose image tile floats a live breakdown chart, a tile carrying a customer quote card, and a soft note on method.

PRO

bento3

Selected Work Bento

Work mosaic on a six-column track mixing photographic tiles that carry their caption inside on a gradient scrim with a soft statement tile and an inverted figure tile, the lead project spanning four columns and two rows.

PRO

bento4

Service Bento With Figure

Service mosaic whose lead tile floats a photo-strip media piece over a dotted field between its eyebrow and statement, beside a photographic tile captioned on its scrim, an inverted figure tile and three soft icon tiles.

PRO

bento2

Studio Summary Bento

Studio mosaic whose lead tile floats a mood-board media piece over a dotted field between its own eyebrow and statement, beside a photographic tile captioned on its scrim, an inverted figure tile, a soft quote tile and a bordered CTA tile.

PRO

bento7

Studio People Bento

Team mosaic where portraits carry their name and role inside the tile on a scrim, interleaved with an inverted quote tile and a wide soft tenure figure tile that closes the grid flush.