A quote is a proposal for work, priced and itemized, that a client can accept or decline through a public URL without logging in. When accepted, a quote converts into a one-time ClientService plus scheduled Visit.
Creating a quote
- Owner → Quotes → "New quote."
- Pick a client (or create one inline).
- Add line items: each with a description, quantity, unit price, and optional "Is optional" toggle for upsells.
- Set an expiry date (default 30 days).
- Review the subtotal / total (optional items excluded from subtotal by default).
- Click "Send." The quote gets an auto-generated number (
Q-YYYYMM-NNN) and a public accept URL.
Quote numbering
Numbers are per-tenant per-month: Q-202604-001, Q-202604-002, etc. Resets on the 1st of each month. The format is human-readable and supports about 999 quotes per month (well above any shop we've seen).
Optional line items
Any line item can be marked optional. Optional items:
- Appear on the accept page with a checkbox so the client can add them.
- Do NOT count in the subtotal until selected.
- When selected, flip to included and are added to the final total.
Sending the quote
Once sent, the quote enters status sent. The client receives an email (and SMS if configured) with a link to the public accept URL. Status transitions:
- draft — created, not yet sent
- sent — delivered to client
- viewed — client opened the accept URL
- accepted — client clicked accept, with or without optional items
- declined — client declined (optional reason captured)
- expired — past the valid-until date without action
- converted — accepted quote has been converted into a ClientService + Visit
Converting to a visit
Once a quote is accepted, the owner can click "Convert" on the quote detail page. This creates a one-time ClientService with the quote's total as the price and a Visit scheduled for the next business day (you can adjust).