Skip to content

pastetaste

Ride Reserve Board

InteractionDataSections

A bookable weekly schedule: rows with day, level, distance, climb and a live spots bar, level and day filters with a level description, reserve and cancel toggles, waitlist for full sessions and a bookings status line.

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/ride-reserve-board.tsx.

npx shadcn@latest add https://pastetaste.com/r/ride-reserve-board.json

Prompt

Install the pastetaste component "Ride Reserve Board" (ride-reserve-board) into this Next.js project and use it.

What it is: A bookable weekly schedule: rows with day, level, distance, climb and a live spots bar, level and day filters with a level description, reserve and cancel toggles, waitlist for full sessions and a bookings status line.

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/ride-reserve-board.json
   (it writes components/pastetaste/ride-reserve-board.tsx; install any npm packages it reports).
2. Import it: import { RideReserveBoard } from "@/components/pastetaste/ride-reserve-board" (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):
- sessions: BoardSession[] = 10 sample rides — { id, day (index into days), time, title, level, km, climb, start, lead, spots, taken }.
- levels: { id, pace, text }[] = 4 levels — Filter chips; the description of the chosen level is printed under the filters.
- days: { short, date }[] = 7 days — Day filter chips and row labels.
- initialRows: number = 4 — Rows shown before the filters open with 'Show all'.
- distanceUnit / climbUnit: string = 'km' / 'm climbing' — Unit labels.
- onReserve: (id: string, going: boolean) => void — Called when a spot is reserved or cancelled.
- accent / ink: string = #cfdcf5 / #14171a — Highlight of reserved rows and the main colour.
- className / style: string / CSSProperties — On the root.

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

Props 8

PropTypeDefaultDescription
sessionsBoardSession[]10 sample rides{ id, day (index into days), time, title, level, km, climb, start, lead, spots, taken }.
levels{ id, pace, text }[]4 levelsFilter chips; the description of the chosen level is printed under the filters.
days{ short, date }[]7 daysDay filter chips and row labels.
initialRowsnumber4Rows shown before the filters open with 'Show all'.
distanceUnit / climbUnitstring'km' / 'm climbing'Unit labels.
onReserve(id: string, going: boolean) => void-Called when a spot is reserved or cancelled.
accent / inkstring#cfdcf5 / #14171aHighlight of reserved rows and the main colour.
className / stylestring / CSSProperties-On the root.
View all →