Inspiration

Every commercial space has a past. A suite that used to be a dental office already has plumbing at every chair, and one that used to be a salon already has sinks and storefront traffic. But a listing only shows square footage, a price, and a few photos. Small business owners end up touring spaces blind, paying for build-outs that already existed somewhere else, and relying on a broker's memory to learn who was there before. We wanted any space to answer three questions on its own: who was here, what's built in, and how people get there.

What it does

SecondLife matches a business to the commercial space that suits it best, using evidence instead of guesswork. You describe what you need in plain English, like "I'm a barber looking for 1,500–2,000 sq ft in Houston," and SecondLife returns real, ranked suites. Each one has a 0–100 fit score built from three layers of evidence:

  • 📜 What was here: CoStar lease history, including past tenants, tenant mix, neighbors, and rent comps
  • 🧱 What's built in: rooms and features (sinks, cabinets, exam rooms) that AI found in Matterport 3D scans
  • 🛰️ How people get there: parking, loading areas, and outdoor space from Vexcel aerial imagery

From there you can:

  • Open a suite page with its history, floor plan, target rent, and good neighbors
  • Walk the space in a voice-controlled 3D tour, or say "give me the tour" for a narrated walkthrough
  • Ask the space questions in chat and get answers with citations back to the source records
  • Generate a draft letter of intent with a suggested counteroffer for your broker to review

How we built it

  • Frontend: Next.js 15, React 19, Tailwind 4, and MapLibre, with a full-screen Vexcel aerial map that flies to each result
  • Data: the CoStar dataset consolidated into DuckDB and served through a hosted API on Render, so the deployed app never ships the database
  • AI agent: a provider-independent tool loop with 7 tools (find_properties, find_suites, get_tenant_history, get_spatial_context, get_matterport_rooms, inspect_matterport_features, inspect_vexcel_site). Gemini runs first, and Claude takes over automatically on rate limits or outages.
  • Source-first routing: tenant questions start with CoStar, interior questions with Matterport, and parking questions with Vexcel
  • Vision: Gemini or Claude read Matterport panoramas and Vexcel aerial tiles, and the app rejects any output that uses an unknown feature type or a made-up image ID
  • Voice: a fast keyword matcher handles common commands. Claude Haiku interprets free-form speech during the tour, and Gemini TTS provides a natural voice.
  • Fit scoring: size fit (30) + same kind of business before (30) + what's built in (40)

We split the work into three roles: Ishaan on CoStar data, Riley on Matterport + Vexcel, and Cherry on product, UI, and voice.

Challenges we ran into

  • Keeping AI honest. Models fill gaps with confident guesses. We added cited answers, rejected invalid citations, separated supported history from uncertain history, and wrote rules like "not seen in the scan" ≠ "not there" and "no imagery" ≠ "no parking."
  • Messy real-world data. The same suite shows up as Suite 900, STE. 900, and #900. Labels repeat across floors. CoStar files law firms and salons under broad industries, so we also had to match on tenant names.
  • Connecting 3D scans to suites. Matterport models are linked at the building level, and multi-floor scans don't map cleanly to rooms, so we kept those links as hints instead of facts.
  • Removing all sample data. We took out every placeholder and built honest empty states for suites without a scan or history.
  • Deployment. We moved DuckDB behind a hosted API, cached to /tmp, and fetched floor plans on demand so the app runs on Vercel.
  • API quotas. Hitting Gemini rate limits mid-demo is what pushed us to build automatic Claude fallback.

Accomplishments that we're proud of

  • Every result comes from real data, with no mock listings or fake tenants
  • An agent that cites its sources and says "we don't know" when the evidence isn't there
  • Three very different data sources (lease records, 3D scans, aerial imagery) combined into one fit score
  • A voice-driven 3D tour that understands requests like "where would clients wait?"
  • A draft offer letter at the end, so the search leads to a next step

What we learned

  • Showing evidence and admitting what's missing makes the product more trustworthy, not less useful
  • Spatial data is powerful but needs careful framing: a scan sample isn't an inventory, and an aerial photo isn't a parking count
  • Designing tools to work with any model provider made fallback and swapping models easy
  • Pairing a fast keyword matcher with an LLM for the rest makes voice control feel quick and still understand natural speech

What's next for SecondLife

  • 🏷️ Rent and availability tools in the chat agent, plus live availability instead of source snapshots
  • 🏠 Landlord mode: match a vacant suite to the tenants who would value it most
  • 🧱 More scan coverage and verified room-to-floor mapping for multi-floor buildings
  • 🤝 Broker workflow: share a suite's evidence report and send the draft offer letter for review
  • 🌎 Beyond Houston to more markets

Built With

Share this project:

Updates

Submission history