A fully functional macOS-style portfolio website with authentic desktop environment, window management, interactive terminal, and background music player. Built with Next.js, TypeScript, and Tailwind CSS.
- Desktop Environment: Complete with wallpaper, menu bar, dock, and desktop icons
- Window Management: Fully resizable and draggable windows with macOS-style controls
- Menu Bar: Live clock, system indicators, and user profile
- Dock: Animated app launcher with hover effects and running app indicators
- Context Menu: Right-click desktop for quick actions
- Keyboard Shortcuts Guide: Semi-transparent guide showing all available shortcuts
- Mobile Support: iOS-style interface for mobile devices with full-screen apps
- ๐ Resume - Enhanced resume with skill cards and tech icons
- ๐ Achievements - Timeline of accomplishments and awards
- ๐ Calendar - Event management system with multiple view modes
- ๐ผ Experience - Professional work history timeline
- ๐ Projects - Detailed project showcase with tech stacks
- ๐ Files - Quick access to social profiles and important links
- โก Terminal - Fully functional bash-like terminal with custom commands
- ๐ค About Me - Personal information and system details
- ๐ CP Stats - Competitive programming statistics and achievements
- Music Player: Full-featured music player with play/pause, skip, and volume controls
- Multiple Tracks: Support for multiple background music files
- Volume Control: Adjustable volume with mute functionality
- Track Information: Display track titles and descriptions
- Seek Control: Jump to any part of the current track
- Custom Commands: 30+ portfolio-specific commands with proper error handling
- Auto-completion: Tab completion for all commands
- Command History: Navigate with arrow keys
- Colored Output: ANSI color support for beautiful formatting
- Interactive Features: Real-time system information
- macOS Terminal Font: Authentic SF Mono font styling
- Enhanced Neofetch: Custom ASCII art displaying "ANIKET" elegantly
- Keyboard Shortcuts:
Cmd/Ctrl + W: Close active windowCmd/Ctrl + M: Minimize active windowCmd/Ctrl + Q: Close all windowsCmd/Ctrl + H: Minimize all windowsCmd/Ctrl + 1-8: Quick launch appsCmd/Ctrl + K: Open Spotlight searchCmd/Ctrl + K: Open Spotlight search
- Window Snapping: Drag windows to screen edges
- Fullscreen Mode: Double-click window header or use green button
- Multi-window Support: Open multiple instances of different apps
- Fully Resizable Windows: Drag window edges and corners to resize
- Smooth Animations: macOS-style transitions and hover effects
- Mobile Support: Full iOS-style interface for mobile devices
- Mobile Responsive: iOS-style interface for mobile devices
- Framework: Next.js 14 with App Router
- Language: TypeScript
- Styling: Tailwind CSS
- UI Components: shadcn/ui
- Icons: Lucide React
- State Management: React Hooks (useState, useCallback, useRef)
- Fonts: SF Pro Display and SF Mono for authentic macOS styling
- Node.js 18+
- npm or yarn
-
Clone the repository ```bash git clone https://github.com/yourusername/macos-portfolio.git cd macos-portfolio ```
-
Install dependencies ```bash npm install
yarn install ```
-
Run the development server ```bash npm run dev
yarn dev ```
-
Open your browser Navigate to http://localhost:3000
-
Create audio directory
mkdir public/audio
-
Add your audio files Place your audio files in
public/audio/with names like:audio1.mp3audio2.mp3audio3.mp3- etc.
-
Update music configuration Edit
data/music-config.jsonto add your tracks:{ "audioFiles": [ { "filename": "audio1.mp3", "title": "Your Song Title", "description": "Song description" } ], "defaultVolume": 0.3, "autoPlay": false }
The data/music-config.json file should follow this structure:
{
"audioFiles": [
{
"filename": "string - The actual filename in public/audio/",
"title": "string - Display name for the track",
"description": "string - Brief description of the track"
}
],
"defaultVolume": "number - Default volume (0.0 to 1.0)",
"autoPlay": "boolean - Whether to auto-play on load"
}To change the number of audio files (k):
- Add/remove audio files from
public/audio/ - Update the
audioFilesarray indata/music-config.json - The system automatically detects the number of available tracks
- MP3 (recommended)
- WAV
- OGG
- M4A
Edit data/calendar-events.json to add your events:
{
"events": [
{
"id": "unique-id",
"title": "Event Title",
"date": "YYYY-MM-DD",
"startTime": "HH:MM",
"endTime": "HH:MM",
"importance": "low|medium|high",
"reachable": true|false,
"location": "Event Location",
"description": "Event description",
"category": "work|competitive|deadline|personal"
}
]
}- id: Unique identifier for the event
- title: Event name/title
- date: Event date in YYYY-MM-DD format
- startTime/endTime: Time in HH:MM format (24-hour)
- importance: Priority level (affects visual styling)
- reachable: Whether you can be contacted during this event
- location: Where the event takes place
- description: Additional details about the event
- category: Event type for categorization and icons
Edit data/portfolio-data.ts to customize your portfolio:
```typescript export const portfolioData: PortfolioData = { basics: { name: "Your Name", tagline: "Your Professional Title", location: "Your Location", email: "your.email@example.com", phone: "+1-234-567-8900", photo: "/path/to/your/photo.jpg" }, // ... rest of your data } ```
Update the background in components/desktop.tsx:
```typescript
style={{
backgroundImage: `url('/your-wallpaper.jpg')`,
backgroundSize: "cover",
backgroundPosition: "center",
}}
```
- Add your photo to
public/images/ - Update the photo path in
portfolio-data.ts
Customize dock icons in components/dock.tsx:
```typescript
const dockApps = [
{ type: "resume", title: "Resume", icon: "๐", color: "bg-gradient-to-br from-blue-400 to-blue-600" },
// Change icons and colors here
]
```
The music player includes:
- Play/Pause controls
- Previous/Next track navigation
- Volume control with mute
- Seek bar for jumping to specific times
- Track information display
- Playlist management
Access the music player through:
- Quick Settings panel (gear icon in menu bar)
- Click "Music Player" โ "Open"
-
Add command to available commands list in
components/apps/terminal-app.tsx: ```typescript const availableCommands = [ // existing commands... 'yournewcommand' ] ``` -
Implement command logic in the
executeCommandfunction: ```typescript case "yournewcommand": setHistory((prev) => [ ...prev, "\x1b[33mYour command output\x1b[0m", "", ]) break ```
-
Create app component in
components/apps/: ```typescript // components/apps/your-app.tsx export default function YourApp({ data }: { data: PortfolioData }) { return ({/* Your app content */}) } ``` -
Add app type to
types/portfolio.ts: ```typescript export type AppType = | "resume" | "achievements" | "portfolio" | "experience" | "projects" | "files" | "terminal" | "about" | "yourapp" ``` -
Register app in
components/dock.tsxandcomponents/window-manager.tsx
Update colors in app/globals.css:
```css
:root {
--primary: your-color;
--secondary: your-color;
/* ... other color variables */
}
```
Modify window appearance in components/window.tsx:
```typescript
className={`
absolute bg-white/95 backdrop-blur-md rounded-lg shadow-2xl
// Add your custom classes
`}
```
``` macos-portfolio/ โโโ app/ โ โโโ globals.css # Global styles and CSS variables โ โโโ layout.tsx # Root layout component โ โโโ page.tsx # Main page component โโโ components/ โ โโโ apps/ # Individual application components โ โ โโโ resume-app.tsx โ โ โโโ terminal-app.tsx โ โ โโโ ... โ โโโ ui/ # shadcn/ui components โ โโโ desktop.tsx # Main desktop environment โ โโโ dock.tsx # macOS-style dock โ โโโ menu-bar.tsx # Top menu bar โ โโโ window.tsx # Window management component โ โโโ window-manager.tsx # Window state management โโโ data/ โ โโโ portfolio-data.ts # Your portfolio data โโโ types/ โ โโโ portfolio.ts # TypeScript type definitions โโโ public/ โโโ images/ # Static images and assets ```
| Shortcut | Action |
|---|---|
Cmd/Ctrl + W |
Close active window |
Cmd/Ctrl + M |
Minimize active window |
Cmd/Ctrl + Q |
Close all windows |
Cmd/Ctrl + H |
Minimize all windows |
Cmd/Ctrl + 1-8 |
Quick launch apps (1=Resume, 2=Achievements, etc.) |
Cmd/Ctrl + K |
Open Spotlight search |
Tab |
Auto-complete terminal commands |
โ/โ |
Navigate terminal command history |
Esc |
Close terminal suggestions |
Right Click |
Desktop context menu |
Double Click |
Fullscreen window |
help- Show all available commandsclear- Clear terminal screenneofetch- Display system information with ASCII artdate- Show current date and timeuptime- Show system uptimehistory- Show command history
resume- Display resume informationachievements- List achievements and awardsprojects- Show project portfolioexperience- Display work experiencesocials- Show social media linksabout- Show personal information
ls- List available sectionswhoami- Display current userpwd- Show current directorycat <file>- Display file contentsecho <message>- Display message
Use ANSI color codes in terminal output:
\\x1b[31m- Red\\x1b[32m- Green\\x1b[33m- Yellow\\x1b[34m- Blue\\x1b[35m- Magenta\\x1b[36m- Cyan\\x1b[37m- White\\x1b[0m- Reset
- Push your code to GitHub
- Connect your repository to Vercel
- Deploy automatically
- Build the project:
npm run build - Deploy the
outfolder to Netlify
- Add to
next.config.js: ```javascript /** @type {import('next').NextConfig} */ const nextConfig = { output: 'export', trailingSlash: true, images: { unoptimized: true } } ``` - Build and deploy:
npm run build
- Fork the repository
- Create your feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by macOS Big Sur design language
- Built with Next.js
- UI components from shadcn/ui
- Icons from Lucide
If you have any questions or need help customizing your portfolio:
- ๐ง Email: your.email@example.com
- ๐ Issues: GitHub Issues
- ๐ฌ Discussions: GitHub Discussions
โญ Star this repository if you found it helpful! ```
- โ Fully resizable and draggable windows
- โ Enhanced terminal with 30+ commands and proper error handling
- โ Keyboard shortcuts support
- โ Context menu functionality
- โ Auto-completion in terminal
- โ ANSI color support
- โ Window snapping and fullscreen mode
- โ Background music system with full player controls
- โ macOS-authentic fonts (SF Pro Display, SF Mono)
- โ Enhanced neofetch with custom "ANIKET" ASCII art
- โ Improved dark mode support
- โ Fixed quick settings panel styling
- โ Keyboard shortcuts guide
- โ Enhanced resume with skill cards and tech icons
- โ Clickable achievement cards with external links
- โ Calendar app with event management
- โ Competitive programming stats dashboard
- โ Full mobile/iOS support with responsive design
- โ Improved dark mode across all components
- โ Initial macOS desktop environment
- โ Basic window management
- โ 8 portfolio applications
- โ Simple terminal interface ``` ```
Let's also add some additional innovative features: