.28

Ennis Fabrics

We partnered with Ennis Fabrics to solve one of the most technically complex challenges in B2B e-commerce: building a custom shipping integration from the ground up. One that could handle real-time rate fetching, intelligent fallback logic, and a fully custom pick-up experience, all without disrupting a live wholesale store.

Challenges

Ennis Fabrics launched on Shopify without a working shipping integration and every order paid the price. Customers checked out blind, with no shipping costs visible, and staff had to follow up manually to confirm rates and collect payment. Every single order required human intervention.
The fix wasn't straightforward. Their shipping API ran through their ERP before reaching the carrier network, introducing enough latency that rate fetching averaged 11 seconds - well beyond Shopify's checkout timeout. A standard integration would fail before the page even loaded.
And on top of that, their wholesale customers needed to pick up orders from regional branches regardless of local stock availability - something Shopify's native pick-up feature simply couldn't support.
Two problems. Both blocking revenue. Neither had an out-of-the-box solution.

Solutions

For Ennis Fabrics, we engineered a fully custom Shopify shipping app to integrate with their proprietary API architecture routed through their X3 ERP system, eliminating the manual order intervention their team had relied on from day one. Our solution addressed three core areas:

Shipping Infrastructure - Pre-fetch rate strategy solved a critical checkout timeout issue, ensuring every customer reaches a completed order without friction or failure.

Pick-Up Experience - Replaced Shopify's native pick-up module with a bespoke solution aligned to how Ennis actually operates, reducing customer confusion and support burden across the full purchase journey.

Account & Order Management - Dynamic order tracking, intelligent rate filtering, and default address protection collectively elevated the wholesale portal into a reliable, self-serve tool for Ennis's B2B customer base
100%
increase in conversion rate
60%
decrease in bounce rates
30%
increase in Average Order Value

account page

Account Address Page:
Redesigned UI - Separate Default & Edit Actions

One of the subtler but more impactful fixes we delivered was solving a data integrity problem Shopify was creating silently: every time a wholesale buyer checked out to a secondary address, Shopify would overwrite their default, causing ongoing confusion for customers managing multiple delivery locations.

We built custom logic to permanently protect the default address, backed by webhooks and a nightly sync. On the front end, the address management UI was redesigned to make the experience clear and mistake-proof,  with a dedicated "Set as Default" button separated cleanly from the edit action, so customers can manage their addresses confidently without accidental changes.

sale agent page

Customer Search & Account Switching for Internal Reps

Wholesale businesses don't just need a great customer-facing experience - their internal sales team needs one too. We built a dedicated Sales Agent feature that allows Ennis reps to search across the full customer account list by name, company, or email, and seamlessly place orders on behalf of any account. What would otherwise require back-and-forth communication or manual admin work becomes a quick search and a single click, giving the sales team the speed and visibility they need to serve wholesale buyers effectively.

PRODUCT  page

Product Detail with Live Stock Availability Across Locations

When a sales rep is working on behalf of a customer, they need the full picture - not just pricing, but real-time inventory across every regional warehouse.
The Sales Agent product view surfaces live stock availability by location (Mississauga, Richmond, Indianapolis and more) directly on the product page, so reps can confidently advise customers on lead times and fulfillment without leaving the storefront.
Volume-based pricing tiers are displayed inline, giving reps instant visibility into the savings a customer qualifies for at different order quantities -  exactly the kind of context needed to close a wholesale order efficiently.

Cart Page

Delivery vs. Pick-Up Selection with Live Address Validation

The cart is where the shipping and pick-up logic becomes tangible for the customer. Rather than forcing wholesale buyers through a full checkout before surfacing fulfillment options, we surfaced the key decision, delivery or store pick-up, directly in the cart drawer.

Customers can select their shipping address from their saved account addresses or switch to Store Pickup, with address validation running in real time before they even reach checkout.

The cart also supports per-line project tagging and a PO number field, giving wholesale buyers the order organization tools they actually need.

Every state, loading, validating, ready, is handled gracefully, so the experience feels polished rather than uncertain.

Services
Strategy
Design
Development
A/B Testing
Technologies
Figma
Sass
Webpack
Shopify

Checkout Page:
Intelligent Fallback Messaging for Large Freight Orders

Not every order can be rated in real time. For large-volume orders that exceed standard carrier thresholds and require less-than-truckload freight, displaying a meaningless rate name or a broken shipping step would erode confidence at exactly the wrong moment.
Instead, we built an LTL exception that detects these orders automatically and presents a clear, professional message, letting the customer know that freight costs will be confirmed by the Ennis Fabrics team, with an explicit consent checkbox before proceeding. The order can still be completed without friction, no shipment gets lost, and the customer feels informed rather than confused. On a $140,000 order, that distinction matters.

typography choise