Webinar Registration Split

Live session

Migrating eleven years of records, walked through on real data

We open one practice's actual export on screen and go column by column, including the four fields nobody at that practice could explain.

When
Thursday 12 June, 14:00 UK
Length
45 minutes, plus questions until they run out

What you will leave with

  • A list of the fields your own export is likely to mangle
  • The two places a migration usually loses a day
  • A worked example of mapping insurer codes without renaming them
  • The recording and the anonymised sample file afterwards
Soft blue gradient backdrop

One reminder the day before, then the recording. Nothing else.

Run by

Portrait of Priya Nandan

Priya Nandan

Migration engineer, 40+ practices moved

Portrait of Elena Rourke

Elena Rourke

Practice lead who lived through one

Cannot make the time? Register anyway and the recording arrives the next morning. There is no gate on it.

About this block

Webinar Registration SplitPRO

A live session sign-up splitting a bordered container between the pitch, a hairline table of when and how long, and a checked takeaway list, beside a soft column holding a working registration card and the hosts.

Event99: Webinar Registration Split

A live session sign-up splitting a bordered container between the pitch, a hairline table of when and how long, and a checked takeaway list, beside a soft column holding a working registration card and the hosts.

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

Base UI flavor

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

This installs the block to components/beste/block/event99.tsx, the form36 capture piece it holds in the tile (installed to components/beste/piece/form36.tsx), and the badge23 component it uses for the eyebrow.

Quick start

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

tsx
import { Event99, event99Demo } from "@/components/beste/block/event99";

export default function WebinarPage() {
  return <Event99 {...event99Demo} />;
}

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

tsx
import { Event99 } from "@/components/beste/block/event99";
import { Form36 } from "@/components/beste/piece/form36";

export default function WebinarPage() {
  return (
    <Event99
      badge={{ label: "Live session" }}
      heading="Migrating eleven years of records, walked through on real data"
      description="We open one practice's actual export on screen and go column by column."
      whenLabel="When"
      when="Thursday 12 June, 14:00 UK"
      lengthLabel="Length"
      length="45 minutes, plus questions until they run out"
      takeawaysTitle="What you will leave with"
      takeaways={[
        "A list of the fields your own export is likely to mangle",
        "The two places a migration usually loses a day",
      ]}
      media={
        <Form36
          label="Save me a seat"
          placeholder="you@practice.com"
          submitLabel="Register"
          finePrint="One reminder the day before, then the recording."
        />
      }
      image={{ src: "/backdrops/blue.jpg", alt: "Soft blue gradient backdrop" }}
      hostsTitle="Run by"
      hosts={[
        {
          name: "Priya Nandan",
          role: "Migration engineer, 40+ practices moved",
          avatar: { src: "/people/priya.jpg", alt: "Portrait of Priya Nandan" },
        },
      ]}
      note="Cannot make the time? Register anyway and the recording arrives the next morning."
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Eyebrow at the top of the pitch column
headingstringSession heading
descriptionstringSupporting paragraph, capped at max-w-md
whenLabelstringLabel for the date row
whenstringDate and time, as free text
lengthLabelstringLabel for the duration row
lengthstringHow long it runs
takeawaysTitlestringHeading above the checked list
takeawaysstring[][]What attendees leave with
mediaReactNodeRegistration card, form36 in the demo
image{ src: string; alt: string }Backdrop behind the media tile
hostsTitlestringHeading above the host list
hostsHost[][]Who is running the session
notestringRecording note under the hosts
classNamestringExtra classes for the outer section
ts
type TileImage = {
  src: string;
  alt: string;
};

type Host = {
  name: string;
  role: string;
  avatar: { src: string; alt: string };
};

Behavior notes

  • The two facts are separate label and value prop pairs rather than a generic array, so the table is always exactly when and how long. Each row renders only when its value is present, so a session with no fixed length simply drops that row.
  • The registration form lives entirely inside the form36 piece. This block holds no form state and has no submit handler.
  • The right column is flex flex-col justify-between, so the hosts and the note pin to the bottom while the registration card takes the space above them. The card is flex-1 with min-h-64, so it grows to fill whatever height the pitch column sets.
  • The two columns split at lg, and the divider between them flips from lg:border-l to border-t when they stack, so the seam always runs across the join.
  • Host rows use min-w-0 with truncate on both lines, so a long role ellipsizes rather than pushing the portrait out of the row.
  • note carries its own border-t, which separates the recording caveat from the hosts above it.
  • Times are plain strings, never parsed, so the page stays free of server and client locale differences.

Wiring the form up

The registration card 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 Event blocks

View all Event
PRO

event94

Featured Session Schedule

An events section that opens with a split featured card pairing a photo with date, time, and format lines, then lists the rest of the schedule as rows separated by hairlines, each with a bordered date tile, host meta, seat count, and register action.

PRO

event66

Workshop Registration Form

Interactive workshop selector with capacity tracking, attendee info form, and pricing summary. Perfect for paid workshops and training session signups.

PRO

event26

Workshop Registration List

Workshop cards with instructor profiles, skill levels, requirements, and live capacity tracking. Perfect for hands-on conference workshops and training sessions.

PRO

event4

Conference Hero with Image

Split-layout event hero displaying conference details with date, location, attendee count, and featured image. Perfect for developer conferences and tech summits.

PRO

event16

Panel Discussion Section

Panel session card featuring moderator highlight, panelist grid, discussion topic, and scheduled time. Perfect for industry panels and expert roundtables.

PRO

event102

Open Hours Session Rows

Upcoming sessions as hairline rows, each opening with the date set as a figure, then the session and what it covers, with its seat state and a booking link on the end.