Selected work

Design & Build · Web, 3D · 2026

A scroll-driven 3D tour of a hand-assembled watch, built from scratch in about eight days.

  • TypeScript
  • Three.js
  • Vite
  • Vitest
  • Playwright
  • WebGL
  • Accessibility
The 3D Turbo Prime watch in rose gold over the CAVEMAN wordmark on the home page
The home page opens on the Turbo Prime, rendered live in Three.js.
  • 9

    Scroll chapters

  • 17

    Max draw calls per chapter, budget 150

  • 373

    Unit tests

  • 35

    e2e tests

CAVEMAN is a watchmaker in Accra, founded in 2018, that hand-assembles watches such as the Turbo Prime, a 42 mm rose-gold automatic with a tourbillon. I designed and built its new brand site from scratch in about 8 days (75 commits, October 2026) with TypeScript, a Vite multi-page build and no framework. It has seven pages: home, about, build, membership, CSR, store and contact.

A tour in nine chapters

The home page is a scroll-driven 3D tour of the watch: a hero, a 360-degree flip, an exploded view of the bridges and rotor, a dark Mechanical Heart chapter on the tourbillon, the strap, and a final view with every part laid out. The watch is procedural, built from lathe geometry and a material library, with optional GLB parts loaded through a manifest. The stack is Three.js with three-mesh-bvh and the Jost variable font.

A draw-call budget

The brief set a budget of fewer than 150 draw calls. The build report records 15 to 17 per chapter, 32 in the twin view, and 9 shader programs held flat across a full forward and backward scrub. The first pass was about 33 to 66 draw calls with 13 programs. Pixel ratio is capped per quality tier.

The builder

The build page lets a visitor choose Quartz or Automatic on a split live watch, with five picker types, engraving, and GHS pricing with a running total. The whole build is serialised into the URL, so it can be shared or attached to the contact form.

Content, accessibility and tests

All copy lives in one typed content module that is rendered to static HTML at build time, so the final text is in the HTML without script. The site respects prefers-reduced-motion, its pickers are radio controls with aria-checked and keyboard support, and it has a skip link and light and dark themes. 373 unit tests (Vitest) and 35 Playwright e2e tests run across desktop, a Pixel 7 mobile project and a no-WebGL project. It is hosted on Firebase App Hosting with a small Node static server.

Highlights

  • Seven pages on a Vite multi-page build with no framework
  • Procedural watch from lathe geometry and a material library, with optional GLB parts
  • 15 to 17 draw calls per chapter against a budget under 150
  • 9 shader programs held flat across a full forward and backward scrub
  • Builder with five picker types, engraving, GHS pricing and the build serialised into the URL
  • Copy in one typed module, rendered to static HTML at build time
  • Reduced-motion support, radio-control pickers with aria-checked, skip link, light and dark themes
  • 373 Vitest tests and 35 Playwright tests, including a no-WebGL project

© 2026 Theophilus Rex Danquah

Accra, Ghana