Inspiration

Most mornings I would stand in front of a full wardrobe and still feel like I had nothing to wear. I kept reaching for the same few pieces while half my clothes sat untouched. I’d try on one thing, then another, waste time changing, and still end up in the outfit I wore a few days ago. I wanted to see if AI could take that decision off my plate, using only the clothes already in my wardrobe.

What it does

Shuffle is an AI outfit picker for your own wardrobe.

  • Add clothes from a photo: take a picture (even on your phone) and Shuffle removes the background, tags the piece (category, colour, pattern, formality, sleeve, shade) and adds it once you confirm.
  • Ask in plain words: type "dinner date tonight, walking around outside" or tap School / Gym. The wardrobe doors open, the pieces shuffle like a slot machine, and 3 outfits land on the board.
  • Swap one piece: don't like the shoes? Get 3 alternatives that keep the rest of the outfit.
  • It learns from you: 👍 / 👎 with a reason, plus "I wore this". A 👎 for "too formal" only blocks that outfit for similar occasions; "colours clash" blocks it everywhere. Liked outfits can come back, but not within a week, and pieces worn in the last 3 days are rested.
  • Wardrobe & History: filter your clothes, spot items not worn in 30+ days, mark items as in the laundry, and fix past feedback.

How we built it

  • Backend: Python + FastAPI, PostgreSQL with pgvector.
  • Background removal: macOS Vision for the cut-out, plus Real-ESRGAN to upscale small photos, onto a clean transparent canvas. Phone photos are auto-rotated from their EXIF data.
  • Tagging: GPT-4.1 mini with a strict JSON schema, so it can only answer with allowed values. Then my own validate() rules fix anything that breaks the rules (e.g. footwear never has a sleeve length).
  • Visual search: every item gets a 512-number FashionCLIP embedding, a description of how it looks. Items are ranked by cosine similarity to the request
  • Outfit engine, 4 steps:
    1. Parse: GPT turns the request into filters (formality, etc.).
    2. Retrieve: SQL filters plus CLIP ranking build a shortlist per slot.
    3. Generate: GPT builds outfits from that shortlist only, told about my likes, dislikes and recent wears.
    4. Validate: code rejects invented items, rule breaks and blocked outfits, and tops up to always give 3.
  • Frontend: plain HTML, CSS and JavaScript with GSAP animations (opening wardrobe doors, slot-machine shuffle, pieces flying onto the board), and it works on phones.

Challenges we ran into

  • Consistent tags: the same photo got different colours on different runs. I compared models over 5 runs each: GPT-4.1 mini gave identical tags for 59/60 items (vs 53/60 for GPT-5 mini) and was more than twice as fast, so I switched and set temperature to 0.
  • Things that didn't work: measuring colour from pixels, majority-voting several AI answers, and a Hugging Face colour classifier (only 40/60 correct). I reverted all of them and let the model describe while my code applies the rules.
  • AI making things up: GPT sometimes returned items that didn't exist or broke the rules, so every outfit now goes through a validation step before you see it.
  • Phone photos came in sideways, and processing photos one at a time was slow. Fixed with EXIF rotation and processing 4 at once.
  • Feedback design: a 👎 shouldn't ban a good outfit forever just because it was wrong for the gym. Tying dislikes to the occasion and the reason solved that.

Accomplishments that we're proud of

  • A full pipeline from photo → cut-out → tags → outfit → feedback that runs end to end, checked by an automated smoke test (9/9 passing).
  • A feedback loop that actually changes the next suggestions.
  • An interface that feels like a real app, from the wardrobe doors to the shuffle animation, and that works on my phone.

What we learned

  • How embeddings and vector search work, and why combining them with SQL filters beats either one alone.
  • Never trust model output blindly: strict schemas plus code validation made the AI far more reliable.
  • Measuring before choosing (consistency tests, accuracy counts) instead of guessing.
  • How to build and connect a full stack: database, API, AI models and frontend.

What's next for Shuffle

  • Accounts, so everyone gets their own wardrobe.
  • Cloud hosting, with a Linux background-removal model, so it runs without my laptop.
  • Weather awareness for Singapore's rain and heat.
  • More categories: dresses, skirts and accessories.

Built With

Share this project:

Updates

Submission history