Skip to content

MannuVilasara/me

Repository files navigation

Portfolio Website - Manpreet Singh

A modern, responsive portfolio website built with Next.js 15, TypeScript, and Tailwind CSS. Features real-time Discord status, GitHub activity, blog posts, and project showcases.

✨ Features

  • Modern Design: Clean, responsive UI with dark/light theme support
  • Real-time Status: Live Discord status and Spotify now playing integration
  • Blog System: MDX-powered blog with syntax highlighting
  • Project Showcase: Dynamic project gallery with live links
  • GitHub Integration: Latest commit activity and GitHub calendar
  • Contact Form: Direct messaging system
  • Auto-labeling: GitHub Actions workflow for PR auto-labeling
  • Performance Optimized: Built with Next.js 15 and Turbopack

🚀 Tech Stack

Frontend

  • Framework: Next.js 15 (App Router)
  • Language: TypeScript
  • Styling: Tailwind CSS v4
  • UI Components: Radix UI primitives
  • Animations: Framer Motion
  • Icons: Tabler Icons, React Icons, Lucide React
  • Theme: next-themes for dark/light mode

Backend & APIs

  • API Routes: Next.js API routes
  • Data Fetching: SWR for real-time updates
  • Form Handling: React Hook Form with Zod validation
  • Content: MDX for blog posts

Development Tools

  • Package Manager: pnpm
  • Linting: ESLint 9
  • Formatting: Prettier
  • Type Checking: TypeScript 5
  • Build Tool: Turbopack

🗄️ Guestbook Setup (Vercel KV)

The guestbook uses Vercel KV (Redis) for persistent storage. To set it up:

  1. Install Vercel CLI (if not already installed):

    npm i -g vercel
  2. Create a KV database:

    vercel kv:create
  3. Get your KV connection details:

    vercel kv:ls
  4. Add environment variables to Vercel:

    • Go to your Vercel dashboard → Project Settings → Environment Variables
    • Add the KV variables that were displayed after vercel kv:create

The guestbook data will now persist across deployments! 🎉

🛠️ Scripts

  • pnpm dev - Start development server with Turbopack
  • pnpm build - Build for production
  • pnpm start - Start production server
  • pnpm lint - Run ESLint
  • pnpm format - Format code with Prettier

📁 Project Structure

src/
├── app/                    # Next.js app router
│   ├── api/               # API routes
│   ├── blog/              # Blog pages
│   ├── projects/          # Projects page
│   └── about/             # About page
├── components/            # React components
│   ├── ui/                # Shadcn/ui components
│   └── myComponents/      # Custom components
├── content/               # MDX blog posts
├── data/                  # Static data files
├── lib/                   # Utility functions
└── styles/                # Global styles

🎨 Key Components

  • Activities: Real-time GitHub activity feed
  • Discord: Live Discord status integration
  • NowPlaying: Spotify currently playing track
  • MessageBox: Contact form with validation
  • TechStack: Animated technology showcase
  • ProgressBar: Page loading indicator

🌐 API Endpoints

  • /api/get-discord-status - Fetch Discord user status
  • /api/latest-commit - Get latest GitHub commit
  • /api/now-playing - Spotify currently playing
  • /api/send-message - Contact form submission

📝 Content Management

Blog posts are written in MDX format and stored in the src/content/ directory. Each post includes:

  • Frontmatter metadata
  • Syntax highlighting with Shiki
  • Custom MDX components
  • Automatic sitemap generation

🔧 Customization

  1. Personal Information: Update src/data/metadata.ts
  2. Projects: Modify src/data/projects.ts
  3. Tech Stack: Edit src/data/techstack.tsx
  4. Styling: Customize Tailwind config and global styles
  5. Components: Add or modify components in src/components/

🚀 Deployment

The site is optimized for deployment on Vercel:

  1. Push to GitHub
  2. Connect repository to Vercel
  3. Configure environment variables
  4. Deploy automatically on push to main branch

Deploy with Vercel

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. The repository includes auto-labeling for PRs via GitHub Actions.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🔗 Links


Built with ❤️ by Manpreet Singh

⭐ Star this repo🐛 Report Bug💡 Request Feature