Interactive Globe

A section on the OFM Jobs homepage. Dots for land, arcs between hiring cities, a sphere you can pick up and spin. Live since launch, and that is it running on the right.

The Story

It had to stop the scroll

Not the hero. It is the fifth section down, after the fold, right before the job listings. Nothing that far into a page gets attention for free.

  • A photo says "global" once. An object you can spin says it every time.
  • The claim was about reach, so the section had to be the map.
  • It lands just before the listings, so it has to set them up.

Where it came from

Stripe's globe, and Anthropic's. I took the idiom openly: a sphere of points, land picked out by density, arcs between places.

  • Stripe's is WebGL with real map data. Mine is canvas, no dependencies.
  • Theirs is ambient. Mine carries content: named cities, regions, arcs.
  • Better to say where it began than pretend it began with me.

The Decisions

No dependencies. None.

850 lines of TypeScript and a 2D canvas. No three.js, no WebGL, no d3, no globe library. Nothing five sections down a marketing page justifies hundreds of kilobytes.

The continents are arithmetic

Forty rotated ellipses, not map data. Overlap returns a soft value, so coastlines fade instead of stepping.

  • The whole world is a few hundred bytes of parameters.
  • At this dot pitch, real coastlines would read as noise.

Golden-angle distribution

Points placed by the Fibonacci sphere method. A latitude and longitude grid crowds the poles and thins the equator. This one does not.

Colour mixed in OKLCH

Interpolating in sRGB dips through a muddy middle. A perceptual space keeps the ramp even, which matters when brightness is the only thing carrying depth.

Momentum, measured not eased

Pointer velocity is sampled every frame and handed straight to the rotation on release. A flick and a nudge feel different, which is what makes it read as an object.

It stops when you cannot see it

The animation loop cancels off-screen, and pixel ratio is capped at 2. Sitting fifth, it is out of view for most of a visit.

  • A section that quietly drains a battery is a bug, not a flourish.
  • Porting it here, I added the reduced-motion path it never had.

The Outcome

It shipped, and it stayed

Not a prototype or a study. Live on the OFM Jobs homepage since launch.

DRAG TO SPIN