Case study · Game · 2025
Hamour · a 100-level 3D shooter built with Three.js, no install required
A full first-person shooter — 100 waves, a boss fight, four game modes, custom 3D model import — that loads in a browser tab and plays on a phone. Built solo, as a test of how far the web platform can be pushed.
The idea#
Games are the hardest thing to make fast on the web: physics, animation, audio, input on both keyboard and touch, and hundreds of objects on screen at once. Hamour started as a question — can a real 3D shooter run well inside a browser with nothing to install? — and became a playful homage to a certain cartoon fast-food kitchen under siege by a robot army.
What I built#
- A first-person shooter with 100 escalating waves and a final boss fight, plus endless survival, a no-damage training range and free roam.
- Seven weapons, movement and camera tuned for keyboard and mouse, with touch controls and a landscape layout on phones.
- Custom 3D model import: players can drop in their own GLB, GLTF or OBJ files and see them in the game.
- A custom asset pipeline for the GLTF models, animations and effects so everything loads quickly.
How#
Three.js and WebGL with a custom game loop, spatial audio, and a lot of attention to performance: instancing, object pooling and careful state management to keep frame rates steady as waves grow. Solo design and development.
Outcome#
A live game people can open from a link and play immediately — and a demonstration that "a web app" can mean real-time 3D with hundreds of moving parts. The same engineering shows up in the 3D island on this site.