Hulo Global
Plugins Roadmap

Quotations changelog

Every release of @huloglobal/vendure-plugin-quotations. Latest release: v0.7.1 — 24 September 2026.

v0.7.1

24 September 2026 Latest
Fixed
  • Editing a sent quote no longer silently pushes its expiry to 30 days from now; validity only changes when the editor sets it.
  • Two concurrent creates can no longer receive the same reference: numbers are claimed with a compare-and-set and (channelId, reference) is unique.
  • Viewing, accepting/declining and converting are now single-shot: parallel first views produce one "opened" event and one notification, a double-submitted accept cannot notify twice, and a double "Convert" cannot create two draft orders (the quote is claimed before the draft is created and released if it fails).
  • A revision now supersedes the original (which is cancelled) instead of leaving both acceptable.
  • Catalogue search and request pricing work on Postgres (enabled IS TRUE instead of = 1) and in non-English shops (the admin's language, falling back to English).
  • requested quotes are no longer served on the public quote URL before they are priced.
Changed
  • One pooled SMTP transport with 10 s connect / 30 s send deadlines instead of a new connection per email with nodemailer's 2 min / 10 min defaults. Merchant notifications and request acknowledgements are sent off the request path, so a slow mail server never stalls the customer's page or the hourly cron.
  • The public request throttle keys on the real client address (no longer trusts a spoofable header), adds a per-email bucket, and evicts idle entries instead of wiping everyone's counters.
  • Quote lines are written in one statement; long text fields are capped; config reads no longer swallow database errors and fall back to defaults.
  • Chaser and expiry-reminder sweeps read each quote once; a skipped hourly tick is logged; the licence-server lead call has a timeout.
  • Line and VAT rounding use integer arithmetic; emails and the quote page format the validity date the same way; expiry is judged by the database clock everywhere.
  • Admin editor: search results that arrive out of order are ignored; timers are cleared on destroy.

v0.7.0

18 September 2026
Added
  • Quote requests from your storefront. A public, unauthenticated POST /quotations/request lets any site — a basket, a product page, a calculator or a plain form — ask for a quote. Each request lands in the admin as a requested quote with catalogue lines (by variant id or SKU) pre-priced at the channel's list price, free-text lines left for you to price, the customer's message and where it came from. The channel's notify address gets the details, and the customer receives an acknowledgement carrying the quote reference (editable template in Settings). Existing customers are linked by email.
  • Requests inbox. A new *Requests* tile on the Quotes page shows how many are waiting for a price (click it to filter); the detail panel shows the customer's message; requested quotes are editable, deletable and sent with the same Send to customer button, which moves them to *sent*.
  • Per-channel switch. *Accept quote requests* in Settings (on by default) turns the endpoint off for a channel.
Notes
  • Requests are throttled per client address (10 an hour), a hidden website field acts as a honeypot, and the endpoint never needs a licence — sending the finished quote does, as before.
  • Schema: quotation.requestMessage / requestSource / requestedAt, quotation_config.acceptRequests / requestAckBody (added automatically on boot).

v0.6.1

2 September 2026
Changed
  • Branding. The bundled hulo-global-logo.svg is now the HG wordmark on the HULO black rounded square (the same mark as the huloglobal.com header), with explicit -light and -dark variants alongside the auto-switching default.

v0.6.0

2 September 2026
Added
  • Licence & billing card in the admin. Always visible: the current state (free tier, free trial with first-charge date, monthly/annual subscription, lifetime, or master licence) with the actions that apply — start the 14-day free trial or subscribe, buy lifetime, Manage billing (Stripe customer portal: update card, cancel, switch plan) and Upgrade to lifetime (the old subscription stops billing at the end of its paid period). Requires licence SDK ^0.14.0.

v0.5.1

2 September 2026
Changed
  • The 14-day free trial is now card-backed. Unlicensed installs run in the free tier; start the trial from the admin banner (monthly or annual → *Start 14-day free trial*) — Stripe collects a card, nothing is charged until day 15, cancel any time before then, one trial per customer — and the licence installs itself within a minute. The automatic no-card evaluation window is retired (licence SDK ^0.13.0).

v0.5.0

2 September 2026
Added
  • Buy licence from the admin. The evaluation / free-tier banner now has a plan picker and a Buy licence button: checkout opens in a new tab and, once payment completes, the licence installs itself — no email round-trip, no .env edit, no restart. Renewed subscription keys are picked up automatically too. New admin endpoints licence/purchase-link and licence/claim-status.
Changed
  • Requires @huloglobal/vendure-licence-sdk ^0.12.0.
  • The 7-day card trial at checkout has been retired: every install already gets the 14-day no-card evaluation, and paid plans now bill from day one.

v0.4.0

1 September 2026
Added
  • Channel-branded emails, properly. New per-channel branding fields — website, phone, business address and a footer note (company/VAT number) — rendered as a professional footer on both the quote email and the customer quote page, alongside the existing logo, accent colour and business name. Every channel sends fully in its own brand.
  • Dropdowns everywhere sensible. VAT rate (UK standard/reduced/ zero + custom), validity (7/14/30/60/90 days + custom) and currency are now dropdowns in the editor; settings gained preset dropdowns for default VAT/validity, chaser and expiry-reminder cadence, a currency select, accent-colour swatches, and an "Insert variable…" picker for the email template.

v0.3.0

1 September 2026
Changed
  • Step-by-step quote wizard. The editor is now four guided steps — Customer → Items → Pricing → Review & send — with a progress bar, per-step validation hints ("a name and a valid email unlock the next step"), clickable completed steps, and a final review that mirrors what the customer will see with one big "Send quote" button. Sensible channel defaults mean most quotes never need the Pricing step touched.
  • The admin nav entry now lives only under Sales.

v0.2.0

1 September 2026
Added
  • Send as a member of staff. Pick any administrator in the editor (defaults to you): their name fronts the email's From header, replies go straight to their inbox, the customer page shows "Prepared by", the {{staffName}} variable signs the email body, and accept/decline/ opened notifications reach them directly.
  • Customer picker. Search existing Vendure customers in the editor — name, email, company and phone autofill (and the quote links to the customer record).
  • Preview & test-send. Open the rendered customer email in a tab, or send the real thing to yourself (subject-tagged [TEST]) before it goes to the customer.
  • Extend validity. Push the expiry date out on open quotes — and revive expired ones — in one click, with the audit trail updated.
  • Opened notifications. Optional per-channel "email me when the quote is first opened" — the best moment to pick up the phone.
  • Internal notes. Comment on the activity trail; never shown to the customer.
  • Admin navigation. The plugin now registers a "Quotations" entry in the admin nav (Sales section) — no more typing the URL.
  • Plugin logo.

v0.1.0

1 September 2026
Added
  • Initial release. Quote builder (catalogue search with live prices, free-text lines, per-line + quote-level discounts, VAT, validity, notes/terms), per-channel branding + numbering, branded customer email with signed accept/decline link, typed-name signature capture, viewed/accepted/declined tracking with a full per-quote audit trail, auto-expiry, unopened-quote chaser + expires-soon reminder, conversion of accepted quotes to draft orders at the exact quoted total, KPI dashboard (win rate, open pipeline, response time), MySQL/MariaDB + PostgreSQL support, in-admin licence activation and one-click in-app updates. 14-day full-featured evaluation; free tier is draft + preview.