← projects

3D Room Portfolio

Solo

React Three FiberThree.jsdreipostprocessingZustandGSAPHowlerlevaBlender

GitHub

Overview

An interactive 3D room portfolio. The visitor orbits a modeled space and clicks objects to trigger things: change the lighting and theme, play music, launch a game of Mario, open a project. It is an exploratory take on the classic portfolio, where the navigation is furniture.

The 3D room in its night lighting
The room at night. Desk LED strip, monitor glow and neon poster carry the scene.
Two sites, two repositories

The room and the portfolio inside it are separate projects: the 3D environment renders the portfolio site live in its screens. Both are deployed and playable.

Day and night: same room, two lighting passes

A lamp in the room acts as the theme switch. Clicking it re-lights the whole scene. Same geometry, two moods: a warm daylight pass where the window becomes the key light, and a night pass where the emissive materials take over, monitor, poster and LED strip.

The 3D room in daylight
Day: the window becomes the key light.
The 3D room at night
Night: emissive materials take over.

The screens are the site

This is the part I would rebuild the same way. The monitor and the phone carry no texture. They render the second site, live: the desktop layout on the monitor, the responsive layout on the phone. Click one and the camera flies in (GSAP), then hands scrolling over to the page. Two codebases, two deployments, one continuous experience. And the portfolio stays readable on its own, for anyone who would rather not walk around a bedroom to find my CV.

Camera flown into the desktop monitor
Monitor: the desktop layout.
Camera flown into the phone lying on the bed
Phone on the bed: the mobile layout.

Tech

  • React Three Fiber and Three.js, with drei for the helpers and @react-three/postprocessing for the bloom that makes emissive materials read as light.
  • Zustand for state, GSAP for the theme transition and the camera fly-to, Howler for audio, leva as the control panel while tuning the scene.
  • Every model authored in Blender.

Inspiration

Three rooms I studied before building mine: Bruno Simon’s My Room in 3D, Henry Heffernan’s CRT-desk portfolio, and Jesse Zhou’s ramen shop. All three answer the same question in different ways. How much exploration will a visitor tolerate before they just want the information?

The direct predecessor of this site. It looked good and it loaded slowly. The portfolio you are reading now is my answer to that trade-off.