Event Ticket Booking

Event ticket selection with event banner, date/venue info, ticket tier cards (General/VIP/Backstage) with perks list, quantity selector, and order total. Concert and conference ticket flow.

PRO

Booking9: Event Ticket Booking

A single-column ticket picker for one event: an optional banner image with a live-event badge, a date/time/venue info bar, a stack of selectable ticket-tier cards each listing perks and a per-ticket price, with a quantity stepper that appears on the selected tier and a sticky footer summarizing the running order total behind a book 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.

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

Base UI flavor

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

This installs the block to components/beste/block/booking9.tsx, plus the badge and button shadcn/ui primitives it uses for the event and tier badges and the footer book button.

Quick start

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

tsx
import { Booking9, booking9Demo } from "@/components/beste/block/booking9";

export default function Page() {
  return <Booking9 {...booking9Demo} />;
}

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

tsx
import { Booking9 } from "@/components/beste/block/booking9";

export default function Page() {
  return (
    <Booking9
      badge={{ label: "Tickets on sale", variant: "secondary" }}
      heading="Grab your <strong>tickets</strong>"
      description="Pick a tier and choose how many tickets you need."
      eventName="Neon Horizons Music Festival"
      eventImage="https://example.com/event.jpg"
      date="June 21, 2026"
      time="6:00 PM"
      venue="Skyline Arena"
      location="Los Angeles, CA"
      currency="$"
      tiers={[
        {
          name: "General Admission",
          price: 79,
          description: "Access to main stage and food court areas.",
          perks: [{ text: "Main stage access" }, { text: "Food & drink vendors" }],
          maxQty: 10,
          remaining: 142,
        },
        {
          name: "VIP Experience",
          price: 199,
          description: "Premium viewing area with complimentary drinks.",
          perks: [{ text: "VIP lounge & viewing deck" }, { text: "Fast-track entry" }],
          maxQty: 6,
          remaining: 38,
          highlight: true,
        },
      ]}
      labels={{ noSelection: "Select tickets to continue", bookButton: "Get Tickets" }}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string; variant?: "default" | "secondary" | "outline" }Section eyebrow badge above the heading
headingstringSection heading, supports inline <strong>
descriptionstringParagraph rendered under the heading
eventNamestringTitle overlaid on the banner and passed to the book log
eventImagestringBanner image URL; the whole banner block is omitted when unset
datestringDisplayed in the info bar with a calendar icon
timestringDisplayed in the info bar with a clock icon
venuestringDisplayed in the info bar with a map-pin icon
locationstringAppended after venue as , location; only shown when venue is set
currencystring"$"Prefix for every price and the order total
tiersTicketTier[][]Selectable ticket-tier cards
labelsBooking9Labels{}Text overrides for badges, price suffix, and button copy
classNamestringExtra classes for the outer <section>
ts
type TicketPerk = {
  text: string;
};

type TicketTier = {
  name: string;
  price: number;
  description: string;
  perks: TicketPerk[];
  maxQty: number;
  remaining?: number;
  highlight?: boolean;
};

type Booking9Labels = {
  liveEventBadge?: string;
  popularBadge?: string;
  perTicketLabel?: string;
  remainingSuffix?: string;
  noSelection?: string;
  bookButton?: string;
};

Behavior notes

More Booking blocks

View all Booking
PRO

booking7

Hotel Room Booking

Hotel room selection with room type cards showing images, amenity icons, guest capacity, price per night, check-in/check-out date picker, guest counter, and total price summary.

PRO

booking8

Flight Booking

Flight search results with airline logos, departure/arrival times, duration, stops, class selector (economy/business/first), baggage info, and price comparison. Airline ticket booking flow.

PRO

booking6

Restaurant Reservation

Restaurant table reservation with guest count selector, date/time picker, seating preference (indoor/outdoor/bar), special requests textarea, and booking summary. Fine dining reservation flow.

PRO

booking2

Reservation Summary

Booking confirmation card with service details, date/time, provider info with avatar, price breakdown with subtotal/tax/discount/total, promo code input, cancellation policy, and confirm CTA.

PRO

booking10

Meeting Room Booking

Coworking meeting room reservation with room cards showing capacity, equipment icons, hourly pricing, time range selector, attendee count, and total cost. Office and coworking space booking flow.

PRO

booking11

Price Calendar

Google Flights-style price calendar with per-day pricing, cheapest day highlights, expensive day indicators, date range selection, and best deal summary banner. Universal for hotels, flights, car rentals, and vacation bookings.