# Hotel Komaiha: my résumé as a walkable art-deco hotel, 100% procedural (no models, textures or audio files)

**URL:** <https://discourse.threejs.org/t/hotel-komaiha-my-resume-as-a-walkable-art-deco-hotel-100-procedural-no-models-textures-or-audio-files/95810>\
**Category:** Showcase\
**Tags:** postprocessing, portfolio-website, webgl, performance, procedural, shaders\
**Created:** [October 23, 2026, 3:34pm UTC](https://discourse.threejs.org/t/hotel-komaiha-my-resume-as-a-walkable-art-deco-hotel-100-procedural-no-models-textures-or-audio-files/95810 "2026-10-23T15:34:11Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mahdi\_ko](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/mahdi_ko/32/74224_2.png) [@Mahdi\_ko](https://discourse.threejs.org/u/Mahdi_ko)\
**Post date:** [October 23, 2026, 3:34pm UTC](https://discourse.threejs.org/t/hotel-komaiha-my-resume-as-a-walkable-art-deco-hotel-100-procedural-no-models-textures-or-audio-files/95810/1 "2026-10-23T15:34:11Z")

</div>

Hi all! I built my portfolio as a 3D art-deco grand hotel you can walk through. Every floor is part of my résumé, and you play the bellhop.

🔗 [https://hotel-komaiha.vercel.app](https://hotel-komaiha.vercel.app)

 ![01-street-in-the-rain](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/2/1/21bd5a6a66f550533687cafe53e5599a7159bd9c.jpeg)

 ![10-ui-concierge-panel](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/6/6/66def2af44c14e0ef91cf6fc4885e4519f0d6bbf.jpeg)

 ![09-hotel-from-above](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/4/1/41ec5e0b202377695ae92e6cbf3dad7109db83ed.jpeg)

 ![08-the-town-car](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/b/4/b448a33f91bd8cef2ffb3e466b561b834490a49a.jpeg)

 ![07-rooftop-fireworks](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/7/9/79f2d413350a3e926f6564b66512a2520c43cb17.jpeg)

 ![06-stack-cafe-skills](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/d/5/d5dde0cb9b23feb4d270e074a5ec57f19b68f6e2.jpeg)

 ![05-suites-corridor](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/a/3/a325654e02e5cb736c7ef061a615d5755785b1ad.jpeg)

 ![04-ballroom-career-timeline](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/5/4/548617c87c4094104f5e3b2185f85ca51319739f.jpeg)

 ![03-bellhop-at-the-piano](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/e/0/e04f78b0b757d4624954ca74493557be12c9d5e4.jpeg)

 ![02-grand-lobby](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/a/0/a033899c88dd4737593bbd50aa7e3cc16f42529c.jpeg)

 ![11-ui-directory](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/e/7/e7f965c343811e71bec9cb7140ccf32c2571a715.jpeg)

**What’s inside**

- Six floors: a lobby with a mirror marble floor, a ballroom where my career timeline stands on hologram pedestals, one suite per project, a café where every skill is a jar on the shelves, a rooftop with an infinity pool and a giant neon sign, and a secret basement behind five hidden golden keys.
- A drivable 1930s car outside, with traffic and traffic lights.
- A guided tour, minimap, passport stamps, and a photo mode that saves a postcard.
- Five languages, including Arabic right-to-left (the canvas-painted signs too).

**How it’s made**

- No models, image textures or audio files. Geometry is built from primitives, textures are painted on canvases at load, and the music is synthesized live with the Web Audio API.
- Static meshes are merged by material, which roughly halved draw calls on the busiest floors (lobby: 1906 → 1045).
- Traffic, traffic lights and marquee bulbs animate in the vertex shader from small uniform arrays, so no instance buffers are re-uploaded each frame.
- Every floor shares one light layout (8 point lights, 6 spots, 1 shadow-casting spot), so shaders compile once. There’s a PMREM reflection probe per floor and a Reflector for the lobby marble.
- EffectComposer with bloom, ACES tone mapping, film grain and vignette, plus a small sanitize pass against NaN pixels on some GPUs.
- Adaptive resolution and a performance mode for slower devices.
- No bundler: plain ES modules and an import map.

I’d love feedback, especially on how it runs on your GPU or phone.  
Tips: WASD to walk, E to interact, G opens the directory, and the Konami code does something. 🙂
