Interactive Loft — 3D Scene
A hand-built 3D room where hovering teaches you what to click — no tutorial, no instructions overlay.
- Role
- Design + Frontend
- Year
- 2026
- Disciplines
- 3D / WebGL, Frontend Development, Interaction Design

01
The Problem
Interactive 3D on the web usually fails in one of two ways: it looks good but you can't tell what you're allowed to touch, or it explains itself with an instructions overlay nobody reads. I wanted to see whether a scene could teach its own affordances through nothing but light.
02
The Solution
I assembled a loft from CC-licensed models and made hover the entire tutorial — anything interactive lights up when the cursor crosses it, so exploration teaches the rules. Clicking furniture opens a detail panel; small objects on the table each have their own behaviour; a Shiba moves around the space. Orbit and wheel-zoom handle navigation, and zooming out backs you out of any object, so there is no dead end. Geometry is DRACO-compressed to keep the scene loadable over a normal connection.
- Hover highlighting as the only tutorial
- Clickable furniture with detail panels
- Individually scripted objects and a wandering Shiba
- Orbit + wheel navigation with zoom-out as universal escape
- DRACO-compressed geometry for reasonable load times
03
Result
Live in the browser, no plugin or install. The scene is a testbed for interaction patterns in 3D — how to signal affordance, how to let someone leave a state without a back button, and how to keep an asset-heavy scene loading fast.
Stack
Nuxt 4 · Three.js · WebGL · GLTF / DRACO · TypeScript
More projects
2026
Vinyl Room — 3D Turntable
A record crate and a turntable in 3D. Pick a record, drop it on the platter and its 30-second preview plays while it spins.
2026
Project Cube — Puzzle Portfolio
A puzzle cube whose six faces are six of my projects. Drag a face to turn it, solve the cube in a few moves or jump straight to a project.
2026
Jelly — Squishy WebGPU Starfish
A translucent starfish that lives in your browser. Move to make a friend, grab an arm, stretch it and let go — a small experiment in soft-body physics and WebGPU rendering with Three.js.