All work
Consumer AI

Nouva

An AI stylist that builds complete outfits from the clothes a person already owns, scores each one for colour harmony, and answers the morning question in seconds instead of minutes.

Role
Full-stack development, wardrobe vision pipeline, styling engine design, mobile app
Timeline
Selected work
Stack
AI/LLM Development · Computer Vision · Image Processing · Mobile App Development · iOS & Android · Python · PyTorch · Recommendation & Personalization Systems · Vector Databases & Embeddings — Pinecone · Generative Image AI · Cloud Backend Engineering · Database Engineering
Nouva AI wardrobe stylist

The problem

A full wardrobe and nothing to wear is a decision problem, not a shortage problem.

Most closet apps are catalogues. They ask the user to photograph every item, tag it by hand, then drag pieces around a canvas until something looks right. That is the same work the person was already avoiding, moved onto a phone. The apps that do offer styling advice mostly fund themselves through shopping links, so the answer trends toward something new rather than something owned.

The people this app was built for are not short of clothes. They are short of a decision at 7:40am, and they want it made out of what is hanging in the closet. Anything that required twenty minutes of setup, or that answered with a product listing, was going to be deleted in a week.

What I built

A styling engine that can only recommend what you actually own.

Nouva turns a stack of wardrobe photos into structured garment data, then generates complete looks from that data, scored and filtered for the occasion and the weather. I built it end to end: the ingestion and attribute-extraction pipeline, the outfit scoring engine, the four user-facing styling features, the subscription and quota layer, and the iOS and Android apps themselves.

A user photographs their clothes and the system reads category, colour, material and style without any manual tagging. From there the engine assembles full looks, top to shoes, and puts a harmony score on each one so the user sees combinations that hold together rather than a grid of possibilities to sort through.

  • Wardrobe ingestion with automatic attribute extraction (category, colour, material, style)
  • Outfit generation constrained to owned items, with colour harmony scoring
  • Style Check: a mirror selfie scored out of 100, with the single change that lifts the look most
  • Shop Scan: a GET IT / SKIP IT verdict on an item in a store, weighed against the existing wardrobe
  • Complete the Look: anchor one piece, fill the rest from the closet, shop only for real gaps
  • Occasion, weather, mood and colour filters; free and Plus tiers with usage quotas

By the numbers

Zero
Manual input required to tag wardrobe items
Seconds
To return outfits
15–20 items
For usable results
Before checkout
Duplicate purchases caught

Illustrative figures.

System design

The model perceives. The wardrobe decides.

The core design decision was to split perception from selection. A vision model reads each garment once, at upload, and writes structured attributes and an embedding to the database. Everything after that runs against the user's own items: candidate pieces are retrieved from their closet by attribute filter and vector similarity, and the final ranking is deterministic, scoring colour relationships, formality match and weather fit against explicit rules.

That split matters because a generative model asked to style someone freely will invent a camel overcoat the user does not own. Constraining the model to a retrieved candidate set makes that impossible by construction. It also makes the harmony score reproducible: the same wardrobe and the same occasion produce the same ranking, so a user who disagrees with a look is disagreeing with a rule I can point to and tune, not with a black box that answered differently yesterday.

Shop Scan runs the same machinery in reverse. The scanned item is embedded and compared against the wardrobe vectors, so "you already own something a lot like this" is a similarity result rather than a guess, and the verdict comes with the reason attached.

It can only suggest what's already hanging in your closet.

Reliability and rollout

Built for the first five minutes, because that is where the app is won or lost.

The hardest constraint was the cold start. Someone who has uploaded four shirts cannot be given a bad outfit and told to try again, so the engine degrades honestly: it holds back full-look generation until the closet can support it and steers the user toward the gaps worth filling first. Uploads are compressed on device before they leave the phone, attribute extraction runs asynchronously so the user keeps adding items while earlier ones are still processing, and embeddings are cached so styling requests never re-run perception.

Inference cost per user is real and recurring, which is why the tiers are quota-shaped rather than feature-shaped, and why the deterministic scorer does the heavy lifting while the model is called only where it adds something. Wardrobe photos are taken inside people's homes and Style Check images include their faces and bodies, so storage is private by default, image URLs are signed and expiring, and deleting an item deletes the asset rather than orphaning it in a bucket.

Shipping on both stores from one codebase kept feature parity automatic, which mattered more than it sounds: the styling logic lives server side, so a scoring change goes out to every user at once without waiting on an app review cycle.

Built with

  • AI/LLM Development
  • Computer Vision
  • Image Processing
  • Mobile App Development
  • iOS & Android
  • Python
  • PyTorch
  • Recommendation & Personalization Systems
  • Vector Databases & Embeddings — Pinecone
  • Generative Image AI
  • Cloud Backend Engineering
  • Database Engineering