TUCK — A Space-Aware AI Furniture Shopping Agent

Inspiration

We try on a $50 shirt. Why buy a $500 chair without seeing it in our room?

Furniture shopping still asks people to measure their space, compare listings, and imagine the result. TUCK gives shoppers a way to see a piece in their own room before deciding to buy it.

What it does

  1. Scan your room. On a LiDAR-enabled iPhone, TUCK uses Apple’s RoomPlan to create an interactive 3D room.
  2. Ask for what you need. Say, “I want a modern chair for the corner by my vanity, under $500.” TUCK considers the room layout, your preferences, and product specifications from real retailer listings.
  3. Try it in place. Choose a recommendation and move or rotate its 3D model in the scanned room.
  4. Review the price and buy. TUCK prepares a server-priced quote and connects the purchase to Stripe in test mode.

The experience brings discovery, visualization, and checkout into one conversation. The 3D preview helps users judge a purchase; it does not guarantee an exact physical fit.

How we built it

  • Room context: A native SwiftUI app uses RoomPlan to scan a space. Before each chat reply, Claude receives an updated snapshot with room dimensions, existing furniture, and items the user has placed or moved.
  • Grounded recommendations: We extracted product information from retailer pages with Firecrawl, reviewed and standardized it, and bundled the resulting catalog in the app. The agent recommends products from that catalog rather than inventing listings.
  • 3D preview: We created furniture models from product images with Meshy, prepared their materials, and placed them in an interactive room view inside the app.
  • Trusted pricing: A Node.js backend calculates quotes and manages Stripe test payments. Signed webhooks update order status, while the server controls the amount charged.

The technical core is the connection between these parts: when the room changes, the agent receives the new layout. A recommendation can then be discussed, previewed, and priced against the same shopping context.

Challenges we ran into

  • Retail data was inconsistent. Stores describe sizes, colors, and materials differently, so we had to normalize product details before the agent could compare them.
  • Product photos did not automatically become useful 3D assets. Generated models varied in quality, and some materials rendered incorrectly. We prepared supported models offline for the demo.
  • Room scans have limits. RoomPlan gives us useful geometry, but measurements are approximate. We avoided claiming that a suggested item will definitely fit without a clearance check.
  • The phone had to handle several experiences at once. Scanning, chat, product cards, and an interactive 3D room needed to feel like one shopping flow.

Accomplishments that we're proud of

  • Built a native prototype that carries room context into a conversational shopping experience.
  • Connected real product specifications to recommendations and movable 3D furniture previews.
  • Completed a Stripe Sandbox payment through the backend, verified the signed webhook, and confirmed that repeated checkout requests did not create duplicate PaymentIntents.

What we learned

A useful shopping agent needs more than a good response. It needs reliable product data, an understanding of where the product will go, and a clear path from recommendation to a user-approved purchase. We also learned to show spatial recommendations with appropriate uncertainty: a preview can make a decision easier without pretending that a scan is a perfect measurement.

What's next for TUCK

Our next step is to validate the complete purchase experience on an iPhone, including PaymentSheet, authentication, and declined payments. We also want to expand the retailer catalog, improve 3D model accuracy, and add automated clearance checks.

Over time, TUCK could become a multi-vendor shopping platform that remembers a person’s style across rooms. A home listing could even become a personalized showroom before someone moves in.

Built With

Share this project:

Updates

Submission history