← Projects

Virtual Closet

Digitizing a customer's real wardrobe from their purchase history, so recommendations could be built from what they already own — the research and prototype work behind Amazon Closet.

amazonreactredux-sagaprototypinguser researchfashionrecommendations

Every apparel recommendation engine has the same blind spot: it knows what you bought, but not what you have. Virtual Closet was the attempt to close that gap — a digital version of a customer's actual wardrobe, auto-created from their purchase history, that they could then add to by searching Amazon's catalog or uploading photos.

The premise was that owning that data unlocks a different class of personalization. Not "customers who bought this also bought" but outfit ideas made of things already hanging in your closet, search results that complement what you own, and the ability to hide items too similar to something you already have.

The prototype

Rather than argue about it, we built it. I built a React prototype — Redux with sagas for the data flow — that stood up the full loop against real customer data:

  • Ingest order history and filter it down to the softlines items that plausibly belong in a wardrobe
  • Generate outfits from the resulting closet using the outfit builder service
  • Collect structured feedback on both the generated outfits and the curated recommendations, item by item, from real reviewers
Order historynoisy proxyImport filterthe hard partClosetplus manual addsOutfit buildergenerated outfitsstructured feedback from real reviewers
The loop was the point: the prototype existed to produce judgments that could change the filter.

The prototype ran over cohorts of real customers with anonymized identifiers, and its whole purpose was to produce judgments we could actually learn from — a closet view with the items, a sidebar for building and rating outfits, and dedicated feedback surfaces for recommendation quality.

There was also an anonymous mode: the same closet and recommendation-building interface, decoupled from a signed-in identity, so people could be shown a closet and asked to reason about it without the machinery of accounts in the way.

What the research found

The interesting findings were nearly all about import logic — the unglamorous problem of deciding which purchases are actually yours and actually still in your closet.

Purchase history is a noisy proxy for a wardrobe. It contains items bought for children and other family members, items that were returned, items that were never kept. It also misses things: a meaningful minority of participants reported items they'd genuinely bought on Amazon that never showed up in their closet, most of them just a handful of items, a few of them ten or more.

The clear conclusion was that automatic import should be conservative — exclude what obviously belongs to someone else, and let people pull those items in manually from purchase history if they want them. Which in turn implies a design consequence: you need a separate store for softlines purchases that are deliberately not in the closet, so the system remembers what it chose to leave out and doesn't keep re-offering it.

We also learned how wide the range of closet sizes is. A meaningful share of participants estimated 500 or more items in their physical closet — essentially all of them scoring high on fashion engagement, and nearly all of them women. Whatever got built had to hold up at that scale, not just at the median.

Getting it ready to ship

The path from prototype to a feature inside the Amazon Shopping app ran through the parts of the work nobody writes about: a full architecture review documenting the upstream and downstream services, the classes of data moving between them, authentication and access control, credentials management, database security, input validation, and log management — plus a security review and a manual code review of the client.

Virtual Closet shipped into the Amazon Shopping app as Amazon Closet.