Client Project · B2B Office Furniture
ANP Office Furniture
A furniture store built for everything from one chair to a whole office. Customers can see live delivery costs and place an order without calling for a shipping quote.
At a glance
The problem
Shopify prices a parcel but not a 215 lb desk on a pallet, so freight delivery costs normally mean a phone call or a quote form before anyone can buy.
What I built
A Shopify store with live parcel and freight rates at checkout, part-number search for reorders, and a handbook so ANP's staff can run it.
What they can do now
Customers see a real delivery price for anything from one chair to a whole office, and order online without phoning for a shipping quote. ANP's own staff run the store day to day.
Evidence
“The site they designed is better than any competitors’ in the market.”Ken W., Owner, ANP Office Supply
Live at anpofficefurniture.ca, published with ANP's permission.
Got a problem like this? Book a free call
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.
A real client build, published with ANP's permission. The work covered the storefront, shipping integration, and handover documentation. ANP loaded the catalogue and runs the store day to day.
What I built
- Shopify storefront, customised on the Horizon theme
- Custom carrier middleware on a dedicated host with a static IP
- 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
Highlights
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.
Reducing the Risk of Underquoting
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.
Jason and the team at Bunker41 designed our commercial furniture webstore to help us penetrate the competitive GTA market. The site they designed is better than any competitors’ in the market. It is fast, sophisticated, and visually appealing with the advanced functionality you need in today’s market. We are beyond satisfied!
Behind the scenes
How I approached 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 a dedicated host, 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.
Got a project in mind?
Tell me what you’d like to improve. The first call is free, and you’ll know the price before any work starts.