Components / Travel
Ride Pickup
Free Travel React component — RidePickupWidget. MIT licensed, copy-paste ready for Next.js and Tailwind CSS.
Uber-style pickup card with brand, ETA, car illustration, and vehicle ID. The waiting-screen moment, ready to paste into a mobility app.
Preview

Meet at the pickup point
Mercedes-Benz S00121
Setup
How to use
Free for personal and commercial use. No UI attribution required. Include the MIT copyright notice when copying component source into your project. Read the MIT license.
- 1
Run in your terminal:
$npm install clsx tailwind-merge lucide-react - 2
Copy
lib/cn.tsbelow. Skip if you already havecn(). - 3
Copy the code below and create
components/travel/ride-pickup-widget.tsxin your project. - 4
Import and render:
Exampleimport { RidePickupWidget } from "@/components/travel/ride-pickup-widget";
lib/cn.ts
import { type ClassValue, clsx } from "clsx";import { twMerge } from "tailwind-merge";export function cn(...inputs: ClassValue[]) {return twMerge(clsx(inputs));}
components/travel/ride-pickup-widget.tsx
"use client";import { forwardRef, type ComponentPropsWithoutRef } from "react";import Image from "next/image";import { cn } from "@/lib/cn";import { Car } from "lucide-react";// Ride-hailing pickup card — ETA, vehicle info, and driver photo.export type RidePickupWidgetProps = Readonly<{eta?: string;message?: string;vehicle?: string;image?: string;} & ComponentPropsWithoutRef<"div">>;// Production-ready Ride Pickup component — styled with Tailwind CSS.export const RidePickupWidget = forwardRef<HTMLDivElement,RidePickupWidgetProps>(({className,eta = "2 min",message = "Meet at the pickup point",vehicle = "Mercedes-Benz S00121",image = "/car.png",...props},ref,) => (<divref={ref}data-slot="ride-pickup-widget"className={cn("flex h-44 w-44 flex-col rounded-3xl border border-neutral-100 bg-white font-sans shadow-lg",className,)}{...props}><div className="flex items-center justify-between px-4 pt-4"><span className="text-xs font-bold tracking-wide text-neutral-900">Uber</span><span className="text-[10px] font-bold text-green-500">{eta}</span></div><div className="relative mx-auto my-2 h-20 w-32"><Imagesrc={image}alt={vehicle}fillclassName="object-contain"sizes="128px"/></div><div className="mt-auto rounded-b-3xl bg-neutral-50 px-4 py-3"><p className="text-[11px] font-semibold text-neutral-900">{message}</p><p className="flex items-center gap-1 text-[10px] text-neutral-500"><Car size={10} />{vehicle}</p></div></div>),);RidePickupWidget.displayName = "RidePickupWidget";