TRACK 2: MACHINE LEARNING / AI

Project Description

Looma is an AI-powered personal styling platform that transforms natural language descriptions into curated, shop-ready outfits. Many people struggle with fashion decision fatigue, lack of confidence, or the time-consuming process of browsing through countless clothing options. Looma addresses this by acting as a 24/7 intelligent stylist that understands aesthetics, context, and personal taste. Instead of forcing users to search by rigid filters, Looma allows them to describe how they want to feel or present themselves. Prompts such as “late night in Tokyo” or “executive minimalist” are interpreted by AI to generate cohesive outfits that align with the user’s intent. Each generated outfit includes structured clothing categories, brand information, and pricing, making the experience both inspirational and actionable.

The project is built using React and TypeScript for a scalable and maintainable frontend, Tailwind CSS for a clean and responsive interface, and vector embeddings using OpenAI's CLIP (ViT-L/14) alongside cosine similiarity to analyze prompts and generate outfit combinations. Looma also includes a digital wardrobe system that allows users to save, review, refine, and share curated looks, turning one-time inspiration into a persistent personal style archive.

Purpose

I chose this problem because personal style is deeply expressive, yet overwhelming for many people. Fashion discovery today is fragmented and time-intensive. Looma lowers that barrier by allowing users to express how they want to feel rather than manually searching for items.

If developed further, Looma could:

  • Increase confidence and self-expression
  • Help users shop more intentionally and efficiently
  • Serve as an accessibility tool for people unfamiliar with fashion norms or those with mobility issues making them unable to shop in person -Become a viral sensation

How It Works

Product Data Collection

Clothing data is collected programmatically using Playwright to scrape live product listings from fashion retailers. For each item, Looma extracts structured metadata including:

  • Product name
  • Category (e.g., shirt, pants, shoes, jacket)
  • Brand/store
  • Price
  • Image URL
  • Product URL

This data is cleaned, normalized, and stored in a dataset that serves as the foundation for outfit generation.

Embedding & Vector Indexing

Each clothing item is embedded using OpenAI’s CLIP (ViT-L/14) model, which maps both text and images into a shared semantic vector space. These embeddings capture visual and stylistic attributes such as color, texture, silhouette, and overall aesthetic. The shared embedding space allows them to be meaningfully compared using cosine similarity.

All embeddings are stored in an Upstash Vector database, enabling fast semantic search over hundreds of clothing items.

Prompt Understanding

When a user enters a natural language prompt (e.g., “late night in Tokyo, minimalist, black tones”), the backend:

  • Encodes the text prompt using the same CLIP model
  • Normalizes the embedding to ensure consistent similarity scoring
  • Enhances the prompt with category-specific context (e.g., “shirt”, “pants”, “shoes”) and optional user preferences such as fit, season, patterns, gender, or price range

This allows Looma to interpret abstract aesthetic intent rather than relying on rigid filters.

Semantic Search & Filtering

For each required outfit category, Looma performs a similarity search using cosine similarity against the products in the database. Results are filtered using structured metadata constraints such as:

  • Category
  • Gender
  • Price range
  • User-selected preferences

This hybrid approach combines semantic similarity with rule-based filtering, ensuring results are both stylistically relevant and practical.

Probabilistic Selection

Instead of always choosing the top-ranked item, Looma applies a softmax sampling strategy to candidate results. This introduces controlled randomness, allowing:

  • More variety across generations
  • Natural-feeling recommendations
  • Multiple valid interpretations of the same prompt
  • Prevention of repetitive or overly deterministic outputs

Outfit Locking & Iteration

Users can lock individual items within an outfit. During regeneration:

  • Locked items are preserved
  • Only unlocked categories are re-generated
  • New items are selected in a way that remains stylistically consistent with the original prompt

This enables iterative refinement rather than forcing users to start from scratch.

API & Frontend Integration

The backend is implemented using FastAPI, exposing a /generate-outfit endpoint that returns structured clothing items.
The React + TypeScript frontend consumes this API to:

  • Display generated outfits
  • Render product images and metadata
  • Allow saving to a digital wardrobe
  • Enable sharing and further exploration

Supabase Storage for Wardrobes and Auth

We implemented a fully functional account system allowing authentication using both email or Google OAuth. Users can save outfits on their account to come back to later. Both Auth and storage of account data was done using Supabase's relational database.

Ultimately, Looma demonstrates how AI can be used not just to automate tasks, but to enhance creativity, self-confidence, and personal expression.

Built With

Share this project:

Updates