Skip to content

DimitriosGkegkas/portfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

42 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ 3D Interactive Portfolio - Dimitrios Gkegkas

Live Demo React Three.js TypeScript

πŸ”— View Live Portfolio

An immersive 3D portfolio experience that combines the elegance of a MacBook Pro interface with the power of a terminal-based navigation system. This project showcases my journey as a Robotics Engineer through an interactive, git-inspired browsing experience.

Portfolio Preview

Interactive 3D MacBook interface with terminal-based navigation


πŸ‘¨β€πŸ’» About Me

I'm Dimitrios Gkegkas, a passionate Robotics Engineer with expertise in:

  • πŸ€– Autonomous Systems - Multi-robot coordination and SLAM
  • 🧠 AI/ML - Reinforcement Learning, Computer Vision, GANs
  • 🌐 Full-Stack Development - React, Three.js, Node.js
  • πŸŽ“ Academic Background - JEMARO Double Degree (France & Japan), NTUA

My work bridges the gap between cutting-edge research and real-world applications, from autonomous driving systems to cultural heritage digitization projects that serve 250k+ users.


πŸ’‘ Concept & Features

The Idea

This portfolio reimagines the traditional CV as an interactive 3D experience where users explore my work through a familiar yet engaging interface - a MacBook Pro with a functional terminal and Finder-like file browser.

Key Features

πŸ–₯️ 3D MacBook Interface

  • Realistic MacBook Pro 3D model with interactive screen
  • Smooth animations and camera movements
  • Responsive design that adapts to all screen sizes
  • Touch-optimized controls for mobile devices

⌨️ Git-Inspired Terminal

  • Full-featured terminal with command history
  • Navigate through projects using git commands
  • Browse directories with ls, cd, and cat
  • Interactive help system with help command
  • Clickable links and file paths
  • ANSI color support for beautiful output

Available Commands:

git checkout education        # View academic background
git checkout web-development  # Browse web projects
git checkout robotics-ai      # Explore robotics projects
ls                           # List files in current directory
cd [path]                    # Change directory
cat [file]                   # Read file contents
help                         # Show all commands
clear                        # Clear terminal

πŸ“ Finder Window

  • macOS-inspired file browser
  • Category-based project organization
  • Project thumbnails and descriptions
  • Hover tooltips with tech stack details
  • Smooth navigation between categories

πŸ“± Responsive Design

  • Desktop, tablet, and mobile support
  • Touch gestures for mobile devices
  • Adaptive UI that scales beautifully
  • Performance-optimized 3D rendering

πŸ› οΈ Tech Stack

Frontend Framework

  • React 18 - UI library with hooks
  • TypeScript - Type-safe development
  • Vite - Lightning-fast build tool

3D Graphics

  • Three.js - WebGL rendering engine
  • React Three Fiber - React renderer for Three.js
  • @react-three/drei - Useful helpers for R3F
  • GLTF/GLB Models - Optimized 3D assets with Draco compression

Terminal Emulation

  • xterm.js - Full-featured terminal emulator
  • xterm-addon-fit - Responsive terminal sizing
  • xterm-addon-web-links - Clickable link detection
  • Custom command parser and execution engine

Styling & UI

  • CSS3 - Modern styling with custom properties
  • CSS Grid & Flexbox - Responsive layouts
  • Custom Animations - Smooth transitions and effects

Development Tools

  • ESLint - Code linting
  • Git - Version control
  • GitHub Pages - Deployment

πŸ“‚ Project Structure

