{
  "spec": "quick-html/v0",
  "id": "quote",
  "version": "0.1.0",
  "name": "Quote",
  "description": "Persuasive A4 price quote for client work: validity chip, itemised scope table, VAT and a hero total, terms, and a signature acceptance strip. Pick it when a client needs pricing to approve before any invoice — the sales-side sibling of the invoice template.",
  "useWhen": [
    "quote",
    "quotation",
    "price proposal",
    "estimate for a client",
    "offerte",
    "prijsopgave",
    "angebot",
    "devis"
  ],
  "format": "printable",
  "theme": "business-finance",
  "audience": [
    "freelance",
    "small-business",
    "sales"
  ],
  "tags": [
    "quote",
    "proposal",
    "pricing",
    "acceptance"
  ],
  "language": "en",
  "page": {
    "size": "A4",
    "orientation": "portrait"
  },
  "modules": [
    "edit-overlay",
    "print-helper"
  ],
  "slots": [
    {
      "name": "doc-title",
      "type": "text",
      "required": true,
      "example": "Quote Q-2026-071 — Studio Noord",
      "notes": "Browser tab title; used as the download filename."
    },
    {
      "name": "seller-name",
      "type": "text",
      "required": true,
      "example": "Studio Noord"
    },
    {
      "name": "seller-details",
      "type": "html",
      "required": true,
      "example": "<p>Prinsengracht 412, 1016 JC Amsterdam</p><p>KvK 87614203 · VAT NL864392017B01</p>",
      "notes": "2–4 short <p> lines: address, contact, registration/VAT numbers."
    },
    {
      "name": "quote-number",
      "type": "text",
      "required": true,
      "example": "Q-2026-071"
    },
    {
      "name": "quote-date",
      "type": "date",
      "required": true,
      "example": "14 Aug 2026"
    },
    {
      "name": "valid-until",
      "type": "date",
      "required": true,
      "example": "13 Sep 2026",
      "notes": "Shown in the header chip; quote-date + validity period (default 30 days)."
    },
    {
      "name": "buyer-name",
      "type": "text",
      "required": true,
      "example": "Hotel De Weerd B.V."
    },
    {
      "name": "buyer-details",
      "type": "html",
      "required": true,
      "example": "<p>t.a.v. Saskia de Weerd</p><p>Weerdsingel O.Z. 34, 3514 AC Utrecht</p>",
      "notes": "1–3 short <p> lines."
    },
    {
      "name": "intro-line",
      "type": "html",
      "required": true,
      "example": "<p>Thank you for the good conversation last week. This proposal covers a full brand refresh and website redesign — scoped to launch before your spring season.</p>",
      "notes": "1–2 sentences framing the proposal; one <p>, warm and confident."
    },
    {
      "name": "subtotal",
      "type": "text",
      "required": true,
      "example": "€ 8.860,00"
    },
    {
      "name": "vat-label",
      "type": "text",
      "required": true,
      "example": "VAT 21%",
      "notes": "Label including the rate actually applied."
    },
    {
      "name": "vat-amount",
      "type": "text",
      "required": true,
      "example": "€ 1.860,60"
    },
    {
      "name": "total",
      "type": "text",
      "required": true,
      "example": "€ 10.720,60",
      "notes": "The hero number in the filled band; must equal subtotal + VAT."
    },
    {
      "name": "terms-content",
      "type": "html",
      "required": false,
      "example": "<ul><li>This quote is valid until 13 Sep 2026; line prices are excl. VAT.</li><li>Payment: 40% on commission, 60% on delivery.</li></ul>",
      "notes": "Inside the terms optional block; 3–5 short <li> items: validity, payment split, revisions, exclusions."
    },
    {
      "name": "client-signatory",
      "type": "text",
      "required": true,
      "example": "Saskia de Weerd — Hotel De Weerd",
      "notes": "Printed name under the client signature line, format 'Name — Company'; keep it short enough to stay on one line (under ~35 characters)."
    },
    {
      "name": "seller-signatory",
      "type": "text",
      "required": true,
      "example": "Jorik Meijer — Studio Noord",
      "notes": "Printed name under the seller signature line, format 'Name — Company'; keep it short enough to stay on one line (under ~35 characters)."
    },
    {
      "name": "footer-line",
      "type": "text",
      "required": false,
      "example": "Studio Noord · Amsterdam · studionoord.nl"
    }
  ],
  "repeats": [
    {
      "name": "item",
      "description": "One row per scope line item in the pricing table.",
      "min": 1,
      "max": 30,
      "slots": [
        {
          "name": "item-description",
          "type": "text",
          "required": true,
          "example": "Brand refresh — logo evolution, colour & type system, guidelines",
          "notes": "Keep under ~90 characters; move detail into the terms block."
        },
        {
          "name": "item-qty",
          "type": "text",
          "required": true,
          "example": "38",
          "notes": "Number, optionally with a unit the client understands (e.g. '38' or '38 hrs')."
        },
        {
          "name": "item-unit-price",
          "type": "text",
          "required": true,
          "example": "€ 95,00"
        },
        {
          "name": "item-amount",
          "type": "text",
          "required": true,
          "example": "€ 3.610,00",
          "notes": "qty × unit price, same money format as the other amounts."
        }
      ]
    }
  ],
  "optionals": [
    {
      "name": "terms",
      "description": "Terms block beside the totals: validity, payment split, revision rounds, exclusions."
    }
  ],
  "changelog": [
    {
      "version": "0.1.0",
      "date": "2026-08-14",
      "notes": "Initial release: A4 client quote with validity chip, scope repeat, VAT totals, terms and signature acceptance strip."
    }
  ],
  "agentInstructions": "Fill one 'item' row per scope line and delete the data-example rows — they are preview filler only. COMPUTE ALL NUMBERS YOURSELF and double-check the arithmetic: item-amount = qty × unit price; subtotal = sum of all item amounts; vat-amount = subtotal × the VAT rate; total = subtotal + vat-amount. Use the VAT rate the user states; if none is stated, use the rate that applies in their country (e.g. 21% in NL) and say so in your reply, updating vat-label to match ('VAT 21%', 'BTW 21%'). Mirror the placeholder money format everywhere — '€ 1.234,56' style, adapted to the user's currency/locale — and never mix formats. Dates like '14 Aug 2026'; valid-until = quote-date + the user's validity period (default 30 days), and keep any validity mention inside terms-content consistent with it. Keep item descriptions under ~90 characters; push detail into the terms block. Write intro-line as 1–2 warm, confident sentences tied to the client's goal — persuasive, not hype. Keep the terms optional only when there are real terms to state (validity, payment split, exclusions); remove it otherwise. client-signatory and seller-signatory are printed names ('Name — Company'). If the sender's details are unknown (address, VAT no., IBAN, signatory), leave clearly recognizable placeholders like [YOUR VAT NO.] and tell the user to fill them via the built-in Edit button.",
  "license": "MIT",
  "authors": [
    {
      "github": "bvrln"
    }
  ]
}
