Data visualisation · Product design · Front-end engineering

From CRM export to spatial intelligence.

A privacy-first browser application that transforms complex retail data into an explorable global view—without a backend, an API key or data leaving the machine.

Public-showcase edition: fully rebranded and rebuilt with deterministic synthetic values and fictional store destinations. No client identity, original store detail, internal segment name or real commercial figure is included.

1 filePortable, self-contained application
34kEmbedded world-city gazetteer
0 callsNo network requests at runtime
The challenge

Make geography useful, not decorative.

CRM spreadsheets can rank markets, but they make spatial questions slow to answer. Where is demand concentrated? Which cities are growing? Where do clients cross borders to shop? Which market deserves a closer look?

I designed and built the Client Intelligence Globe to turn a flat export into an interactive decision tool. The aim was not another reporting dashboard. It was a coherent workspace where a user could move from a global pattern to a specific locality—and understand the story behind it.

Explore3D heat fields, locality nodes, travel arcs and a complementary flat map.
CompareResponsive KPIs and leaderboards for volume, value, growth and reachability.
ExplainCountry and locality briefs computed deterministically from the active data.
ActSearch, filters, exportable tables and a guest-list planning workflow.
Technical build

A full analytics pipeline inside the browser.

The deliverable had to be portable and work in controlled environments, so the complete product ships as one self-contained HTML file. Interface, application logic, libraries, world geometry, the city index and demo data are embedded together.

CSV rows
Column detection
Normalisation
Geo resolution
Aggregation
Views + briefs

Resilient imports

The importer recognises common header variations, normalises inconsistent values and geocodes cities against an embedded GeoNames index. Matching is country-aware. Unresolved places fall back to an explicit country-level cluster and appear in the quality report instead of being silently lost or assigned invented coordinates.

Two renderers, one state

globe.gl and WebGL drive the 3D view; a custom canvas renderer handles the Natural Earth flat projection, pan, zoom, hit testing and labels. Both consume the same filtered state, so the map, KPIs, ranking, narrative and exports remain aligned.

Filter-correct totals

Joint segment × channel cells are retained inside each anonymised aggregate. Multi-filter totals are recomputed from matching cells instead of estimating intersections from percentages—a small architectural choice that protects the accuracy of every downstream surface.

Vanilla JavaScriptCanvas 2DWebGLglobe.glTopoJSONNatural EarthGeoNamesFile APIlocalStorage
In motion

An analytical instrument designed for exploration.

Interaction gallery

One dataset, several ways to see it.

The custom 2D projection makes global comparison easy; every metric and filter remains live.
Selection links the map, ranking, KPIs and locally generated narrative.
Animated arcs reveal cross-city shopping behaviour without plotting an individual client.
Privacy by design

The security boundary is the browser.

  • No client names, email addresses or street addresses are stored in the application.
  • Map marks represent locality or country aggregates, never individuals.
  • Imports are processed in memory; the application makes no network calls.
  • Optional persistence stores only derived aggregates in browser local storage.
  • The public build uses newly created synthetic values and fictional destination labels—not merely blurred screenshots.
Outcome

A coherent product, not a collection of charts.

The project shows how a familiar operational artifact—a CSV export—can become a focused decision interface without a backend platform. The strongest design decision was keeping one analytical state across every surface. Change a filter and the globe, flat map, KPIs, ranking, detail brief and exports all change together.

That consistency turns the experience into a single instrument for geographic reasoning: broad enough for exploration, precise enough to support a decision, and portable enough to run anywhere a modern browser is available.