Skip to content

pastetaste

Quote Builder

FormsDataInteraction

A fixed-price calculator: tilted package cards, an expandable list of add-ons with switches and steppers that change price and delivery days, a currency switch and a summary that sends the itemised quote.

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/quote-builder.tsx.

npx shadcn@latest add https://pastetaste.com/r/quote-builder.json

Prompt

Install the pastetaste component "Quote Builder" (quote-builder) into this Next.js project and use it.

What it is: A fixed-price calculator: tilted package cards, an expandable list of add-ons with switches and steppers that change price and delivery days, a currency switch and a summary that sends the itemised quote.

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/quote-builder.json
   (it writes components/pastetaste/quote-builder.tsx; install any npm packages it reports).
2. Import it: import { QuoteBuilder } from "@/components/pastetaste/quote-builder" (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):
- packages: { id; name; price; days; blurb; items[] }[] = Start, Business, Shop — Packages shown as cards.
- addons: { id; name; note; price; per?; stepper?; days; includedIn? }[] = 5 add-ons — Extras; includedIn lists package ids that already contain it, stepper gives a quantity.
- care: { name; price; note } = Care plan — Monthly plan toggled in the add-ons list and shown separately in the summary.
- currency / secondCurrency: string / { label; rate; symbol? } = 'KM' / EUR at 1.95583 — Primary currency label and a second one with its rate (primary per secondary).
- defaultPackage: string = 'business' — Package selected first.
- sendLabel / fineprint: string = 'Send this quote' / VAT note — Button label and the small print.
- onSend: (quote) => void = - — Receives the package, lines, total, days, care flag and a one-line text.

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

Props 7

PropTypeDefaultDescription
packages{ id; name; price; days; blurb; items[] }[]Start, Business, ShopPackages shown as cards.
addons{ id; name; note; price; per?; stepper?; days; includedIn? }[]5 add-onsExtras; includedIn lists package ids that already contain it, stepper gives a quantity.
care{ name; price; note }Care planMonthly plan toggled in the add-ons list and shown separately in the summary.
currency / secondCurrencystring / { label; rate; symbol? }'KM' / EUR at 1.95583Primary currency label and a second one with its rate (primary per secondary).
defaultPackagestring'business'Package selected first.
sendLabel / fineprintstring'Send this quote' / VAT noteButton label and the small print.
onSend(quote) => void-Receives the package, lines, total, days, care flag and a one-line text.
View all →