Inspiration

Moving into a dorm is one of the first major transitions students face on campus. Yet furnishing that space is still a frustrating, inefficient process, students buy furniture online without knowing if it'll fit, leading to wasted money, cluttered rooms, and avoidable returns. Beyond the inconvenience, unnecessary shipping and discarded products create real environmental waste. We built Toova to make room planning visual, accurate, and collaborative before a single dollar is spent.

Social Impact

Toova directly addresses a problem every student faces, furnishing an unfamiliar space on a tight budget. By letting students visualize their room before buying, Toova reduces costly mistakes, unnecessary returns, and wasted money. It's cheaper and faster than hiring an interior designer, and requires no technical skills, if you can take a photo, you can use it. Beyond students, anyone furnishing a space gains the same advantage: see it before you spend. Toova makes confident, informed space planning accessible to everyone.

What Toova does

Toova is a 2D-to-3D generation and room-visualization platform. Users sign in, upload a photo of any object, and TRELLIS generates a 3D model from it. That model can be placed, scaled, and arranged inside a true-to-scale browser-based room simulator. When ready, users can open the same furniture catalog in AR on iPhone, dropping models directly into their real room using ARKit and RealityKit to see exact size and fit before purchasing.

🔗 Try Toova here

What's next for Toova

  • Deploy generation service to Render: the 2D-to-3D pipeline currently runs on a specific EC2 instance and only accepts requests from whitelisted IP addresses. The immediate next step is migrating this service to Render so that 3D generation works reliably on the deployed site for all users, not just from a local dev environment.
  • Real-world scale accuracy: uploaded and generated models should be scaled correctly against physical room dimensions using inches/feet metadata, uniform sizing, and accurate AR placement scale.
  • Shoppable output: integrate Amazon and other e-commerce APIs so a planned layout maps directly to purchasable SKUs, either as individual items or suggested bundles.
  • Production-grade USDZ conversion: move textured GLB conversion off the Deno/Three.js spike and into a dedicated native converter service using usdzconvert, tinyusdz, or usd_from_gltf, while keeping the same HTTP contract.
  • HTTPS for EC2/TRELLIS: replace the current dev-only HTTP connection with TLS to support App Store–safe iOS networking.

How we built it

The web client runs on React, TypeScript, Vite, React Three Fiber, and Three.js with Zustand for state. The iOS AR app is built with SwiftUI, ARKit, and RealityKit. Backend infrastructure uses Supabase for auth, database, storage, and Edge Functions. 3D generation runs TRELLIS on a Dockerized AWS EC2 instance with GPU and CUDA dependencies. A Supabase Edge Function handles GLB-to-USDZ conversion to deliver AR-ready assets to the iOS app.

Challenges we ran into

  • EC2 + TRELLIS setup: TRELLIS required a consistent Linux and Docker environment on EC2 where GPU, CUDA, and all dependencies matched the actual generation runtime. Getting this to work reliably across the team rather than just on one local machine took significant time.
  • GLB to USDZ: Converting from GLB to USDZ was a challenge since the textures were much harder to transition, as the polyfill fixes were not sufficient, and USDZ would export with no PNGs. We resolved it by parsing the GLB bin chunk directly, decoding the embedded images with imagescript, and then assigning the decoded pixel data to material.map and other slots using glTF material associations.
  • AR asset delivery: RealityKit can't load models from remote URLs directly. We worked around this by downloading and caching USDZ files locally on device before passing them to ARKit.

Built With

Share this project:

Updates