A highly interactive portfolio website that perfectly replicates the macOS/iPadOS experience in the browser. Built with modern web technologies to deliver a pixel-perfect desktop environment with draggable windows, a functional dock, and smooth animations.
This is an innovative portfolio website that transforms the traditional web experience into an immersive macOS-style desktop environment. Users can interact with various applications through resizable and draggable windows, navigate using a functional dock, and enjoy a complete desktop experienceโall within their browser.
- ๐ Authentic Lock Screen - Complete with a password entry system and animated helper cat (password:
meow) - ๐ฅ๏ธ Full Desktop Environment - Menu bar with system controls, date/time, and status indicators
- ๐ช Window Management System - Fully functional windows that can be dragged, resized, minimized, and maximized
- ๐ฏ Interactive Dock - macOS-style dock with app icons, hover effects, and active indicators
- ๐ Finder Window - Browse through portfolio content in a familiar Finder interface
- ๐ PDF Viewer - Built-in resume viewer using PDF.js
- ๐ฌ AI-Powered Messages - Real-time chat with AI responses powered by Groq, persistent conversation history
- ๐น FaceTime Simulation - Live video with real-time face mesh detection using MediaPipe
- ๐ค Siri Integration - Voice-like AI assistant interface with context-aware responses
- ๐จ Drag & Drop Icons - Reorganize desktop icons with smooth animations
- โจ๏ธ Keyboard Navigation - Full accessibility with keyboard shortcuts
- ๐ฑ Responsive Design - Adapts beautifully to different screen sizes
- React 19.2.0 - Latest React with improved performance and features
- TypeScript 5.9.3 - Type-safe development with strong typing
- Vite 7.2.4 - Lightning-fast build tool and dev server
- Tailwind CSS 3.4.19 - Utility-first CSS framework for rapid UI development
- PostCSS - CSS processing and transformations
- Zustand 5.0.9 - Lightweight state management for window states
- React Router DOM 7.10.1 - Client-side routing with protected routes
- Session Storage - Authentication state persistence
- @dnd-kit - Modern drag-and-drop toolkit for React
- react-rnd 10.5.2 - Resizable and draggable windows
- @szhsin/react-menu 4.5.1 - Context menu implementation
- react-pdf 10.2.0 - PDF viewing capabilities
- pdfjs-dist 5.4.449 - PDF.js library for rendering PDFs
- react-markdown 10.1.0 - Markdown parsing and rendering
- Groq API - Ultra-fast AI inference for Siri-like interactions
- MediaPipe Face Mesh - Real-time face detection for FaceTime simulation
- ESLint 9.39.2 - Code linting with TypeScript support
- Prettier 3.7.4 - Opinionated code formatting
- TypeScript ESLint 8.46.4 - TypeScript-specific linting rules
macos-themed-portfolio/
โโโ src/
โ โโโ components/ # Reusable UI components
โ โ โโโ Dock.tsx # macOS-style dock with app icons
โ โ โโโ MenuBar.tsx # Top menu bar with system controls
โ โ โโโ Window.tsx # Draggable/resizable window component
โ โ โโโ FinderWindow.tsx # File browser interface
โ โ โโโ IconGrid.tsx # Desktop icon grid with drag-drop
โ โ โโโ IconTile.tsx # Individual icon component
โ โ โโโ PasswordCat.tsx # Lock screen helper animation
โ โ โโโ PDFViewer.tsx # Resume/document viewer
โ โ โโโ SiriContent.tsx # AI chat interface (Siri)
โ โ โโโ MessagesContent.tsx # AI-powered iMessage-style chat
โ โ โโโ FaceTimeContent.tsx # Video call with face tracking
โ โ โโโ StickyNote.tsx # Sticky notes widget
โ โ โโโ Wallpaper.tsx # Dynamic wallpaper component
โ โโโ pages/ # Main page components
โ โ โโโ LockPage.tsx # Authentication screen
โ โ โโโ DesktopPage.tsx # Main desktop environment
โ โโโ lib/ # Utilities and services
โ โ โโโ window-manager.ts # Zustand store for window state
โ โ โโโ keyboard.ts # Keyboard shortcut handlers
โ โ โโโ groq-service.ts # AI service integration
โ โ โโโ constants.ts # App configurations & constants
โ โโโ styles/ # Global styles
โ โ โโโ globals.css # Global CSS rules
โ โ โโโ tokens.css # Design system tokens
โ โโโ assets/ # Images, icons, and static files
โ โโโ router.tsx # Route configuration
โ โโโ App.tsx # Root application component
โ โโโ main.tsx # Application entry point
โโโ public/
โ โโโ resume.md # Resume content in markdown
โโโ .github/
โ โโโ workflows/
โ โโโ deploy.yml # GitHub Actions CI/CD
โโโ vite.config.ts # Vite configuration
โโโ tailwind.config.js # Tailwind CSS configuration
โโโ tsconfig.json # TypeScript configuration
โโโ package.json # Project dependencies
- Node.js 18.x or higher
- npm or yarn package manager
- Groq API Key (free at console.groq.com)
-
Clone the repository
git clone https://github.com/ApoorvGit/macos-themed-portfolio.git cd macos-themed-portfolio -
Install dependencies
npm install
-
Set up environment variables
Create a
.envfile in the root directory:VITE_GROQ_API_KEY=your_groq_api_key_here
Get your free Groq API key from https://console.groq.com
-
Start development server
npm run dev
The app will be available at
http://localhost:5173
npm run dev # Start development server with hot reload
npm run build # Build for production (TypeScript + Vite)
npm run preview # Preview production build locally
npm run lint # Run ESLint to check code quality
npm run format # Format code with Prettier- Lock Screen - Users are greeted with a macOS-style lock screen
- Helper Cat - An animated cat walks across the screen revealing the password
- Password Entry - Enter the password (
meow) to unlock - Session Management - Authentication state is stored in
sessionStorage - Protected Routes - Desktop is only accessible after authentication
The window system is powered by Zustand for state management and react-rnd for interactions:
- State Storage - Window positions, sizes, z-index, and minimized state stored in Zustand
- Dragging - Windows can be dragged by their title bars
- Resizing - Resize handles on all corners and edges
- Minimize/Maximize - macOS-style traffic light controls
- Focus Management - Clicking a window brings it to the front (z-index management)
- Dock Integration - Minimized windows appear in the dock
Desktop icons use @dnd-kit for smooth drag-and-drop:
- Drag & Drop - Rearrange icons with mouse or touch
- Keyboard Navigation - Arrow keys for full accessibility
- Grid Snapping - Icons snap to a grid layout for alignment
- Visual Feedback - Hover effects and drag shadows
- Sortable - Maintains icon order across interactions
The Messages app provides an interactive chat experience powered by Groq AI:
- Real-time AI Responses - Instant replies powered by Groq's fast inference
- Conversation Persistence - Messages are saved to localStorage per user
- Unique User Sessions - Each visitor gets a unique ID for personalized conversations
- Typing Indicators - Visual feedback while AI is generating responses
- Markdown Support - Rich text formatting in messages with react-markdown
- Context Awareness - AI maintains conversation history for coherent discussions
- Auto-scroll - Automatic scrolling to latest messages
- Welcome Message - Friendly greeting on first visit
- iMessage-style UI - Authentic macOS Messages appearance with bubbles
Powered by Groq's ultra-fast AI inference:
- Natural Conversations - Chat with AI about portfolio, skills, projects
- Streaming Responses - Real-time response generation
- Context Aware - Maintains conversation history
- Fast Inference - Sub-second response times with Groq
Uses MediaPipe for real-time face mesh detection:
- Camera Access - Requests webcam permissions
- Face Detection - 468-point face mesh tracking
- Real-time Processing - 30+ FPS face tracking
- Visual Overlay - Displays face mesh points on video
This project includes GitHub Actions for automatic deployment:
- Push to main branch - Triggers automatic build and deployment
- GitHub Actions - Builds the project and deploys to GitHub Pages
- Environment Secrets - Securely injects API keys during build
Setup Instructions:
- Go to repository Settings โ Pages
- Under Source, select GitHub Actions
- Go to Settings โ Secrets and variables โ Actions
- Add repository secret:
VITE_GROQ_API_KEYwith your Groq API key - Push to main branch - deployment happens automatically
Live URL: https://apoorvgit.github.io/macos-themed-portfolio/
# Build the project
npm run build
# The dist/ folder contains the production build
# Deploy this folder to any static hosting serviceCompatible Hosting Services:
- โ GitHub Pages (automated with Actions)
- โ
Vercel (
vercel deploy) - โ
Netlify (drag & drop
dist/) - โ Cloudflare Pages
- โ AWS S3 + CloudFront
- โ Azure Static Web Apps
- Create component in
src/components/YourApp.tsx - Add window config in
src/lib/constants.ts:export const APPS = { yourApp: { id: 'your-app', title: 'Your App', icon: YourIcon, component: YourAppContent, } }
- Register in window manager (Zustand store)
- Add dock icon in
src/components/Dock.tsx
- Colors: Edit
tailwind.config.jsorsrc/styles/tokens.css - Wallpaper: Replace in
src/components/Wallpaper.tsxor add images tosrc/assets/ - Fonts: Update in
src/index.css - Animations: Modify transitions in
src/styles/globals.css
- Resume: Edit
public/resume.md(Markdown format) - About Info: Update Finder window content in components
- Messages: Modify
src/components/MessagesContent.tsx - Projects/Skills: Update content in respective components
Enter- Submit password / Open selected iconEscape- Cancel / Deselect iconsCmd/Ctrl + W- Close focused windowCmd/Ctrl + M- Minimize focused windowArrow Keys- Navigate desktop iconsTab- Navigate between focusable elements
Contributions are welcome! Please feel free to submit a Pull Request.
How to contribute:
- 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 and available under the MIT License.
Apoorv Mishra
- GitHub: @ApoorvGit
- Portfolio: Live Demo
- Email: apoorvmishra1000@gmail.com
- LinkedIn: https://www.linkedin.com/in/erapoorv/
- Inspired by Apple's macOS design language and Human Interface Guidelines
- React and Vite communities for excellent tooling and documentation
- All open-source library maintainers used in this project
- Groq for providing ultra-fast AI inference
- MediaPipe team for face detection technology
Made with โค๏ธ using React + TypeScript + Vite
If you found this project helpful, please consider giving it a โญ on GitHub!