The Store That Knows What’s in Your Cart Before You Do

Real-time recommendations, dynamic pricing, photo search and demand forecasting, built on one customer and inventory platform for an omnichannel home and apparel retailer by our AI software development team.

omnichannel retail AI platform

Overview

The client is a US home goods and apparel retailer: 140 stores across 22 states, an ecommerce site doing a little over a third of total revenue, and a catalogue of roughly 85,000 SKUs that turns over heavily every season. Mid-market, profitable, and squeezed from both sides. Amazon on price, specialist DTC brands on experience.

Their data was in decent shape, which is rarer than you’d think. The problem was what they did with it. Recommendations came from a plug-in that showed “customers also bought” lists built nightly. Prices were set by a merchandising team in spreadsheets. Forecasts were last year’s sales plus a growth assumption.

The ask was simple to say and hard to do: make every customer interaction and every stock decision a little smarter, using data they already had. We built four AI services on one shared platform, all feeding the same storefront, the same pricing system and the same supply chain. Standard practice for us now on retail software development with AI in scope.

The Challenge

1

Recommendations that ignored what the shopper was doing right now

The old engine used last night’s data. A shopper browsing outdoor furniture for twenty minutes got recommendations based on the throw pillows they bought in March. Recommendation-driven revenue sat around 4% of online sales, well under what retailers of their size usually see.

2

Pricing by spreadsheet, once a week

Four merchandisers repriced a few thousand SKUs each week. The other 80,000 barely moved. Competitors were repricing daily, sometimes hourly. The retailer was either leaving margin on the table or quietly losing sales, and nobody could say which, item by item.

3

Shoppers who couldn’t describe what they wanted

Search logs were full of queries like “blue pattern rug thing” and “lamp like the one in the photo.” Home decor is visual. Keyword search turned those shoppers away with zero results about one time in five.

4

Stockouts in one store, overstock 30 miles away

Inventory was allocated to stores using a rule of thumb based on store size. Popular items sold out in suburban locations while sitting untouched downtown. End-of-season markdowns ate a painful share of margin every year.

Our Approach

We began with one question for every proposed model: what decision does this change, and who makes it today? If we couldn’t name the person and the decision, the model didn’t make the roadmap.

That ruled out a few shiny ideas early. What survived was four services that each replaced a slow, manual or stale decision, all running off one event stream of customer behaviour and one inventory view. The two-week AI consulting discovery phase also surfaced the real blocker: product data. Half the catalogue had inconsistent attributes, which hurts recommendations and makes visual search almost impossible. So we fixed that first.

Delivery took six months. Recommendations and visual search shipped first because they touch revenue directly, then forecasting, then pricing, which we deliberately left until last. Pricing is the one where a mistake ends up on social media.

Everything customer-facing was A/B tested against the existing experience before full rollout. The squad: a delivery lead, three ML engineers, two data engineers, two ecommerce developers, a frontend developer and QA.

Solution Delivered

Hyper-personalised recommendations in real time

Hyper-personalised recommendations in real time

Every click, search, add-to-cart and purchase streams into the platform as it happens. A two-stage recommender does the work: a retrieval model pulls a few hundred candidate products using embeddings of the shopper and the catalogue, then a ranking model orders them for this person, this session, this page.

Session context weighs heavily. Browse outdoor furniture for five minutes and the homepage, product pages and cart all shift accordingly. Logged-out shoppers get session-based recommendations from the first click. Recommendations also go out in emails and the mobile app, and store associates see a customer’s suggested items in their clienteling tablet.

Dynamic pricing within guardrails

Dynamic pricing within guardrails

A pricing engine re-evaluates prices across the full catalogue every few hours. It looks at competitor prices (scraped and matched to the retailer’s SKUs), price elasticity learned per product and category, local demand, stock levels, and how far into the season an item is.

The merchandisers didn’t go away; their job changed. They now set the rules: floors and ceilings, minimum margins, price-ending conventions, products that must never be discounted, and how much a price can move in a day. The engine optimises inside those limits and explains every recommended change. Big moves still go to a human for approval.

