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.
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.
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.
- 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
- Full-featured terminal with command history
- Navigate through projects using
gitcommands - Browse directories with
ls,cd, andcat - Interactive help system with
helpcommand - 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- macOS-inspired file browser
- Category-based project organization
- Project thumbnails and descriptions
- Hover tooltips with tech stack details
- Smooth navigation between categories
- Desktop, tablet, and mobile support
- Touch gestures for mobile devices
- Adaptive UI that scales beautifully
- Performance-optimized 3D rendering
- React 18 - UI library with hooks
- TypeScript - Type-safe development
- Vite - Lightning-fast build tool
- 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
- 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
- CSS3 - Modern styling with custom properties
- CSS Grid & Flexbox - Responsive layouts
- Custom Animations - Smooth transitions and effects
- ESLint - Code linting
- Git - Version control
- GitHub Pages - Deployment
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
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
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)
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
}
};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: "..." }
]
}- Node.js 18+ and yarn
- Modern browser with WebGL support
-
Clone the repository
git clone https://github.com/dimitriosgkegkas/portfolio.git cd portfolio -
Install dependencies
yarn install
-
Run development server
yarn dev
-
Open in browser
http://localhost:5173
yarn buildThe optimized production build will be in the dist/ directory.
-
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"] } }
-
Add to a branch:
branches: { "web-development": { projectIds: [..., "myProject"] } }
-
Create content component in
src/Components/ContentManager/Content/MyProject.tsx -
Add file system entry:
"~/portfolio/web-development/": [ { name: "myProject.md", isDir: false, content: "..." } ]
- Global styles:
src/index.css - Component styles: Colocated
.cssfiles - CSS variables: Defined in
index.cssfor easy theming
- β Chrome/Edge (latest)
- β Firefox (latest)
- β Safari (latest)
- β Mobile browsers (iOS Safari, Chrome Mobile)
Note: Requires WebGL support for 3D rendering.
- 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
This project is open source and available under the MIT License.
Dimitrios Gkegkas
- π§ Email: dimitrisgegas01@gmail.com
- πΌ LinkedIn: dimitris-gkegkas
- π Portfolio: https://dimitriosgkegkas.github.io/portfolio/
- 3D MacBook model inspired by Apple's design language
- Terminal emulation powered by xterm.js
- 3D rendering with Three.js and React Three Fiber
Made with β€οΈ and lots of β
β Star this repo if you like it!