Inspiration

Online shopping still runs on a guess. Will this fit, will this actually look right on me, is it worth the risk of a return. Most virtual try on tools stop at showing you a picture. They don't tell you why something works, so the guessing continues even after you've seen the render.

This was also my first mobile app project. My hackathon background was in web based tools using Gemini APIs and Elasticsearch, so building a full React Native and Expo app end to end, integrated with a third party YouCam API, was new ground for me going in.

What it does

A shopper self reports their

  • body shape through a short quiz using proportion based categories, never inferred from a photo and never framed around size or weight.

They

  • pick an occasion,
  • upload their own full body image, and
  • browse a garment catalogue.

Selecting a garment triggers

  • YouCam's Apparel Virtual Try On (cloth v3), rendering that outfit on their own photo.
  • Gemini then analyzes the result for concrete fit details, neckline, waist, sleeve, length, cut, and an AI styling model turns those details into specific, positively framed advice for that person's shape, not generic praise.

Every look is saved with its image and its reasoning.

How we built it

  • Frontend: React Native with Expo (SDK 54), Expo Router, TypeScript in strict mode
  • Try on: YouCam Apparel VTO, the cloth v3 endpoint, called after a garment is selected
  • AI pipeline: Gemini extracts fit and silhouette details from the try on result, which feed into a styling model (Groq, with a Gemini fallback) that generates the actual advice
  • Persistence: Supabase, Postgres with pgvector, storing saved looks and their embeddings
  • No auth: local state and AsyncStorage, kept deliberately simple for the hackathon scope

Challenges we ran into

Silent hangs on real devices. Early on, image analysis would intermittently hang with no clear error. It traced back to React Native's fetch().blob() bridge being unreliable for local file:// URIs on device, even though it worked fine in quick tests. The fix was reading local files directly through expo-file-system instead of routing them through fetch.

Generic AI output- The styling advice technically worked, but it read like a template, this flatters your figure, regardless of the actual outfit. The real fix was not a better instruction to the styling model, it was upstream: the vision step was not extracting fit specific detail, neckline, waist, sleeve, cut, in the first place, so the styling model had nothing concrete to reason from. Fixing the vision prompt fixed the advice.

A model got decommissioned mid build. With days left before submission, Groq announced our primary styling model would be decommissioned, with the cutoff landing before our own deadline. I migrated to their recommended replacement model, added retry with backoff for rate limiting while we were in there, and retested before recording the demo.

A security gap before going public. Supabase flagged a table with row level security disabled right as I was preparing to make the repository public. Since the app only ever reads and inserts, I was able to lock it down to anon select and insert only with a migration, closing the gap without changing any app behavior.

Accomplishments that we're proud of

A working end to end pipeline, not a mockup: real photo in, real YouCam try on, real AI reasoning grounded in the actual garment, real persistence. And a product principle we held onto under deadline pressure rather than cutting for time, styling advice that is specific and honest without ever framing a body as something to be judged.

What we learned

How much of the AI gives generic answers is actually an upstream data problem rather than a prompt problem, how unreliable some React Native bridges can be for local files on real devices versus a simulator, and more broadly, how to take a hackathon idea through a full mobile app build for the first time, from onboarding flow to a live third party API integration to a public facing repository.

What's next

A match_saved_looks similarity search using the pgvector embeddings we're already generating, replacing the placeholder garment catalogue with a larger real one, and exploring how this same pipeline could plug into an actual retail catalogue rather than a hardcoded set of outfits.

Built With

Share this project:

Updates