An interactive, procedural luxury skeleton watch built with React, TypeScript, React Three Fiber, Drei, and Three.js.
Every visible watch component is generated in code: no external 3D models, HDR files, hosted fonts, or runtime asset downloads.
GitHub Pages is configured for:
https://ckeplinger199.github.io/asterion-h01/
The first deployment starts after the initial push to main.
- Fully procedural skeleton watch: case, lugs, bezel, sapphire, dial, hands, bridges, gears, rotor, jewels, screws, crown, pushers, strap, and caseback.
- Multi-layer openworked calibre with mainspring barrel, meshed train wheels, visible pivot jewels, keyless works, and a tourbillon-style escapement.
- Explicit crown modes:
Windtensions the mainspring reserve through the keyless works.Setadvances the hands in 15-minute steps without adding reserve.
- Working chronograph controls with a visible column-wheel-style mechanism, coupling clutch, brake lever, drive wheel, running state, and reset.
- Complications for GMT, date, moon phase, power reserve, and chronograph.
- Exploded mode separates the crystal, bezel, dial, hands, movement, and caseback into a readable layer stack.
- Calibre tour buttons highlight the keyless works, barrel, chronograph works, and escapement.
- Responsive controls: desktop side panel, touch-friendly tablet/mobile bottom sheet, collision-aware hover/tap labels, and adaptive camera framing.
- Production build uses local icons, relative Vite asset paths, code-split vendor chunks, ACES tone mapping, bloom, SMAA, and adaptive DPR.
Requires Node.js ^20.19.0 or >=22.12.0.
npm install
npm run devOpen the local URL printed by Vite.
npm run lint
npm run buildThe production build is emitted to dist/.
This repo includes a GitHub Pages workflow at .github/workflows/pages.yml.
On pushes to main, GitHub Actions runs:
npm ci
npm run lint
npm run buildThen it publishes dist/ to GitHub Pages.
The Vite config uses base: './', so the static build works from the repository Pages subpath.
- Drag/swipe to orbit.
- Scroll/pinch to zoom.
Explodedseparates the watch into layered mechanical assemblies.Pausefreezes the animated mechanics.Reframereturns the camera to the current layout's optimal view.- Case finish switches between steel, rose, and DLC material systems.
- Strap swatches change the procedural leather color.
- Crown mode switches between winding and hand-setting behavior.
- Crown action winds reserve in
Windmode or advances time inSetmode. - Chronograph controls start, stop, and reset the 30-second register.
- Calibre tour buttons intentionally focus the most important mechanisms.
src/
components/
scene/ camera, lighting, render pipeline
ui/ responsive control sheet and hover annotations
watch/ case, dial, movement, hands, complications, strap, motifs
lib/ procedural geometry and finish palettes
vendor/ Three.js Timer compatibility adapter
App.tsx application state and control wiring
MIT