Ride Booking

Ride-share style booking with pickup/dropoff address inputs, schedule now/later toggle, ride class selector (economy/comfort/xl) with ETA and fare, payment method row, and confirm ride CTA. Perfect for taxi, transfer, and shuttle apps.

PRO

Booking17: Ride Booking

A single-card ride-share booking form that stacks pickup and drop-off text inputs joined by a vertical route indicator, a "now" / "later" schedule tab pair with a contextual hint line, a divided list of selectable ride classes each showing an icon, label, optional popular badge, ETA, seat capacity and fare, an optional payment method row, and a sticky footer that echoes the selected ride's fare next to a confirm 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/booking17?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/booking17.tsx, plus the badge, button, and tabs shadcn/ui primitives it uses for the section eyebrow and ride popular badge, the confirm button, and the schedule now/later toggle.

Quick start

The installed file exports booking17Demo alongside the block: the exact props behind the preview above. Spread it to get a working ride booking card in one line.

tsx
import { Booking17, booking17Demo } from "@/components/beste/block/booking17";

export default function Page() {
  return <Booking17 {...booking17Demo} />;
}

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

tsx
import { Car, CarFront, Truck } from "lucide-react";
import { Booking17 } from "@/components/beste/block/booking17";

export default function Page() {
  return (
    <Booking17
      badge={{ label: "Transfer", variant: "secondary" }}
      heading="Book your <strong>ride</strong>"
      currency="$"
      defaultPickup="Atatürk Airport, Terminal 2"
      defaultDropoff="Hilton Istanbul Bosphorus"
      rideClasses={[
        { value: "economy", label: "Economy", description: "Affordable rides for up to 4", capacity: 4, eta: "3 min", price: 18, icon: CarFront },
        { value: "comfort", label: "Comfort", description: "Newer cars with more legroom", capacity: 4, eta: "5 min", price: 26, icon: Car, popular: true },
        { value: "xl", label: "XL", description: "Extra space for groups & luggage", capacity: 6, eta: "7 min", price: 38, icon: Truck },
      ]}
      paymentMethod={{ label: "Visa •••• 4242", description: "Default card" }}
      labels={{ scheduleNowLabel: "Now", scheduleLaterLabel: "Later", bookButton: "Confirm ride" }}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string; variant?: "default" | "secondary" | "outline" }Section eyebrow badge above the heading
headingstringSection heading, supports inline <strong>
descriptionstringMuted paragraph under the heading
currencystring"$"Symbol prefixed to every ride price and the footer total
defaultPickupstring""Initial value of the pickup input
defaultDropoffstring""Initial value of the drop-off input
rideClassesRideClass[][]Selectable ride rows
paymentMethod{ label: string; description: string }Optional payment row; omit to hide it
labelsBooking17Labels{}All inline copy strings (see type below)
classNamestringExtra classes for the outer <section>
ts
type RideClass = {
  value: string;
  label: string;
  description: string;
  capacity: number;
  eta: string;
  price: number;
  icon: LucideIcon;
  popular?: boolean;
};

type Booking17Labels = {
  pickupLabel?: string;
  pickupPlaceholder?: string;
  dropoffLabel?: string;
  dropoffPlaceholder?: string;
  scheduleLabel?: string;
  scheduleNowLabel?: string;
  scheduleLaterLabel?: string;
  scheduleHintNow?: string;
  scheduleHintLater?: string;
  popularBadge?: string;
  paymentLabel?: string;
  etaPrefix?: string;
  capacitySuffix?: string;
  totalLabel?: string;
  bookButton?: string;
};

Behavior notes

Wiring the form up

This block ships the form markup only; state, validation, and submit are yours to add. Our guide wires the shadcn Field primitives to React Hook Form, TanStack Form, and Formisch on one field system.

More Booking blocks

View all Booking
PRO

booking20

Car Rental Booking

Vehicle rental flow with pickup and return location fields, date range picker, car class grid (compact/suv/luxury) with image and specs, insurance tier selector, optional add-ons, and live price breakdown.

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.

FREE

booking15

Booking Confirmation Receipt

Post-booking success screen with animated check icon, confirmation number, booking summary (service, date/time, location, total), scannable QR code ticket, action buttons (calendar, receipt, directions), and email confirmation note.

PRO

booking14

Activity Experience Booking

Tours and experiences booking card with hero image overlay, rating, duration, difficulty badge, date picker, traveler counter, language selector, highlights list, and reserve CTA. Perfect for guided tours, classes, and local experiences.

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

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.