Overview
Use this flow when you need to create a quote, send it as a proposal, and confirm the customer-facing PDF output.
What is now in production
- Quote send generates a real PDF attachment (
Proposal-<quoteNumber>.pdf). /quotes/[slug]now embeds the generated proposal PDF on the left side of the detail page and keeps the live action, message, activity, file, and detail rail on the right, with the prior HTML preview only as a fallback.- Customer portal PDF download works from
/q/[token]/pdf. - Default proposal layout is brand-aware and uses live record data.
- If no company logo exists, the PDF header renders cleanly without a logo placeholder.
- After a draft is saved, quote builder preview can refresh against live renderer output.
- Sent quote emails are tracked in Inbox sent threads with attachment metadata.
- Default outbound quote email styling now uses the saved branding logo and current document accent color.
- Quote send dialog includes
Send a Bcc to myselfandNotify customer via SMS. - SMS preview and reminder automation defaults are controlled from
/settings/communications.
Routes used
/quotes/quotes/new/quotes/[slug]/q/[token]
Step 1: Prepare quote data
- Open
/quotes/new. - Set contact and property (required for
ToandForblocks). - Add scope, services, and line items.
- Save and confirm totals on
/quotes/[slug].
Step 2: Confirm branding inputs
Before sending, confirm these workspace settings are correct:
/settings/company/brandingfor logo and brand color./settings/company/brandingnow crops company logos before upload and saves only the cropped asset used by PDFs and branded email headers./settings/company/brandingdocument palette (text/muted/line/paper colors)./settings/company/brandingdocument labels (Proposal, reference/date/valid-for labels)./settings/company/brandingheader/footer toggles (show company name, registration number)./settings/companyfor company name/contact details.
These values feed the default proposal PDF header/footer and the default quote email layout.
Step 3: Send the quote
- Open
/quotes/[slug]. - Review the embedded generated proposal PDF on the left side of the detail page.
- Confirm recipient email.
- Choose send controls:
Send a Bcc to myselfNotify customer via SMS- Optional SMS phone override and
Preview SMS
- Send the quote to the recipient email.
- Keep Attach PDF enabled if you want the proposal attached in email.
- Open
/inboxand confirm the sent thread contains the outbound quote email.
Expected result:
- Email is sent.
- Bcc and SMS behavior follows selected send toggles (or workspace defaults).
- Attachment is
Proposal-<quoteNumber>.pdf. - Public quote link points to
/q/[token]. - Inbox sent thread shows attachment count and PDF filename.
Step 4: Verify customer portal PDF
- Open the customer link
/q/[token]. - Click Download PDF.
- Confirm the PDF opens and includes current quote totals, scope, and branding.
Validation checklist
- Quote send succeeds without blocking errors.
- Proposal attachment is present in sent email.
/q/[token]/pdfreturns a PDF file (not JSON).- Header/footer content matches workspace branding and company settings.
- Outbound quote email uses the saved logo and brand accent when default email content is used.
/inbox/threads/:idincludes outbound email attachment metadata for the PDF.
Troubleshooting
Download PDF opens data instead of a PDF file
This should not happen in current production behavior. Re-test with a fresh sent quote and confirm the token is valid.
Header is missing logo
If no logo is configured in branding settings, this is expected. Add a logo in /settings/company/branding and resend.
Contact or location block is incomplete
Update contact/property records used by the quote and resend so the PDF reflects current data.