portfolio/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ Components/
β”‚   β”‚   β”œβ”€β”€ ContentManager/      # Dynamic content display system
β”‚   β”‚   β”‚   β”œβ”€β”€ Content/          # Individual project content components
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Education/    # Educational background components
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ WebDev/       # Web development projects
β”‚   β”‚   β”‚   β”‚   └── RoboticsAI/   # Robotics & AI projects
β”‚   β”‚   β”‚   β”œβ”€β”€ ContentManager.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Item.tsx          # Project item renderer
β”‚   β”‚   β”‚   └── StaticItemDiv.tsx # Static content container
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ Laptop/              # 3D MacBook model & scene
β”‚   β”‚   β”‚   β”œβ”€β”€ Laptop.tsx       # Main 3D scene component
β”‚   β”‚   β”‚   └── Laptop.css
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ Menu/                # Navigation menu system
β”‚   β”‚   β”‚   β”œβ”€β”€ EnterButton/     # Entry point button
β”‚   β”‚   β”‚   β”œβ”€β”€ MenuBar/         # Top menu bar
β”‚   β”‚   β”‚   └── ReturnButton/    # Back navigation
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ SceneManager/        # 3D scene orchestration
β”‚   β”‚   β”‚   β”œβ”€β”€ SceneManager.tsx # Scene state management
β”‚   β”‚   β”‚   β”œβ”€β”€ animations.times.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ ImageFadeMaterialDisplacementCover.tsx
β”‚   β”‚   β”‚   └── PaperScreen.tsx  # Screen texture renderer
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ UIManager/           # UI state & overlay management
β”‚   β”‚   β”‚   β”œβ”€β”€ UIManager.tsx
β”‚   β”‚   β”‚   └── UIManager.css
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ Windows/             # Window components
β”‚   β”‚   β”‚   β”œβ”€β”€ DraggableWindow/ # Base draggable window
β”‚   β”‚   β”‚   β”œβ”€β”€ FinderWindow/    # macOS-style file browser
β”‚   β”‚   β”‚   β”œβ”€β”€ Terminal/        # Terminal emulator
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Terminal.tsx
β”‚   β”‚   β”‚   β”‚   └── parts/
β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ commands/      # Command implementations
β”‚   β”‚   β”‚   β”‚       β”‚   β”œβ”€β”€ cat.ts     # File reading
β”‚   β”‚   β”‚   β”‚       β”‚   β”œβ”€β”€ cd.ts      # Directory navigation
β”‚   β”‚   β”‚   β”‚       β”‚   β”œβ”€β”€ clear.ts   # Clear screen
β”‚   β”‚   β”‚   β”‚       β”‚   β”œβ”€β”€ git.ts     # Git-like commands
β”‚   β”‚   β”‚   β”‚       β”‚   β”œβ”€β”€ help.ts    # Help system
β”‚   β”‚   β”‚   β”‚       β”‚   └── ls.ts      # List directory
β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ links/         # Link detection
β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ constants.tsx  # Terminal constants
β”‚   β”‚   β”‚   β”‚       └── welcome.ts     # Welcome message
β”‚   β”‚   β”‚   β”œβ”€β”€ VimeoVideo/      # Video player window
β”‚   β”‚   β”‚   └── ProjectTooltip/  # Project hover tooltips
β”‚   β”‚   β”‚
β”‚   β”‚   └── Light.tsx            # Scene lighting
β”‚   β”‚
β”‚   β”œβ”€β”€ Data/
β”‚   β”‚   └── portfolioData.ts     # Centralized data store
β”‚   β”‚                            # - Projects (single source of truth)
β”‚   β”‚                            # - Branches (categories)
β”‚   β”‚                            # - File system structure
β”‚   β”‚
β”‚   β”œβ”€β”€ utils/
β”‚   β”‚   └── asset.ts             # Asset loading utilities
β”‚   β”‚
β”‚   β”œβ”€β”€ App.tsx                  # Main application component
β”‚   β”œβ”€β”€ main.tsx                 # Application entry point
β”‚   └── index.css                # Global styles
β”‚
β”œβ”€β”€ public/                      # Static assets
β”‚   β”œβ”€β”€ macbook.glb              # 3D MacBook model
β”‚   β”œβ”€β”€ projects/                # Project images
β”‚   β”œβ”€β”€ CV.pdf                   # Resume
β”‚   └── ...
β”‚
β”œβ”€β”€ dist/                        # Production build
β”œβ”€β”€ package.json                 # Dependencies & scripts
β”œβ”€β”€ vite.config.ts              # Vite configuration
β”œβ”€β”€ tsconfig.json               # TypeScript configuration
└── README.md                   # This file

πŸ—οΈ Architecture & Design Patterns