Visual search and discovery

Visual search and discovery

Shoppers can snap or upload a photo, or tap any item in a lifestyle image on the site, and get visually similar products from the catalogue in under a second. A vision model turns every product image into an embedding; a vector index finds the nearest matches, then filters by stock, price range and the shopper’s location.

It also powers “shop the look” on editorial pages and a “more like this” button on every product image. It’s a feature that’s genuinely fun to use, which helps.

Automated demand forecasting and allocation

Automated demand forecasting and allocation

The forecasting service predicts demand per SKU, per store, per week, 16 weeks out. It combines sales history with promotions, pricing, local weather, regional events, search trends and macro signals like consumer confidence. Forecasts feed directly into the replenishment and allocation system, so stock lands where it’ll sell.

For new products with no history, the model borrows signal from similar items, matched on attributes and image embeddings. The same embeddings that power visual search, as it happens. Nice when the pieces reuse each other.

Guardrails and Customer Trust

Personalisation and dynamic pricing can go wrong in public, so we built the brakes before the engine.

No personalised pricing

Prices vary by product, time and region, never by individual shopper. That was a clear line the retailer drew on day one, and we agreed with it.

Hard pricing rules in code

Margin floors, MAP compliance, maximum daily change and a kill switch that reverts to the last approved price list.

Privacy and consent

Personalisation respects cookie consent and CCPA opt-outs; opted-out shoppers get non-personalised but still relevant results.

Diversity in recommendations

The ranker is penalised for showing ten near-identical items. Shoppers want options, not echoes.

Everything A/B tested

Each model change ran against a control group, measured on revenue per session and margin, not clicks.

Three Modules Nobody Screenshots

A merchandiser control panel

Merchandisers can pin products, bury out-of-stock or off-brand items, boost a campaign, or override a price, and see the expected effect before they hit save. The model does the heavy lifting; humans keep the steering wheel.

A competitor price matching service

Matching “our SKU” to “their SKU” sounds trivial and is honestly half the battle in dynamic pricing. We combined text and image similarity to match products across competitor sites, with a review queue for uncertain pairs.

A forecast accuracy report

Weekly, by category and region, built on the retailer’s data analytics stack in Power BI. Planners see where the model was wrong and why. That’s how planners come to trust it.

Key Features

Real-time recommendations icon

Real-time recommendations

Ranks products per shopper and session in under 50 ms.

Session-aware personalisation icon

Session-aware personalisation

Adapts to what a shopper is doing right now, logged in or not.

Omnichannel profiles icon

Omnichannel profiles

Store, web, app and email behaviour in one view.

Dynamic pricing engine icon

Dynamic pricing engine

Re-evaluates prices every few hours within merchandiser rules.

Competitor price matching icon

Competitor price matching

Text and image matching of SKUs across competitor sites.

Pricing guardrails icon

Pricing guardrails

Margin floors, MAP rules, daily limits and a kill switch.

Visual search icon

Visual search

Photo upload finds similar products in under a second.

Shop the look icon

Shop the look

Tap any item in a lifestyle image to find it or similar.

SKU-store demand forecasts icon

SKU-store demand forecasts

16-week forecasts with ranges per store and product.

Cold-start forecasting icon

Cold-start forecasting

Predicts demand for new products from similar items.

Automated attribute tagging icon

Automated attribute tagging

Fills product attributes from images and descriptions.

Merchandiser controls icon

Merchandiser controls

Pin, bury, boost and override with previewed impact.

Results & Outcomes

Measured over two full seasons after rollout, against A/B controls where possible.

Recommendation-driven online revenue

From 4% to 17% of online sales

Average order value

Up 11%

Gross margin on repriced SKUs

Up 2.8 percentage points

Zero-result searches

Down 70% after visual search launch

Conversion for visual search users

2.4x site average

Forecast accuracy (SKU-store-week)

