Full-Stack AI System

Full-Stack AI System

WeatherFit

WeatherFit

An outfit recommendation system that actually looks at your wardrobe, not just the forecast

An outfit recommendation system that actually looks at your wardrobe, not just the forecast

React, FastAPI, PostgreSQL, PyTorch, ResNet-50

React, FastAPI, PostgreSQL, PyTorch, ResNet-50

WeatherFit recommends outfits from your actual wardrobe based on the weather and what you're doing that day — not just temperature, but rain, wind, and activity context too. It started as a simple frontend rule engine and grew into a full-stack app with its own ML model doing the wardrobe classification.

WeatherFit recommends outfits from your actual wardrobe based on the weather and what you're doing that day — not just temperature, but rain, wind, and activity context too. It started as a simple frontend rule engine and grew into a full-stack app with its own ML model doing the wardrobe classification.

Runs in your browser | no sign-up

The 30-second version
Full-stackMLReact | FastAPI | PyTorch
ProblemA forecast tells you it’s 14° and windy. It doesn’t tell you which of your own clothes to wear.
What I didGrew a frontend rule engine into a full-stack system: FastAPI and PostgreSQL with auth, plus a PyTorch classifier that fills in wardrobe metadata from a photo.
Result98.77% category accuracy. Warmth sits at 73.69% and is the open problem. The rule engine is live to try in your browser.
01 / The insight

The forecast was never the hard part. The wardrobe data was.

Recommendations score live weather (temperature, rain, wind, conditions) against what you’re doing that day. But the scoring is only as good as what it knows about each item, and whether your wardrobe is still there when you come back. Fixing that is what turned a rules demo into a system.

02 / Evolution

Three versions, each fixing what the last one couldn’t.

What it did
  • ✓Rule scoring in expertSystem.js
  • ✓Weather and activity context, not just temperature
  • ✓Local, browser-side storage
Why it wasn’t enough

The wardrobe lived in the browser. It wasn’t tied to a user, so state was fragile and couldn’t be trusted across sessions.

03 / The model

Where the model is strong, and where it isn’t.

Classifier accuracy
Category | after 27 → 5 label groups98.77%
Formality89.83%
Warmth73.69%

Collapsing 27 category labels into 5 groups added +2.92% to category accuracy. Toggle to compare.

I lead with the weak number on purpose. Category is close to solved; warmth at 73.69% is where recommendations can still go wrong, which is exactly why manual editing stays in the product.

04 / Reliability

Treating user state like it matters.

Duplicate protectionBackend deduplication plus frontend grouping guards to stop the same item appearing twice.
No stale UIAuth and delete flows reworked so the interface doesn’t show old state after account or session changes.
Written test planA manual reliability test plan and a dated reliability run report, with screenshot evidence, live in the repo.
Known issues, trackedRepeated preload can still create duplicates. It’s logged in the latest report, not hidden.
05 / In use

The product.

Recommendations ranked against today’s weather
Adding an item: the model auto-fills attributes, all still editable
1 / 2 | Recommendations ranked against today’s weather
06 / Next

What I’d still change.

WarmthWeakest prediction target; real-world photos remain harder than curated images.
Personal styleRule-based decisions can miss nuanced preferences a person would never break.
DeploymentThe rule engine is live as a browser demo at gio.engineer/weatherfit. Hosting the FastAPI backend and ML service is the next step.

Trained weights aren’t in the repo, to keep academic integrity on the coursework model. The full ML service and integration are, so you can run it with your own checkpoint.

Open to new opportunities.

View CV