ANP Office Furniture
A Shopify storefront for a Canadian office furniture dealer — with a custom carrier integration that quotes real parcel and freight rates at checkout, on an order that might be one chair or a pallet of desks.
A real client build, published with ANP's permission. Eight weeks from kickoff to launch: the storefront, the shipping integration and the handoff documentation. ANP loaded the catalogue and runs the store day to day.
Problem & Scope
The Challenge
Office furniture breaks e-commerce shipping. A task chair goes in a box on a parcel van; a double-pedestal desk is 215 pounds on a pallet and moves by freight. Shopify quotes the first case natively and has no idea what to do with the second, so most dealers in this trade give up and hide the price behind a quote form. ANP wanted the opposite: a customer picks a desk, sees a real delivery price, and buys it — without a phone call.
What We Built
- Shopify storefront, customised on the Horizon theme
- Custom carrier middleware on Cloudflare Workers
- Live parcel and freight rates quoted at checkout
- Desk finishes consolidated into variants under one product code
- SKUs visible on product, collection and homepage listings
- Search that matches on SKU, including type-ahead, for reordering
- Live stock indicators on product cards
- A written handbook so their staff can run the store unaided
What Makes It Work
Two Carriers, One Checkout
Parcel items route to Purolator and freight items to Purolator Freight, decided per product rather than per order. A cart holding both is the hard case, and it's the one the integration is built around.
Built to Fail Expensively
If a product is missing its shipping classification the middleware treats it as freight, not parcel. That's deliberate: an over-quote gets noticed and corrected, while an under-quote ships a pallet on a parcel rate and the dealer eats the difference silently.
A Storefront That Speaks B2B
SKUs on every listing, live stock counts, and a search that matches part numbers as you type. A buyer reordering the same chair for a third office should not have to remember what it was called.
How We Built It
Build the Hard Part First
The carrier integration was the only piece with an external dependency and a real chance of failure, so it went first — behind a mock carrier client, with a full test suite, before a single real credential existed. That kept the build moving while access was still being arranged.
Middleware, Not a Plugin
There's no off-the-shelf app for this, so the rate quoting runs as a small TypeScript service on Cloudflare Workers, speaking Shopify's Carrier Service API with HMAC-verified requests. Product dimensions and routing live in Shopify metafields, so the client controls the data rather than the developer.
Ship, Then Correct
The carrier plan changed mid-build when freight moved to Purolator Freight. Because routing was a configuration concern rather than hard-coded, that was a swap rather than a rewrite — which is most of the argument for building it this way.
Hand It Over Properly
The store is run by ANP's own staff, so the last deliverable was a handbook written for them rather than for a developer: adding products, pricing, stock, orders, and specifically which shipping fields decide what a customer gets quoted. A build nobody can operate isn't finished.
We Can Build Something Like This For You.
Designed, built and shipped end to end — the storefront, the integration and the documentation. If your business needs the same, that is the work we do.