Data Architecture

The portfolio uses a centralized data store pattern to eliminate redundancy:

// Single source of truth for all projects
projects: {
  projectId: {
    id: "projectId",
    name: "Project Name",
    description: "...",
    techStack: ["React", "Three.js"],
    category: "web-development",
    // ... other fields
  }
}

// Branches reference projects by ID
branches: {
  "web-development": {
    projectIds: ["project1", "project2", ...]
  }
}

Benefits:

  • βœ… Single source of truth - update once, reflect everywhere
  • βœ… Easy maintenance and consistency
  • βœ… Type-safe with TypeScript interfaces
  • βœ… Efficient data access through helper functions

Component Hierarchy

App
β”œβ”€β”€ SceneManager (3D scene state)
β”‚   └── Laptop (3D MacBook)
β”‚       └── PaperScreen (Screen content)
β”œβ”€β”€ UIManager (UI state)
β”‚   β”œβ”€β”€ Menu (Navigation)
β”‚   β”œβ”€β”€ Windows
β”‚   β”‚   β”œβ”€β”€ Terminal
β”‚   β”‚   └── FinderWindow
β”‚   └── ContentManager (Project display)
└── Light (3D lighting)

Terminal Command System

The terminal uses a command pattern with individual modules:

// Each command is a self-contained module
export const executeCommand = (
  cmd: string,
  args: string[],
  context: TerminalContext
) => {
  switch (cmd) {
    case 'git':
      return gitCommand(args, context);
    case 'ls':
      return lsCommand(args, context);
    // ... other commands
  }
};

File System Abstraction

The portfolio simulates a Unix-like file system:

fileSystem: {
  "~/portfolio/": [
    { name: "education", isDir: true },
    { name: "web-development", isDir: true },
    { name: "README.md", isDir: false, content: "..." }
  ]
}

πŸš€ Getting Started

Prerequisites

  • Node.js 18+ and yarn
  • Modern browser with WebGL support

Installation

  1. Clone the repository

    git clone https://github.com/dimitriosgkegkas/portfolio.git
    cd portfolio
  2. Install dependencies

    yarn install
  3. Run development server

    yarn dev
  4. Open in browser

    http://localhost:5173
    

Build for Production

yarn build

The optimized production build will be in the dist/ directory.


🎨 Customization

Adding New Projects

  1. Define the project in src/Data/portfolioData.ts:

    projects: {
      myProject: {
        id: "myProject",
        name: "My Awesome Project",
        title: "Short Title",
        description: "Project description",
        techStack: ["React", "Node.js"],
        tags: ["Web", "AI"],
        category: "web-development",
        hash: "my-project",
        component: "MyProject",
        icon: "πŸš€",
        thumbnails: ["/projects/my-project/1.jpg"]
      }
    }
  2. Add to a branch:

    branches: {
      "web-development": {
        projectIds: [..., "myProject"]
      }
    }
  3. Create content component in src/Components/ContentManager/Content/MyProject.tsx

  4. Add file system entry:

    "~/portfolio/web-development/": [
      { name: "myProject.md", isDir: false, content: "..." }
    ]

Styling

  • Global styles: src/index.css
  • Component styles: Colocated .css files
  • CSS variables: Defined in index.css for easy theming

πŸ“± Browser Support

  • βœ… Chrome/Edge (latest)
  • βœ… Firefox (latest)
  • βœ… Safari (latest)
  • βœ… Mobile browsers (iOS Safari, Chrome Mobile)

Note: Requires WebGL support for 3D rendering.


πŸ”§ Performance Optimizations

  • Draco Compression - 3D models compressed up to 90%
  • Code Splitting - Dynamic imports for faster initial load
  • Lazy Loading - Components loaded on demand
  • Optimized Assets - Compressed images and models
  • Responsive 3D - Adjusted quality based on device capabilities

πŸ“„ License

This project is open source and available under the MIT License.


πŸ“¬ Contact

Dimitrios Gkegkas


πŸ™ Acknowledgments


Made with ❀️ and lots of β˜•

⭐ Star this repo if you like it!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors