Skip to content
All integrations Integration / Warranbrooke

Quotes and Cin7 price books.

Warranbrooke sells art and made-to-order framing to households, and to trade, wholesale and commercial buyers. The business runs on Cin7 Core, so that is where a quote has to end up and where trade pricing already lives.

  1. 01

    Shopify

    The storefront and cart, and the catalogs and price lists that trade pricing is written into.

  2. 02

    Integration service

    A TypeScript service on Railway that sits between the store and Cin7.

  3. 03

    Cin7 Core

    Products, customers, quotes and price tiers. The system the business runs on.

  4. 04

    Postgres

    A record of every quote raised, plus short-lived caches of Cin7 products and customers.

  5. 05

    Resend

    Delivers the quote to the customer by email, with the PDF attached.

The objective

What it
had to do.

Not every cart should reach a checkout. A trade buyer, a large order or an oversize piece is quoted first. And trade prices are kept in Cin7 as price tiers, which a Shopify store knows nothing about unless something carries them across.

Business objectives

  • Send the carts that should be quoted — trade and wholesale customers, large orders, oversize pieces — to a quote request instead of a checkout
  • Raise the quote in Cin7 Core directly from the cart, so nobody re-keys it from an email
  • Keep Cin7 as the one place trade pricing is maintained, with Shopify price lists fed from it
  • Hand the customer a PDF quote and a reference number as soon as they ask

The stack

  • Shopify
  • Cin7 Core
  • TypeScript
  • Bun
  • Effect
  • Postgres
  • Drizzle
  • Resend
  • Railway

Key flows

How it runs.

3 flows

Flow 01

From cart to Cin7 quote

The cart decides whether it is a checkout or a quote. A quote goes into Cin7 Core as a draft, without anyone typing it in.

  1. 01 Shopify

    The cart replaces Checkout with “Request a quote” when the customer is tagged trade or wholesale, when the cart holds more than ten items, or when any product in it is tagged oversize.

  2. 02 Shopify

    A form collects contact, company and delivery details, for guests and logged-in customers alike.

  3. 03 Service

    Every SKU in the cart is validated against Cin7 before anything is written.

  4. 04 Cin7 Core

    The customer is found or created, then a sale is raised with its quote lines in draft, carrying a reference back to the Shopify cart.

  5. 05 Postgres

    The quote is logged.

  6. 06 Resend

    A PDF of the quote is generated and emailed to the customer.

  7. 07 Shopify

    The storefront shows the quote reference.

Flow 02

Cin7 price tiers to Shopify price lists

Trade prices are maintained once, in Cin7. The sync writes them into Shopify, where the store’s own catalog pricing takes over.

  1. 01 Cin7 Core

    The sync pages through every product and reads its price tiers.

  2. 02 Service

    Each tier is mapped by name to a Shopify catalog.

  3. 03 Shopify

    Variants are matched to Cin7 products by SKU.

  4. 04 Shopify

    Tier prices are written to the catalog’s price list as fixed prices, 250 at a time.

  5. 05 Shopify

    From there it is native catalog pricing on the storefront and at checkout, with no pricing logic in the theme to maintain.

Flow 03

When Cin7 is slow

A customer asking for a quote should not be the one who finds out another system is having a bad minute.

  1. 01 Service

    Calls to Cin7 time out after 30 seconds and are retried three times, backing off between attempts.

  2. 02 Postgres

    Product lookups are cached for 24 hours and customer lookups for four, so a repeat quote does not wait on Cin7 for what it already knows.

  3. 03 Resend

    Email is best effort: if it fails, the quote still exists in Cin7 and the customer still gets their reference.

More integrations.

All integrations

Your systems, connected

What does your
store not talk to?

Tell us which systems you run and where the re-keying happens. We’ll come back within one business day with where we would start.

Start a project