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.
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
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.
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.
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.
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
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
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
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
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.
Inside the Model Layer
One event stream, everywhere
Web, app, email and point-of-sale events flow through a single pipeline into a customer profile updated in seconds. The recommender, the pricing engine and the forecaster all read from it. A purchase in store changes what that customer sees online that evening.
Cleaned-up product data first
We used a vision-language model to extract attributes (colour, material, pattern, style, room) from product images and descriptions, then had merchandisers review the low-confidence ones. Around 85,000 SKUs went from patchy to consistent in about five weeks. Every model downstream got better because of it.
Embeddings as shared infrastructure
Product embeddings from images and text serve visual search, “more like this,” cold-start recommendations and new-product forecasting. Built once, used four ways.
Forecasting that admits uncertainty
The demand model outputs a range, not a single number. Allocation uses the range: high-margin items with uncertain demand get positioned conservatively, steady sellers get stocked deep.
Fast where it counts
Recommendations are served in under 50 ms from a feature cache, so the storefront’s page speed didn’t suffer. That mattered to the SEO team as much as the merchandising team.
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
Ranks products per shopper and session in under 50 ms.
Session-aware personalisation
Adapts to what a shopper is doing right now, logged in or not.
Omnichannel profiles
Store, web, app and email behaviour in one view.
Dynamic pricing engine
Re-evaluates prices every few hours within merchandiser rules.
Competitor price matching
Text and image matching of SKUs across competitor sites.
Pricing guardrails
Margin floors, MAP rules, daily limits and a kill switch.
Visual search
Photo upload finds similar products in under a second.
Shop the look
Tap any item in a lifestyle image to find it or similar.
SKU-store demand forecasts
16-week forecasts with ranges per store and product.
Cold-start forecasting
Predicts demand for new products from similar items.
Automated attribute tagging
Fills product attributes from images and descriptions.
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
Commerce platform
Adobe Commerce (Magento), headless storefront, POS integration
Event streaming
Segment, Kafka, Google BigQuery
Recommendations
Two-tower retrieval (TensorFlow), LightGBM ranker, Redis feature cache
Visual search
CLIP-style vision-language embeddings, Milvus vector database
Pricing
Bayesian elasticity models, constrained optimisation, Python
Forecasting
Temporal fusion transformer, LightGBM, Prophet baselines
Attribute extraction
Vision-language model with human review queue
MLOps
Vertex AI, MLflow, Airflow
Analytics
Power BI, BigQuery
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
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
and SEO copy for new arrivals, edited by the content team.
Markdown optimisation
deciding when and how deep to discount end-of-season stock.
Store labour forecasting
from the same demand signals.
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




