A semester-long interactive portfolio built as a Three.js 3D scene — floating 3D objects, custom physics, and GSAP animations house every course project and reading response from a semester exploring internet culture.
Art of the Web is a course about the internet as a creative and cultural medium — exploring how the web is built, who controls it, and how it shapes and reflects culture. Rather than submitting work through a learning management system, the format required building and maintaining a public portfolio site throughout the semester.
The portfolio became more than an archive container. It was a design and engineering challenge: how do you build something that feels as considered and creative as the work it's housing? The answer was a fully interactive 3D scene — each course project represented as a floating 3D object in space, clickable to reveal its details.
The portfolio is built with Three.js and Vite — not a static HTML page, but a fully rendered WebGL scene. Nine 3D GLTF models (a book, clock, globe, tape, cube, and others) float and drift continuously across the viewport, each one representing a course project. Clicking an object opens a modal with the project description and a link.
Key technical systems built for the portfolio:
Styled with SCSS and built with Vite for fast development and an optimized production bundle.
The course moved through a different web technology or concept each week. The projects archived in the portfolio span a wide range of tools and ideas:
The decision to build the portfolio as a Three.js scene rather than a conventional page came from a genuine question: if the course is about using the web as a creative medium, shouldn't the portfolio demonstrate that same principle? A flat HTML list of links would be accurate but boring. A 3D physics scene where you literally pick up and inspect each project felt more true to the course's spirit.
Building real-time physics and interaction from scratch — without a game engine, without a physics library — meant working through the math directly: velocity, restitution, bounding volume collision. That kind of low-level problem-solving, combined with the design constraints of making it feel playful and usable rather than technically impressive but confusing, is the part of this project I found most satisfying.