All work

Cara

Resale recommendations based on the clothes you already own.

Role
Co-founder
Status
in development
Platforms
iOS
Stack
  • React Native
  • Expo SDK 57
  • TypeScript
  • Python
  • AWS Lambda
  • AWS SAM
  • DynamoDB
  • S3
  • Cognito
  • OpenSearch
  • ONNX Runtime
  • CLIP
  • Gemini

Problem

Shopping recommendations are more useful when they take the clothes you already own into account. Cara starts with that wardrobe and ranks resale listings against it.

Building a digital closet also needs to be manageable. Cara accepts camera photos, outfit photos, screenshots, and forwarded order emails, so adding a piece doesn’t always mean entering its details by hand.

What I built

I’m a co-founder of Cara, an iOS wardrobe app with a personalized shopping feed, a digital closet, and saved listings. The closet includes views for individual pieces, outfits, and the connections between them.

The product connects three parts: an Expo mobile app, an AWS closet service, and a retail catalog ingestion pipeline. The closet service turns different kinds of imports into the same item format, while the catalog pipeline collects product data and images for recommendations.

The app can use the backend or run entirely on sample fixtures. That makes it possible to work on the interface and ranking logic without a live service connection.

Notable engineering

  • Keeping two ranking implementations in agreement. The mobile ranking engine and its Python service counterpart run against the same fixture and expected results. A change on either side can be checked against that shared case.
  • Keeping image processing out of the upload request. The closet service gives the client a signed upload directly to S3. A separate processing Lambda handles background removal and garment detection after the upload, keeping heavy work away from the API request timeout.
  • Turning an outfit photo into closet items. The wearing-photo pipeline detects garments, crops them, and sends each crop through the normal item pipeline. CLIP embeddings help identify duplicates, while deterministic IDs and conditional writes keep repeated events from creating extra items.
  • Keeping image comparisons consistent. The catalog and closet pipelines use the same CLIP model artifact and image preprocessing. That shared contract matters because their vectors need to be comparable for matching to work.
  • Making store integrations easier to maintain. Store adapters use a shared BaseScraper for downloads, storage, and catalog updates. Individual parsers handle each store’s format, while shared category normalization keeps the catalog compatible with recommendation queries.

Status

Cara is available as the Cara Stylist iOS beta through TestFlight and remains in development. Mobile auto-tagging and scoring weights are still unfinished, and wear counts are not yet part of live ranking.