Skip to main content
Clever Ops

Service Booking Strip

A workshop booking bar that gets straight to work, logbook, brakes and tyres service pills, a preformatted earliest-slot chip in mono, a tap-to-call fallback, and one book-it-in action.

Preview & code

Loading Service Booking Strip preview

Installation

pnpm dlx shadcn@latest add @cleverui/service-booking-strip

Requires the @cleverui registry in your components.json, a one-off, two-line setup.

Usage

tsx
import { ServiceBookingStrip } from '@/components/ui/service-booking-strip'
Exampletsx
'use client'

import { useState } from 'react'
import { ServiceBookingStrip } from '@/components/ui/service-booking-strip'

const SERVICES = ['Logbook service', 'Brakes', 'Tyres & alignment', 'Battery & electrics']

export default function ServiceBookingStripDemo() {
  const [selected, setSelected] = useState(SERVICES[0])

  return (
    <div className="mx-auto max-w-5xl px-4 py-10 sm:px-6 sm:py-14">
      <ServiceBookingStrip
        heading="Book your next service"
        services={SERVICES}
        selected={selected}
        onSelect={setSelected}
        earliestSlot="Tue 7:20am"
        phone="4732 8811"
        ctaLabel="Book it in"
        onBook={(service) => {
          // Demo: wire your workshop booking system here
          void service
        }}
      />
    </div>
  )
}

API reference

ServiceBookingStrip accepts the following props.

PropTypeDefaultDescription
headingstring'Book your next service'bold sans lead line
services*string[]3–5 job pills
selectedstringcontrolled selection, the strip holds no state
onSelect(service: string) => voidfired when a pill is chosen
earliestSlotstringPREFORMATTED display slot like 'Tue 7:20am', never parsed as a Date
slotLabelstring'Earliest slot'micro-label on the slot chip
phonestringfallback line rendered as 'or call …' with a tel: anchor
ctaLabelstring'Book it in'
onBook(service?: string) => voidinvoked with the selected service
hrefstringrenders the CTA as an anchor instead of a button

…plus everything from Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'>: className, event handlers, aria attributes and the rest pass straight through.

Frequently asked questions

How do I install the Service Booking Strip component?

Register the @cleverui registry in your components.json ("@cleverui": "https://cleverops.com.au/r/{name}.json"), then run `npx shadcn@latest add @cleverui/service-booking-strip`. The shadcn CLI copies the source into your project, you own the code from that point. You can also copy the source directly from this page.

What dependencies does Service Booking Strip require?

Service Booking Strip uses motion and lucide-react on top of React and Tailwind CSS. You don't need to install them manually, the shadcn CLI resolves and installs npm dependencies automatically when you add the component.

Can I theme Service Booking Strip to match my brand?

Yes. The component is styled entirely with Tailwind utilities over standard design tokens (primary, background, muted, border), so it inherits your existing shadcn/ui theme automatically. Change your CSS variables and the component follows, no source edits needed for palette, radius, or fonts.

Want this built for you?

CleverUI is built by the Clever Ops web team. If you'd rather ship a hand-coded, fast, custom website than assemble one, we build them for Australian businesses every week.

Explore web development services