Terry Henrard

portfolioTerry HenrardAugust 2, 2022Updated November 24, 20255 minAISaaSDashboardAnalyticsReal EstatePythonMySQLNext.jsB2B

The "Naked Link" Problem

There is a massive gap between delivering a service and delivering a product. VISIT ME, a premier creator of 3D virtual tours for real estate, found themselves stuck in that gap.

They were creating stunning, high-definition digital twins of properties, but the delivery method was underwhelming: a simple, naked URL sent via email.

For the real estate agencies paying for these tours, it was a "Black Box." They had no way to organize their portfolio, no insight into who was watching, and zero analytics to prove ROI to their sellers. The user experience felt disconnected, and valuable data was evaporating into the ether.

We needed to stop just sending links and start delivering intelligence.

Contents

The Solution: A B2B Powerhouse

The goal was to transform VISIT ME from a service provider into a SaaS platform. I built a centralized ecosystem where agencies can't just "see" their tours—they can manage, analyze, and optimize them.

Key Features

High-Precision Analytics

Standard web analytics weren't enough. We track behavior inside the 3D environment—measuring session duration, specific viewpoints visited, and user navigation patterns.

AI-Powered Insights

The system doesn't just collect data; it interprets it. We implemented AI scoring to rate listing performance and offer automated suggestions to improve the customer journey.

Collaborative Management

Real estate is a team sport. Agencies can now manage documents, 3D assets, and client communications in a real-time collaborative environment.

Automated Operations

To reduce administrative drag, the platform handles automated invoicing and billing management, freeing up the VISIT ME team to focus on quality.

Under the Hood

Next.js gives us the best of both worlds: modern framework features paired with raw, optimized performance. For this project, we used Next.js for the frontend (leveraging server-rendering and edge optimizations where appropriate) while the analytics backend ran on Python, all deployed on a custom VPS architecture for speed and reliability.

Python 3.15Next.jsMySQLLinux VPSOpenAI API

The Challenge: Tracking the "Un-trackable"

The hardest technical nut to crack was tracking user behavior inside a 3D canvas (WebGL). Unlike a standard website where users click links to change pages, a user in a 3D tour stays on the same URL while "walking" through a house.

Standard analytics tools see this as a single page view. We needed to know if they looked at the kitchen or the garden.

I engineered a custom event listener system that hooks into the 3D engine's coordinate system to generate "spatial heatmaps."

# Validates and maps coords into floorplan regions, then aggregates time per region.
class Movement(BaseModel):
  x: float
  z: float
  time: int  # unix milliseconds
 
class Payload(BaseModel):
  tour_id: str
  movements: List[Movement]
 
REGIONS = [
  {"id":"kitchen","xmin":10,"xmax":20,"zmin":0,"zmax":8},
  {"id":"garden","xmin":0,"xmax":20,"zmin":8,"zmax":20},
]
 
def map_to_region(x: float, z: float):
  for r in REGIONS:
    if r["xmin"] <= x <= r["xmax"] and r["zmin"] <= z <= r["zmax"]:
      return r["id"]
  return "unknown"
 
 
@app.post("/api/analytics/spatial-track")
async def spatial_track(payload: Payload):
  totals = {}
  for i in range(len(payload.movements) - 1):
    cur, nxt = payload.movements[i], payload.movements[i + 1]
    region = map_to_region(cur.x, cur.z)
    dt_ms = max(0, nxt.time - cur.time)
    totals[region] = totals.get(region, 0) + dt_ms
  return {"tour_id": payload.tour_id, "region_ms": totals}

The Impact

The shift from "sending links" to "providing a platform" was a game changer for VISIT ME. The perceived value of their service skyrocketed, turning them from a vendor into a tech partner.

+15%New Client Rate
10hSaved Per Week
100%Data Transparency

Conclusion

This project illustrated that innovation isn't just about which JavaScript framework you choose—it's about solving the visibility problem. By using Next.js for the front-end and building a custom analytics engine on a reliable stack, we gave VISIT ME and their clients the one thing they were missing: clarity.

Now, every virtual step a potential buyer takes is a data point that helps sell a home. 🏠

Inspired by this project?

I can help you build something similar — let's chat about your idea and the next steps.

Subscribe to my newsletter

Get updates about new projects and occasional tips and tricks — just useful stuff.

Read another project

If you'd like to explore more, here's another project you might enjoy.