About This Project

An interactive 3D globe visualizing ~99,000 real-world mysterious phenomena - UFO sightings, bigfoot encounters, haunted places, volcanoes, shipwrecks, and more - rendered as a dot-matrix editorial experience.

The Data

The dataset is Strange Places v5.2 by Luke Steuber - 354,770 georeferenced records of mysterious phenomena sourced from NASA, NOAA, USGS, BFRO, NUFORC, OpenStreetMap, and the Shadowlands Haunted Places Index. All real data from authoritative databases. No synthetic records.

For this project, four high-volume categories (tornadoes, caves, megaliths, storm events) were cut for performance and visual clarity, leaving 10 categories and ~99,000 points. UFO sightings were filtered to 2010 and later.

CategoryRecordsSource
Meteorites32,186NASA
UFO Sightings21,490NUFORC
Ghost Towns18,154OpenStreetMap
Haunted Places9,717Shadowlands
Thermal Springs5,003NOAA
Bigfoot Sightings3,797BFRO
Earthquakes3,742USGS
Shipwrecks3,653NOAA
Fireballs863NASA
Volcanoes170USGS

Data licensed under CC BY 4.0. UFO sightings filtered to 2010+.

The Design

The globe is rendered as a dot-matrix - ~74,000 tiny spheres at 0.4° spacing forming the continents, with category data scattered as colored neon points on top. The aesthetic is editorial, not analytic. Light background, clean negative space, a single typeface (Inter), and a Fresnel-shaded globe surface that darkens toward the edges for depth. Closer to an art piece with utility than a dashboard.

The central interaction is overlap: toggle two or more categories, switch on Intersections mode, and the globe filters down to only the zones where those phenomena share geography. The interesting question isn't where things are - it's where they coincide.

How It Works

The globe is built with Three.js (r128), vanilla JavaScript, and no framework. Continent dots and category points are both rendered as InstancedMesh - one draw call per layer, each with a custom ShaderMaterial that discards fragments at the globe's silhouette edge for clean visual boundaries.

Land geometry comes from TopoJSON (110m resolution), decoded with a custom parser instead of D3. Antimeridian-wrapping polygons - where landmasses like Eurasia cross the ±180° line - required special handling: a polygon splitter for two-edge wraps and a polar closer for Antarctica.

Overlap detection runs a Haversine distance check on a 2° spatial grid, flagging points within 150km of a point in another active category. The result drives a per-instance shader attribute that fades non-overlapping points during intersection mode.

The AI chat mode ("Ask Atlas") sends questions to a Kimi 2.5 model via a Cloudflare Worker proxy. The API key lives server-side as a Worker secret. The system prompt is context-aware - it knows which categories are currently active on the globe.