Skip to content

pastetaste

Visit Booking Wizard

FormsInteractionSections

A five-step booking sheet (who, what, with whom, day and time, details) with a step list and live summary on the side, provider working days that grey out the day picker and a confirmation with a reference.

Paste it into Claude Code: it installs the component, asks for your brand and content, and places it on the page you name.

Install

Or by hand, in a Next.js project with shadcn set up. It writes components/pastetaste/visit-booking-wizard.tsx.

npx shadcn@latest add https://pastetaste.com/r/visit-booking-wizard.json

Prompt

Install the pastetaste component "Visit Booking Wizard" (visit-booking-wizard) into this Next.js project and use it.

What it is: A five-step booking sheet (who, what, with whom, day and time, details) with a step list and live summary on the side, provider working days that grey out the day picker and a confirmation with a reference.

Before you place it, ask me (one short message, in my language; "skip" = sensible default): which page and section it goes in, my brand colour (hex), the text, labels or images it should show, and whether I want my logo or my own copy in the demo content. Then:

Steps:
1. If the project has no components.json, run: npx shadcn@latest init -y -d. Then run: npx shadcn@latest add https://pastetaste.com/r/visit-booking-wizard.json
   (it writes components/pastetaste/visit-booking-wizard.tsx; install any npm packages it reports).
2. Import it: import { VisitBookingWizard } from "@/components/pastetaste/visit-booking-wizard" (check the file for the exact named export).
3. Put it where it fits on the page I name, keep the rest of the page untouched, and pass props for my colours instead of editing the installed file.
4. It does not depend on Tailwind; colours come from CSS variables (--pt-*) or props.
5. It supports prefers-reduced-motion with a still state; do not remove it.

Props (all optional unless the type has no default):
- subjects: { id: string; label: string }[] — Step 1 options (who the visit is for).
- services: { id; label; from?; notFor? }[] — Step 2 options; notFor hides one for some subject ids.
- providers: { id; name; role?; img?; days; tint? }[] — Step 3 options; days are working weekdays (0 = Sunday).
- slots: string[] — Times offered each day.
- closedDays / shortDays: number[] / Record<number, number> = [0] / { 6: 6 } — Weekdays with no bookings; weekday to number of slots offered.
- dayCount / today: number / string = 12 / now — How many days are listed and a fixed ISO date.
- title / overline / steps: string / string / [5 strings] — Side panel text and step names.
- anyProvider / subjectNameLabel: string = First available / Name of the pet — Label of the any-provider choice and of the second name field.
- onConfirm: (booking: WizardBooking) => void — Called with the booking and its reference.
- className / style: string / CSSProperties — On the root.

Live preview: https://pastetaste.com/c/visit-booking-wizard
Then run the dev server, check it in the browser at desktop and mobile width, and tell me the page URL.

Props 10

PropTypeDefaultDescription
subjects{ id: string; label: string }[]-Step 1 options (who the visit is for).
services{ id; label; from?; notFor? }[]-Step 2 options; notFor hides one for some subject ids.
providers{ id; name; role?; img?; days; tint? }[]-Step 3 options; days are working weekdays (0 = Sunday).
slotsstring[]-Times offered each day.
closedDays / shortDaysnumber[] / Record<number, number>[0] / { 6: 6 }Weekdays with no bookings; weekday to number of slots offered.
dayCount / todaynumber / string12 / nowHow many days are listed and a fixed ISO date.
title / overline / stepsstring / string / [5 strings]-Side panel text and step names.
anyProvider / subjectNameLabelstringFirst available / Name of the petLabel of the any-provider choice and of the second name field.
onConfirm(booking: WizardBooking) => void-Called with the booking and its reference.
className / stylestring / CSSProperties-On the root.
View all →