Skip to content

( Building Products )

The same group's retail counter, built as custom commerce

HVAC Warehouse is the third property of the Australian group behind Airvent and Ductlab. The other two take a trade quote and a WooCommerce order. This one takes a card from a contractor who wants one duct connector today — so it was built as a custom Laravel application instead.

Client
HVAC Warehouse
Sector
Building Products
Location
Australia

( The situation )

Where they started.

HVAC Warehouse sells PVC ducting, inline fans, dampers, header boxes, run-on timers and cleaning covers direct to whoever needs them. It is not a new client. Its own premium brands block carries the Airvent and Ductlab logos, and a good deal of what it ships is Airvent-branded stock — the external run-on timer unit, the EC-motor inline fans, the header box exhaust fans. Same group, same range, third shopfront.

What earns it a write-up of its own is that the three properties sell in three genuinely different ways. Airvent runs the trade side: request a quote, credit application, trade references, buying by the pallet on account. Ductlab runs a WooCommerce store. HVAC Warehouse is the retail counter — one 220x90 duct connector or one 150 mm EC inline fan, paid for with a card, no account application and no phone call.

The problem

The same stock, sold three ways, does not fit on one site. Bolting a card checkout onto a trade catalogue compromises the specifier and the retail buyer at the same time — so the third channel needed a build rather than a plugin.

( What we built )

The work itself.

It is the only one of the group's three sites that is not a WordPress build, and the difference shows up in what the pages can do rather than in how they look.

code

Custom Laravel, checkable from the headers

nginx, a Laravel session cookie and a Vite-built asset bundle under /build/assets/. No WordPress, no Shopify, no page builder, no generator meta — the whole stack is confirmable from the response to a single request. Nothing on the page depends on a plugin somebody else maintains.

straighten

Filed by dimension, like the rest of the group

Seventeen category paths: PVC ducting across six sizes from 220x90 to 500x75, inline fans split by 100, 125, 150 and 200 mm, plus duct dampers, header boxes, run-on timers, cleaning covers and accessories. The same size-first logic as the trade catalogues, because it is the same stock and the same buyer.

shopping_cart

A real cart, not an enquiry form with a price on it

Cart, accounts and login are live routes, and the checkout turns away an empty basket rather than accepting one. Prices are published in Australian dollars on the page, with the SKU and stock status beside them, so a contractor can read the number without registering for it.

data_object

Product markup generated from the catalogue

The home page alone carries 309 schema.org itemprop markers, behind 26 Product and 26 Offer blocks with SKU, brand, price, currency, availability and product ID on each. That density only happens when structured data comes out of the product records. It is not something anyone adds by hand.

photo_library

Images built for the connection, not the studio

Photography is WebP, served from the group's own CDN at cdn.hvacwarehouse.com.au in per-width variants — 400, 800 and 1600 px — with a separate small-screen set for the home slider. Thirty-seven of the forty-eight images on the page are lazy-loaded.

hub

One group, three commercial models

The trade site, the WooCommerce store and the retail build each keep their own checkout, their own audience and their own pricing logic while selling out of the same range. No one of them has to compromise its buying process so the other two can share a platform.

Built with Laravel Vite nginx Own CDN

( Outcome )

Where it landed.

The group now covers all three ways its stock actually gets bought, without any one site giving something up for the others. Airvent takes the trade quote, Ductlab takes the WooCommerce order, HVAC Warehouse takes the card. Three properties, three commercial models, one group.

It is also our best measured build. Measured on Google PageSpeed Insights on 21 August 2026, the mobile home page records zero cumulative layout shift and zero total blocking time, and desktop returns a 0.88 s Largest Contentful Paint. To be straight about the rest of it: mobile Largest Contentful Paint is 3.2 s, above the 2.5 s Google treats as good, so this is not a Core Web Vitals pass. It is the best result across the sites we have measured, and there is still work left in it.

3.2 s
Mobile Largest Contentful Paint — above Google's 2.5 s "good" threshold
Source: Google PageSpeed Insights, measured 21 August 2026
0.88 s
Desktop Largest Contentful Paint
Source: Google PageSpeed Insights, measured 21 August 2026
0
Mobile Cumulative Layout Shift
Source: Google PageSpeed Insights, measured 21 August 2026
0 ms
Mobile Total Blocking Time
Source: Google PageSpeed Insights, measured 21 August 2026

( Next step )

Want a build like this one?

Tell us what you are trying to ship. We will come back with a scope, a timeline and a straight answer on fit.

Let's talk

We reply within 24 hours.

check_circle