B2B SaaS & procurement

A vendor portal that replaced 11,000 emails a month

Quote requests, comparison, approval and invoicing for an industrial procurement business — built as a product, not a project, so it could be sold to their customers.

RFQ cycle time
cut by roughly three-quarters
Email threads per month
cut by nearly 90%
Second tenant onboarded in
about a week, no code change
Sector
Industrial procurement
Scale
~1,900 vendors, 40,000+ SKUs
Engagement
Product build, then a retained pod
Duration
8 months to first customer, ongoing

Stack

  • NestJS
  • PostgreSQL
  • Row-level security
  • React
  • Redis
  • Elasticsearch
  • Keycloak
  • Kubernetes
  • Terraform

Practices involved

Discuss a similar problem

The situation

The business ran industrial procurement for mid-market manufacturers. The process was email: a request arrived, a buyer forwarded it to vendors, quotes came back as PDFs and images, a comparison was built in a spreadsheet, approval happened in a reply-all, and the purchase order was typed into an ERP. It worked because the buyers were good at it, and it did not scale for the same reason.

The constraint

The client wanted to sell this capability to their larger customers as a product. That meant every decision had to be made twice: once for their own operation, once for a tenant they had not met yet. It also meant vendors — small suppliers, often one person with a phone — had to be able to respond without training or a login they would forget.

What we built

Tenancy decided on day four

Shared schema with PostgreSQL row-level security, tenant context enforced at the connection level rather than in application code. Per-tenant restore was the requirement that nearly pushed us to schema-per-tenant; we solved it with tenant-scoped logical backups instead, and wrote down why.

A vendor experience with almost no product in it

Vendors receive a link, see one request, enter prices and lead times or upload their usual quote document, and submit. No account required for the first response. Document uploads run through extraction to pre-fill the structured fields, which the vendor confirms. Adoption depended entirely on this being lighter than replying to an email.

Comparison and approval that match the org chart

Normalised comparison across quotes including landed cost, an approval matrix configurable per tenant by value band, category and cost centre, and full audit history. Deviations from lowest price require a recorded reason — which turned out to be the feature finance teams cared about most.

Catalogue ingestion that expects mess

Vendor catalogues arrive as spreadsheets in every conceivable shape. Mapping templates per vendor, fuzzy matching against the master catalogue, and a review queue for anything below a confidence threshold. Nothing auto-merges silently.

ERP integration without a bespoke build per tenant

An outbound event model with adapters, so a new tenant's ERP is an adapter and a mapping rather than a fork of the product.

What changed

RFQ cycle time fell sharply, and the second tenant went live in under a week without a code change — the test that mattered, because it turned an internal tool into something the business could sell.

What we would do differently

We built notification preferences late, and for two months every stakeholder received every update. Several buyers filtered the notifications into a folder and stopped reading them, which took real effort to undo. Notification design is product design, not a settings screen.

Outcomes

RFQ cycle time
cut by roughly three-quarters
Email threads per month
cut by nearly 90%
Second tenant onboarded in
about a week, no code change

Client identity withheld under a mutual NDA. Figures are illustrative — rounded and directional, meant to show the shape of the change rather than an audited result. We will walk through the real numbers, and how they were measured, under NDA on a call.

Next step

Tell us what you're trying to ship.

Send the brief, the RFP, or three messy sentences about the problem. You get a written point of view from an architect within two working days — not a sales deck.