Rhumb Line – explore a 3D ship's cabin to find the coffee

I made Rhumb Line Coffee Roasters, a concept landing page for a fictional coffee roaster. Instead of scrolling through sections, you sit at a chart table in a ship’s cabin out at sea and explore the desk.

Live: Rhumb Line Coffee Roasters · Six origins, one voyage

Every object on the desk is a section

9 objects are clickable. The camera flies straight from one to the next, and a hint suggests where to look next.

The compass opens “Steer by taste”, a flavour wheel you turn until one flavour family points north.

The crew list is a four-question quiz that finds you a plan, an origin and a grind.

The coffee cup shows today’s brew and four ways to make it at home.

A voyage for six coffees

Pick a port on the chart and the ship sails there, with a timelapse through dusk, night and dawn. On arrival you get the ship’s log for that leg and one bag of beans for the sample chest. There are six to find.

Weather, loading and phones

Click the porthole and a storm rolls in, with rain on the glass and a darker cabin.

The loader follows real loading progress. At 100% its paper chart shrinks into the 3D chart on the desk.

On phones it is the same scene, with the objects in a bottom bar.

Tech

  • three.js r186. No 3D model files and no texture images: geometry and materials are generated in code. The only images are the coffee photos inside the panels.
  • MeshPhysicalMaterial with clearcoat and transmission for porcelain, lacquer, enamel and glass, plus PMREM environment lighting and PCF shadows.
  • Post-processing: GTAO → depth of field → bloom → ACES tone mapping → colour grade (vignette, grain) → SMAA.
  • The scene never stops moving: hull roll, a swinging lamp, the sea, steam from the cup. If the frame rate stays low, it lowers render quality instead of freezing the motion.
  • Without WebGL or JavaScript you get a regular scrolling page.

I’d love feedback, especially on how it runs on your machine and whether the navigation feels clear.

6 Likes

Very artistic. Bravo for the concept!

On mobile, pinch-zoom currently scales the browser viewport instead of the Three.js camera, which produces heavy pixelation even though the geometry is clean. Adding maximum-scale=1, user-scalable=no to the viewport meta lets the scene own the gesture.

1 Like

Thanks!! will definitely check on that

Great vibes, and verrry nice/clean presentation!
The art direction is fantastic.
Feels super quality. :smiley:

1 Like

Thank you hehe

Very cool … Santos, São Paulo - Brazil … :wink:

1 Like