Skip to content

Repository files navigation

3D WebGL Interactive Portfolio

Three.js React TailwindCSS Vite Docker Nginx

An immersive, interactive 3D Developer Portfolio built with Three.js, React 19, and Tailwind CSS. Features a retro-futuristic 3D workspace with a dynamic CRT monitor displaying a live, interactive UI via canvas texture projection and 3D raycast event dispatching.

Explore Live Demo · Report Bug · Request Feature


🌟 Key Features

  • 🖥️ Interactive 3D CRT Display: Projects a live React component onto a curved 3D mesh texture in real-time using html2canvas and Three.js canvas texturing.
  • 🎯 3D Raycasting Event Proxy: Interactive buttons, navigation links, and clipboard actions rendered directly on the 3D monitor mesh using raycasted mouse coordinates.
  • 💾 Retro BIOS Boot Sequence: Nostalgic terminal boot experience with animated system checks, memory tests, and audio cues before entering the workspace.
  • 🎨 Minimalist Box-Free Design: Clean, typography-first interface optimized for curved CRT readability with zero box artifacts or clutter.
  • Smooth Camera Transitions: Tween.js camera choreography that zooms in and focuses dynamically between the desk overview and CRT display.
  • 🐳 Docker & Nginx Deployment: Multi-stage production container with custom Nginx GLB/GLTF MIME type support and aggressive caching control.

🛠️ Tech Stack

Core Technologies


📂 Project Structure

portfolio-beta/
├── public/
│   ├── models/                # 3D Blender GLB/GLTF models (wholeEnviroment.glb)
│   └── styles/                # Background textures and visual assets
├── srcs/
│   ├── audioManager.js        # Web Audio API spatial synthesizer & sound FX engine
│   ├── deskWidgets.js         # 3D Desk widgets (7-segment clock, lamp switch, sound switch)
│   ├── lightingManager.js     # Three.js scene lighting (ambient, directional, bulb, screen)
│   ├── loader.js              # Interactive macOS iTerm telemetry boot loader & fast-boot
│   ├── portfolio.js           # Core Three.js orchestrator, camera tweens & lifecycle
│   ├── screenManager.js       # HTML-to-Canvas CRT texture rasterizer & color interceptor
│   ├── comps/
│   │   ├── display.jsx        # Interactive screen sections (Home, About, Projects, Contact)
│   │   ├── portfolioData.js   # Structured project, experience & skills data
│   │   └── sectionNav.jsx     # Monospace section navigation bar
│   └── main.jsx               # React 19 root & application initialization
├── portfolio.css              # Typography, CRT scanlines, and WebGL screen styling
├── Dockerfile                 # Multi-stage production container build
├── docker-compose.yml         # Container orchestration configuration
├── nginx.conf                 # Nginx server config with GLB/WASM mime types
├── Makefile                   # Automated build, dev, and Docker management targets
└── package.json               # Dependencies and build scripts

🚀 Getting Started

Prerequisites

Local Development

  1. Clone the repository:

    git clone https://github.com/ChaoticIssam/portfolio-beta.git
    cd portfolio-beta
  2. Install dependencies:

    npm install
  3. Start the Vite development server:

    make dev
    # or
    npm run dev

    Open http://localhost:5173 in your browser.


🐳 Docker Deployment

The project includes automated Docker orchestration served through an optimized Nginx Alpine container:

# Build and start container in the background (runs on http://localhost:8090)
make docker-up

# Stop container
make docker-down

# Clean dangling image layers and builder cache
make docker-clean

# Full prune (removes dangling images, cache, and unused anonymous volumes)
make docker-prune

# Rebuild and restart container from scratch
make docker-re

📋 Available Makefile Commands

Command Description
make dev Starts local Vite development server with Hot Module Replacement (HMR).
make build Compiles the production bundle into /dist.
make preview Locally previews the compiled production build.
make clean Removes /dist and .vite cache directories.
make docker-up Builds and launches the Docker container at http://localhost:8090.
make docker-down Stops and removes the Docker container.
make docker-clean Prunes dangling <none> images and builder cache.
make docker-prune Deep prunes dangling images, build cache, and unused anonymous volumes.
make docker-fclean Deep clean for all containers, images, volumes, and local artifacts.
make docker-re Restarts and rebuilds the container from scratch.

📸 Screenshots & Development Journey

3D Workspace Design & Blender Modeling

Workspace Progress Blender Wireframe View
Design Blender Model

Retro BIOS Boot Terminal & Lighting Engine

BIOS Loading Terminal Scene Lighting & Ambience
Loading Page Progress with Lights

👤 Author

Issam Zitouni


🙏 Inspiration & Acknowledgments

  • Inspired by the creative 3D web experiments by Henryjeff.
  • Built with the support and community at 1337 (42 Network).

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

About

3D Portfolio using Three.JS

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages