Skip to content

About

Room Portfolio is an interactive 3D personal portfolio, presented as an explorable isometric room where every object tells a piece of my story πŸ›‹οΈπŸŽΉπŸŒ—

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Room Portfolio Logo 3D Portfolio Room

Room Portfolio is an interactive 3D personal portfolio built as an isometric room scene, where visitors can explore my work and hobbies through clickable objects, animated shaders, ambient audio, and a day/night theme toggle. Instead of a traditional scrolling page, the portfolio is presented as a small living space filled with details β€” a laptop, a piano, a bookshelf, photos β€” each one revealing a piece of information about me when interacted with.

This was my first experience working with 3D graphics and Three.js. I built it while following this YouTube tutorial, learning the fundamentals of 3D scenes, materials, shaders, lighting, and animation along the way, and then extending it with my own content, assets, audio, and styling.

Room Portfolio Preview

Features

  • Interactive 3D room: A fully modeled and textured isometric room built with Three.js, with clickable objects that open information about me.

  • Custom shaders: Hand-written GLSL shaders (smoke effect, day/night theme transition) for atmosphere and visual polish.

  • Day/Night theme toggle: Smooth shader-driven transition between day and night lighting and textures.

  • Ambient audio & sound effects: Background music and interactive sound effects (piano keys, clicks) powered by Howler.js.

  • Smooth animations: Camera movement, object transitions, and UI animations handled with GSAP.

  • Custom fonts & styling: Custom typefaces and SCSS-based responsive styling for the interface overlaying the 3D scene.

  • Orbit-style camera controls: Custom controls for navigating and exploring the room from different angles.

Tech Stack

  • 3D / Rendering: Three.js, custom GLSL shaders, Draco compression for models.
  • Animation: GSAP.
  • Audio: Howler.js.
  • Styling: Sass (SCSS), include-media.
  • Build Tool: Vite (with vite-plugin-glsl for shader imports).
  • Language: JavaScript.

Installation

To run this project locally, follow these steps:

  1. Clone the repository:

    git clone https://github.com/OstapMaksymiv/3d-portfolio.git
    cd 3d-portfolio
  2. Install dependencies:

    npm install
  3. Start the development server:

    npm run dev

    The app will run on the local address printed in the terminal (Vite's default is http://localhost:5173).

  4. Build for production:

    npm run build
  5. Preview the production build:

    npm run preview

Project Structure

room-portfolio/
β”œβ”€β”€ public/
β”‚   β”œβ”€β”€ audio/       # Music and sound effects
β”‚   β”œβ”€β”€ draco/        # Draco decoder for compressed models
β”‚   β”œβ”€β”€ fonts/        # Custom typefaces
β”‚   β”œβ”€β”€ images/       # UI and preview images
β”‚   β”œβ”€β”€ media/         # Favicons and manifest assets
β”‚   β”œβ”€β”€ models/        # 3D room model (.glb)
β”‚   β”œβ”€β”€ shaders/      # Shader textures (e.g. perlin noise)
β”‚   └── textures/     # Day/night room textures
└── src/
    β”œβ”€β”€ shaders/       # GLSL fragment/vertex shaders
    β”œβ”€β”€ styles/        # SCSS styles
    β”œβ”€β”€ utils/         # Utility classes (e.g. OrbitControls)
    └── main.js        # Application entry point

Development Conventions

  • Language: JavaScript (ES modules).
  • Build Tool: Vite, with vite-plugin-glsl for importing .glsl shader files directly.
  • Styling: SCSS organized into defaults, fonts, reset, and variables partials.
  • Assets: 3D models are Draco-compressed for smaller file sizes; textures are served in .webp for performance.

Credits

Contributing

This is a personal learning/portfolio project, but suggestions are welcome:

  1. Fork the repository.
  2. Create a new branch (git checkout -b feature-branch).
  3. Make your changes and commit them (git commit -am 'Add new feature').
  4. Push to the branch (git push origin feature-branch).
  5. Open a pull request.

About

Room Portfolio is an interactive 3D personal portfolio, presented as an explorable isometric room where every object tells a piece of my story πŸ›‹οΈπŸŽΉπŸŒ—

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages