A modern, VS Code-inspired developer portfolio built with React 18 + TypeScript + Vite.
Live Demo β’ Report Bug β’ Request Feature
| Feature | Description |
|---|---|
| VS Code Theme | Dark/light mode with Atom One Dark inspired colors |
| macOS-style UI | Frosted glass effects, dock-style sidebar, modern tab bar |
| Responsive Design | Mobile-first design with collapsible navigation |
| Smooth Animations | Framer Motion powered transitions and hover effects |
| Feature | Description |
|---|---|
| Command Palette | Press βK (Mac) or Ctrl+K (Windows) to quick-navigate anywhere |
| Tab System | VS Code-style file tabs with drag-and-drop reordering |
| Smart Sidebar | Icon dock with tooltips and social links |
| Interactive 404 | Terminal-style 404 page with autocomplete navigation |
| Section | Description |
|---|---|
| Resume/Experience | Work history with filter by Work, Research, or All |
| Projects | Categorized portfolio with tech badges and GitHub links |
| Skills | Visual skill bars organized by category |
| Education | Academic background with coursework details |
| Timeline | Interactive career journey with animated milestones |
| GitHub Activity | Live stats, repos, and recent activity from GitHub API |
| Achievements | Certifications, awards, and accomplishments |
| Contact | Email (with copy button), LinkedIn, GitHub links |
| Feature | Description |
|---|---|
| JSON-Driven Content | All content loaded from JSON files - easy to customize |
| SEO Optimized | Meta tags, JSON-LD structured data, Open Graph support |
| Accessibility | Skip links, focus states, reduced motion support |
| Type-Safe | Full TypeScript coverage with strict mode |
| Testing | Vitest + React Testing Library setup |
| Category | Technology |
|---|---|
| Framework | React 18.3 |
| Build Tool | Vite 6.4 |
| Language | TypeScript 5.8 |
| UI Library | Material UI (MUI) 7.3 |
| Animations | Framer Motion 12.12 |
| Icons | FontAwesome 6.7 + MUI Icons |
| Routing | React Router 6.28 |
| Testing | Vitest 4.0 + React Testing Library |
| Linting | ESLint 9 + Prettier |
| Git Hooks | Husky + lint-staged |
- Node.js 18+
- pnpm (recommended) or npm
# Clone the repository
git clone https://github.com/GhazTools/PersonalWebsite.git
cd PersonalWebsite
# Install dependencies
pnpm install # or npm install
# Start development server
pnpm dev # or npm run devThe site will be available at http://localhost:5173
# Build
pnpm build # or npm run build
# Preview production build
pnpm previewpnpm test # Run all tests
pnpm test:watch # Watch modesrc/
βββ components/ # Reusable UI components
β βββ CommandPalette/ # βK quick navigation
β βββ Timeline/ # Interactive career timeline
β βββ InteractiveResume/# Resume with filtering
β βββ SEO/ # Meta tags & JSON-LD
β βββ ...
βββ views/ # Page-level components
β βββ ExperienceView/ # Resume/work experience
β βββ ProjectsView/ # Project portfolio
β βββ SkillsView/ # Skills showcase
β βββ EducationView/ # Education details
β βββ TimelineView/ # Career timeline
β βββ GitHubActivityView/
β βββ NotFoundView/ # Interactive 404 page
β βββ ...
βββ layouts/ # Layout components
β βββ Main/
β βββ components/
β βββ Header/ # Tab bar
β βββ LeftBar/ # Sidebar dock
β βββ StatusBar/# Bottom status bar
β βββ Explorer/ # File explorer panel
βββ data/ # JSON content files
β βββ json/
β βββ static.json # Site metadata
β βββ contact.json # Contact info
β βββ ...
βββ theme/ # Design tokens
β βββ colors.ts
β βββ fonts.ts
β βββ muiTheme.ts
βββ contexts/ # React contexts
β βββ ThemeContext.tsx # Dark/light mode
βββ hooks/ # Custom hooks
βββ models/ # TypeScript interfaces
βββ utils/ # Helper functions
βββ styles/ # Global CSS
βββ scrollbar.css
βββ accessibility.css
All content is driven by JSON files in src/data/json/:
| File | Content |
|---|---|
static.json |
Site title, description, greeting text |
contact.json |
Email, social links |
swe.json |
Work experience entries |
ba.json |
Education and academic info |
metadata.json |
Skills, projects, achievements |
- Create a new view in
src/views/YourView/index.tsx - Add the route in
src/data/index.tsx:{ name: "yourpage.ext", url: "/yourpage", icon: "icon-name", color: "#hexcolor", comp: () => <YourView />, }
- The page will automatically appear in the sidebar and command palette
Edit src/theme/colors.ts and src/theme/muiTheme.ts to customize the color scheme.
Edit src/data/json/contact.json to add your social profiles.
| Shortcut | Action |
|---|---|
βK / Ctrl+K |
Open command palette |
β / β |
Navigate suggestions |
Enter |
Select / Navigate |
Escape |
Close modal |
Tab |
Autocomplete (in 404 terminal) |
- Meta Tags: Title, description, keywords for each page
- Open Graph: Social sharing cards for LinkedIn, Twitter, Facebook
- JSON-LD: Structured data for search engines (Person + WebSite schemas)
- Sitemap:
public/sitemap.xmlfor search engine indexing - Robots.txt: Search engine crawling rules
- Skip to Content: Hidden link appears on Tab for keyboard users
- Focus Indicators: Visible focus states for all interactive elements
- Reduced Motion: Respects
prefers-reduced-motionpreference - High Contrast: Supports
prefers-contrast: high - Semantic HTML: Proper heading hierarchy and ARIA labels
- Keyboard Navigation: Full site navigable via keyboard
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is open source under the GPL-3.0 License. See COPYING for details.
- Original template: vscode-portfolio by Caglar Turali
- Icons: FontAwesome and MUI Icons
- Fonts: Ubuntu and Ubuntu Mono
Made with β€οΈ by Ghazanfar Shahbaz