Error down 31%

Store stockouts on top 2,000 SKUs

42% fewer

End-of-season markdown spend

Down 19%

Delivery

6 months, discovery to full rollout

Technology Stack

Adobe Commerce headless-storefront Commerce magento Commerce

Commerce platform

Adobe Commerce (Magento), headless storefront, POS integration

Segment Kafka Google BigQuery

Event streaming

Segment, Kafka, Google BigQuery

TensorFlow icon Forecasting icon redis-icon

Recommendations

Two-tower retrieval (TensorFlow), LightGBM ranker, Redis feature cache

Milvus CLIP-style embeddings

Visual search

CLIP-style vision-language embeddings, Milvus vector database

Python Python

Pricing

Bayesian elasticity models, constrained optimisation, Python

Forecasting icon

Forecasting

Temporal fusion transformer, LightGBM, Prophet baselines

Attribute extraction

Attribute extraction

Vision-language model with human review queue

Vertex AI Vertex AI Vertex AI

MLOps

Vertex AI, MLflow, Airflow

Power BI BigQuery

Analytics

Power BI, BigQuery

Google Cloud Terraform Docker

Infrastructure

Google Cloud (GKE), Terraform, Docker

The Part People Underestimate: Your Catalogue Is the Model

Every retailer wants personalisation. Few want to hear that it starts with fixing product data.

Inconsistent attributes, missing colours, “misc” categories, five spellings of “charcoal.” That mess quietly caps how good any recommendation, search or forecast can be. We spent five weeks on catalogue cleanup before training a single customer-facing model, and it was the highest-return five weeks of the project.

The other thing people underestimate is plumbing. A recommender is only real-time if the events reach it in real time, and that’s an integration job across the commerce platform, POS, app and email. It’s why we’d push retailers toward AI integration into the existing stack, whether that’s Adobe Commerce, Shopify or custom, rather than another bolt-on widget.

What’s Queued Next

Shopping assistant

A shopping assistant

that answers product questions and builds room sets in conversation, built on our chatbot development and generative AI work.

AI-written product descriptions

AI-written product descriptions

and SEO copy for new arrivals, edited by the content team.

Markdown optimisation

Markdown optimisation

deciding when and how deep to discount end-of-season stock.

Store labour forecasting

Store labour forecasting

from the same demand signals.

App-first features

App-first features

like visual search from the camera in the retailer’s mobile app.

Conclusion

The retailer didn’t need a moonshot. It needed a hundred small decisions a day made a bit better, automatically.

Six months, one squad, four AI services, one customer and inventory platform. The decisions that made it work: cleaning the catalogue first, giving merchandisers control instead of replacing them, and A/B testing everything a shopper could see.

If your store is running on nightly recommendations and spreadsheet pricing, our AI and ML solutions team can help you find the quickest wins. Or hire dedicated developers as a full squad from discovery to rollout.

Ready to make every product page a little smarter?

Let’s look at where AI would pay back fastest in your store.

Schedule a Free Consultation

Frequently Asked Questions

It tracks what shoppers browse, search and buy, learns which products tend to go together and which shoppers resemble each other, then ranks products for each person in real time. Ours uses a retrieval model to find candidates and a ranking model to order them.
Not here. Prices change by product, time and region based on demand, stock and competition, but every shopper sees the same price at the same moment. Personalised pricing was ruled out from the start.
Two years of sales history per SKU is ideal, but not essential. For new products, the model borrows patterns from similar items based on attributes and images.
About eight to ten weeks for a catalogue this size, most of it indexing, tuning and frontend work. The model itself is the quicker part.
They shouldn’t. Recommendations here are served from a cache in under 50 ms and load asynchronously, so core page speed was unaffected.
Yes. This client runs Adobe Commerce, and the same architecture works with Shopify, BigCommerce or a custom stack through APIs. Our AI integration services cover the main ecommerce platforms.
Three months of hypercare, then an ongoing retainer for retraining before each season, A/B test analysis and new features.