01 / ObjectTracer
Live productObjectTracer.
One world.
Why so many maps?
I’ve always wondered what’s happening beyond what I can see. Aircraft above us. Ships between continents. Satellites overhead. Following them meant switching between separate worlds.
So I built ObjectTracer: one explorable globe. From the backend and real-time streams to the interface and 3D rendering, I kept building until those signals felt connected.
Independent product · full-stack design, development & deployment
Then people I’d never met started using it.
Audience figures reported September 2026. Rendering capacity is separate from audience size.
The design problem
Not more data.
A clearer way to see it.
The interesting part was making different update rates and enormous changes in scale feel like one place. Pan the globe, follow an object, look closer—the system responds to what you’re looking at.
Follow a signal Interactive tracking study
Follow a signal
A continent of connections.
From a signal to something you can follow.
Go workers
Independent sources, independent clocks. Aircraft, orbital and maritime data enter one backend.
Redis + PostgreSQL
Fast-changing positions stay separate from durable trails and object metadata.
WebSocket hub
A snapshot first. Then only the changes inside the visitor’s current viewport.
React + Three.js
GPU instancing turns thousands of objects into an explorable spatial interface.
Explore the engineering
The details that make it work
Complexity underneath.
Clarity at the surface.
Thousands of objects.
A handful of draw paths.
GPU instancing shares geometry across aircraft categories. Reused transformation buffers keep the render loop lean. Selection works in screen space, using a spatial index at a distance and GPU color IDs up close.
InstancedMesh · screen-space picking · reusable buffersThe whole picture first.
Only the changes after.
A snapshot establishes the view. Delta messages update the objects that moved or disappeared. When the visitor pans or zooms, the viewport tells the server which part of the world matters.
Snapshot to deltas · viewport bounds · WebSocket hubThe invisible work
behind a fluid experience.
Reconnect handling, stale-object cleanup, bounded tile loading, and mobile memory fixes keep the experience usable beyond the ideal demo. Those decisions are part of the product, too.
Connection lifecycle · memory limits · progressive tilesThe challenge
Different data sources, refresh rates, and spatial scales have to feel like a single continuous experience. Rendering and network traffic both need to stay responsive.
What I built
A Go backend with independent data-source workers, Redis for live state, PostgreSQL for trails, and viewport-filtered WebSocket updates. React and Three.js translate those streams into an explorable world.
Beyond the code
I own the product from architecture and development through deployment, monitoring, analytics, search optimization, and continuous delivery on Railway and Vercel.
Project repository








