Inspiration

You've probably been here, or know someone who has: you order a piece of clothing online in the size you're sure is yours, and when it arrives, it just doesn't fit. Now you're printing a return label, waiting on a refund, and guessing all over again.

It isn't bad luck: every brand sizes differently, and nothing you learn at one store carries over to the next. Pieces of the answer already exist, but nobody puts them together. Some stores show a fit rating, and solutions like True Fit offer size advice only on retailers that pay for it. Nobody makes fit comparable across every store, adjusts it to you, and lets you keep it.

With this in mind, we gave ourselves one job: answer "what size do I buy here?" on any store, and get better at it every time you shop.

What it does

FittingRoom is a Chrome extension that tells you what size to buy. Pick a size on any product page, and your answer pops up from the toolbar, without ever covering the store's page.

It starts with a quick, 30-second onboarding where every step can be skipped:

  • Which section do you shop? Men's, women's, or both. We ask this instead of gender.
  • How tall are you? Saved to your profile so we can compare you with reviewers near your height.
  • How do you like things to fit? Slim, regular, relaxed, or oversized.
  • What fits you best right now? Tops and bottoms you own and love, from as many brands as you like. We compare every other brand against them.

Skip it all, and it still works. On any product page, it tells you how the item runs (Runs small · most buyers sized up) from reviews, size charts, and the product description. Answer the questions and the advice becomes yours: Size up · L.

From there, it keeps learning on its own. Order confirmations add to your closet, and it counts down each order's return window, read straight from the store's own return policy. One tap on "did it fit?" before that window closes sharpens its advice for that brand. It checks again every time you click a different size, warns you when you already own something similar, and offers the next best size when yours is sold out.

Fewer wrong sizes means fewer returns: shoppers keep what they buy, and merchants stop paying for shipping both ways.

How we built it

FittingRoom is a Manifest V3 Chrome extension with a small Node backend. We built the data contract first: one standard product record that every store fills, so nothing after extraction knows or cares which store it's on.

Onboarding feeds your profile. Your fit preference shifts the recommendation slimmer or roomier, and your best-fitting pieces become the baseline that every other brand is compared against. Your section and height are saved too, for matching you with similar reviewers. Everything stays in your browser's local storage, with no account and no server-side profile.

Reading the page goes from cheapest to most expensive: Shopify product data, JSON-LD, embedded page data, fit stats from review platforms like Yotpo, then the page's HTML. Only when all of those come up empty do we call a free generative AI model (OpenRouter, or a local Ollama model). It returns structured JSON, and a hallucination guard drops any value that isn't actually on the page.

Scoring is transparent math measured in size steps:

$$\text{recommended size} = \text{your baseline} - \text{item offset} + \text{fit preference}$$

The baseline is your size, from onboarding, your closet and your fit feedback. The offset is how this item runs, combined from review signals \(o\) with weights \(w\). When evidence is thin, it shrinks toward zero:

$$\text{offset} = \frac{\sum w \cdot o}{\max(\sum w, 0.6)}$$

The adjustment comes from your fit preference. Fit and confidence are separate numbers, so missing data lowers confidence, never the fit score. Results live in the toolbar popup, so FittingRoom never covers or breaks the store's page.

Challenges we ran into

  • Every store is different. No two sites mark up sizes, charts or reviews the same way. Instead of guessing, we built a DevTools probe from our real extraction code to measure what each store actually exposes.
  • A claim that didn't hold up. Early research said most stores publish a "runs small" score we could scrape cheaply. When we checked ourselves, several stores blocked us or had no fit data at all, so we stopped relying on it.
  • AI that makes things up. Small free models sometimes invented sizes or chart values. Requiring structured output and checking every value against the page fixed it. We'd rather say Can't read this page than give a confident wrong answer.
  • Onboarding without friction. We wanted rich inputs like height and fit preference without a form standing between shoppers and an answer. So every question is optional and takes seconds, and the extension still gives a useful verdict if you skip all of them.
  • Never flip a verdict. The AI confidence check can be slow, so we wait at most 3 seconds and then use our rule-based number. A shopper never sees an answer change under them.
  • Sizes don't line up. Women's sizes go up in twos (0, 2, 4), and EU and UK sizes have their own steps, so "one size up" had to mean something different in each system.

Accomplishments that we're proud of

  • Our extension is useful from the first page, with a 30-second onboarding that makes it personal, and every step is optional.
  • Honest by design: when we're unsure, it says Best guess instead of making up a score, and every verdict shows how we got it.
  • Privacy first: it only runs on stores you enable, your data stays on your device, order pages are stripped of addresses and payment info before anything leaves the page, and one button deletes everything.
  • Fair: reviews skew toward common sizes, so plus-size and petite shoppers get thinner data. We lower our confidence instead of giving a confident wrong answer, and we never ask for weight or gender.
  • Tested for real: run live on Uniqlo with real AI models, and backed by an automated test suite.
  • Costs nothing to run: free AI models only, enforced in code.

What we learned

  • Ask for the right things. Asking about section instead of gender, keeping weight out entirely, and making every question skippable earned more trust than asking for everything.
  • Measure before you design. Checking real stores ourselves saved us from building on a wrong assumption.
  • Separate what you know from what you're guessing. Keeping fit and confidence as two numbers is what lets us be honest when data is thin.
  • AI works best as a fallback with guardrails, not the first step. Cheap structured data covers most pages, and the model fills the gaps.

What's next for FittingRoom

  • Footwear: add shoes to onboarding and size them properly, with half sizes, widths, and US/EU/UK shoe sizing, calibrated from shoes you already own.
  • Test on more live stores and verify return windows on real policy pages.
  • Read size charts that are only images, using a vision model.
  • Import past orders so your closet builds itself.
  • A portable "fit passport" you own and can take to any store.

Built With

Share this project:

Updates

Submission history