๐ฅ๏ธ Web-OS Portfolio
March 4, 2026 ยท View on GitHub
A fully interactive Operating System-style portfolio hosted on GitHub Pages.
๐ Live Demo: pravin-python.github.io/Web-OS-Portfolio
A real desktop OS experience in the browser โ built with React, TypeScript, Zustand, and TailwindCSS v4. Drag windows, use the terminal, open apps, play games, and explore my work โ all without a backend.
โจ Features
๐๏ธ Desktop Environment
- Window Manager โ Draggable, resizable, minimizable, maximizable windows with macOS-style traffic light buttons
- Taskbar & Dock โ Running apps shown in taskbar with minimize/restore support
- System Tray โ Clock, notifications, and quick-access menu
- Right-click Context Menu โ Desktop-level actions
- Mobile Support โ Responsive layout with mobile orientation guard and popup
๐ฑ Installed Applications
| App | Route | Description |
|---|---|---|
/about | Developer profile โ skills, education, experience | |
/contact | Email, LinkedIn, GitHub, social links | |
/ai-predictor | ML model-powered interactive predictions | |
/model-logs | Model experiments and training logs | |
/datasets | Dataset viewer for ML experiments | |
/dsa-lab | Interactive Data Structures & Algorithms explorer with Python & Java code | |
/ml-lab | Machine Learning learning lab โ concepts, algorithms, visualizations | |
/security | URL/phishing detection, hashing, encryption tools | |
/terminal | Integrated CLI with OS commands (ls, cd, run snake, help, etc.) | |
/files | Virtual file system explorer (JSON-based) | |
/notes | Local notepad with localStorage persistence | |
/system-logs | Real-time OS event log viewer | |
/games/snake | Cyberpunk snake game with neon visuals | |
/games/tictactoe | Minimax algorithm AI opponent | |
/games/2048 | Classic 2048 sliding puzzle | |
/trash | Trash bin for deleted virtual files |
๐ ๏ธ Tech Stack
| Layer | Technology |
|---|---|
| Framework | React 19 + TypeScript |
| Build Tool | Vite |
| State Management | Zustand |
| Styling | TailwindCSS v4 |
| Routing | React Router v7 (BrowserRouter) |
| Window Interactions | react-rnd |
| Icons | Lucide React + Custom SVGs |
| Persistence | localStorage |
| Hosting | GitHub Pages |
๐ Live Deployment
URL: https://pravin-python.github.io/Web-OS-Portfolio
This app uses React Router BrowserRouter with clean paths (no #).
A custom public/404.html handles GitHub Pages SPA deep-link redirects, allowing direct URL access to any route like /about or /dsa-lab.
๐ฆ Local Development
1. Clone
git clone https://github.com/pravin-python/Web-OS-Portfolio.git
cd Web-OS-Portfolio
2. Install
npm install
3. Run
npm run dev
App runs at: http://localhost:5173/Web-OS-Portfolio/
๐ Build & Deploy
npm run build
Generates a dist/ folder. Deploy it to GitHub Pages with:
npm run deploy
Requires
gh-pagesand adeployscript inpackage.json.
๐ Project Structure
src/
โโโ apps/ # Individual applications (Terminal, Games, DSALab, MLLab, etc.)
โโโ core/ # OS core (appRegistry, appLauncher, state, device detection)
โ โโโ appRegistry.ts # All app definitions & routes
โ โโโ appLauncher.ts # App launch logic
โ โโโ state/ # Zustand stores (windows, notifications, etc.)
โโโ components/ # Shared UI components (Window, Taskbar, Dock, Tray, etc.)
โโโ layouts/ # DesktopLayout โ wraps all apps in the OS shell
โโโ router/ # OSRouter โ bridges URL changes to window management
โโโ hooks/ # Custom hooks (useDraggable, etc.)
โโโ data/ # Static JSON data (filesystem, projects, skills)
public/
โโโ svg/ # App icons (system/, apps/)
โโโ 404.html # GitHub Pages SPA redirect handler
โโโ manifest.json # PWA manifest
โโโ sitemap.xml # SEO sitemap
๐ No Backend Required
This is a 100% frontend-only static application.
- No server, no database, no API calls
- All data served from static JSON files
- State persisted via
localStorage - Deployable on any static host (GitHub Pages, Vercel, Netlify)
๐จโ๐ป Author
Pravin Prajapati โ Freelance Full-Stack Developer
Python ยท Java ยท AI Agent Development ยท Web Scraping ยท PHP eCommerce
- ๐ Portfolio
- ๐ผ LinkedIn
- ๐ GitHub
- ๐ง pravin.prajapati0126@gmail.com
๐ License
MIT License