Skip to content

Repository files navigation

Portfolio – Raza

πŸš€ Raza.me - Modern Developer Portfolio

React Vite Tailwind Firebase Framer Motion

A modern, blazing-fast, and feature-rich developer portfolio with Firebase integration, stunning animations, and a powerful blog CMS.

Features β€’ Tech Stack β€’ Quick Start β€’ Deployment β€’ License


πŸ“Έ Preview

Status License PRs

Vite React Tailwind CSS Framer Motion

Project Link: www.mohdrazakhan.me

✨ Features

🎨 Modern UI/UX

  • Sleek dark mode design
  • Smooth animations with Framer Motion
  • Fully responsive across all devices
  • Glassmorphism effects
  • Gradient accents

πŸ”₯ Blog CMS

  • Split-screen live preview editor
  • Firebase Storage image uploads
  • Markdown-style formatting
  • Draft/Publish system
  • Real-time Firestore sync

πŸ” Firebase Integration

  • Email/Password authentication
  • Firestore database
  • Cloud Storage for images
  • Real-time data updates
  • Secure admin dashboard

πŸ“Š Project Showcase

  • Dynamic project cards
  • Firebase Storage integration
  • Team/contributor tags
  • Tech stack labels
  • Status badges

🎯 Developer Tools

  • QR Code generator
  • Color palette tools
  • JSON formatter
  • Base64 encoder/decoder

⚑ Performance

  • Vite for lightning-fast builds
  • Optimized bundle size
  • Lazy loading
  • SEO optimized
  • PWA ready

πŸ› οΈ Tech Stack

Frontend

React Vite TailwindCSS Framer Motion

Backend & Services

Firebase Firestore Firebase Storage

Routing & Icons

React Router Lucide

Deployment

Vercel

πŸ“¦ Key Dependencies

{
  "react": "^19.0.0",
  "vite": "^7.1.4",
  "tailwindcss": "^3.4.17",
  "framer-motion": "^12.23.12",
  "firebase": "^12.4.0",
  "react-router-dom": "^7.3.0",
  "lucide-react": "^0.542.0"
}

Core Technologies:

  • βš›οΈ React 19 - Modern UI library with hooks
  • ⚑ Vite 7 - Next-generation frontend tooling
  • 🎨 Tailwind CSS 3 - Utility-first CSS framework
  • 🎭 Framer Motion 12 - Production-ready animation library
  • πŸ”₯ Firebase 12 - Backend as a service
  • 🧭 React Router 7 - Client-side routing
  • 🎯 Lucide Icons - Beautiful consistent icons

πŸš€ Quick Start

πŸ“‹ Prerequisites

Before you begin, ensure you have the following installed:

βš™οΈ Installation

# 1️⃣ Clone the repository
git clone https://github.com/mohdrazakhan/portfolio.git
cd portfolio

# 2️⃣ Navigate to project directory
cd portfolio

# 3️⃣ Install dependencies
npm install

# 4️⃣ Set up environment variables
cp .env.example .env
# Edit .env with your Firebase credentials

# 5️⃣ Start development server
npm run dev

πŸŽ‰ Your portfolio is now running at http://localhost:5173

πŸ”‘ Environment Setup

Create a .env file in the root directory:

VITE_FIREBASE_API_KEY=your_api_key_here
VITE_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_project.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
VITE_FIREBASE_APP_ID=your_app_id

πŸ’‘ Tip: Get these credentials from your Firebase Console β†’ Project Settings β†’ General


πŸ“ Project Structure

portfolio/
β”œβ”€β”€ πŸ“‚ public/                    # Static assets
β”‚   β”œβ”€β”€ favicon.ico
β”‚   β”œβ”€β”€ resume.pdf
β”‚   β”œβ”€β”€ _redirects              # SPA routing for Netlify
β”‚   └── images/
β”‚       └── preview/
β”œβ”€β”€ πŸ“‚ src/
β”‚   β”œβ”€β”€ πŸ“‚ assets/              # Images & icons
β”‚   β”‚   β”œβ”€β”€ icons/
β”‚   β”‚   └── images/
β”‚   β”œβ”€β”€ πŸ“‚ components/          # React components
β”‚   β”‚   β”œβ”€β”€ About.jsx
β”‚   β”‚   β”œβ”€β”€ Contact.jsx
β”‚   β”‚   β”œβ”€β”€ Footer.jsx
β”‚   β”‚   β”œβ”€β”€ Home.jsx
β”‚   β”‚   β”œβ”€β”€ Navbar.jsx
β”‚   β”‚   β”œβ”€β”€ Projects.jsx
β”‚   β”‚   β”œβ”€β”€ BlogSection.jsx
β”‚   β”‚   β”œβ”€β”€ RecentActivity.jsx
β”‚   β”‚   └── UI/
β”‚   β”‚       └── Card.jsx
β”‚   β”œβ”€β”€ πŸ“‚ context/             # React Context API
β”‚   β”‚   └── AuthContext.jsx    # Firebase authentication
β”‚   β”œβ”€β”€ πŸ“‚ data/                # Static data & config
β”‚   β”‚   β”œβ”€β”€ projects.js
β”‚   β”‚   β”œβ”€β”€ skills.js
β”‚   β”‚   β”œβ”€β”€ socials.js
β”‚   β”‚   └── activities.js
β”‚   β”œβ”€β”€ πŸ“‚ firebase/            # Firebase configuration
β”‚   β”‚   └── app.js
β”‚   β”œβ”€β”€ πŸ“‚ hooks/               # Custom React hooks
β”‚   β”‚   └── useTheme.js
β”‚   β”œβ”€β”€ πŸ“‚ pages/               # Page components
β”‚   β”‚   β”œβ”€β”€ Admin.jsx           # Admin dashboard
β”‚   β”‚   β”œβ”€β”€ Blog.jsx            # Blog CMS
β”‚   β”‚   β”œβ”€β”€ BlogPost.jsx        # Single post view
β”‚   β”‚   β”œβ”€β”€ OptiRiderDetail.jsx # Project detail
β”‚   β”‚   β”œβ”€β”€ Tools.jsx           # Developer tools
β”‚   β”‚   └── Resources.jsx
β”‚   β”œβ”€β”€ πŸ“‚ styles/              # Global styles
β”‚   β”‚   β”œβ”€β”€ components.css
β”‚   β”‚   └── globals.css
β”‚   β”œβ”€β”€ App.jsx                 # Main app component
β”‚   β”œβ”€β”€ main.jsx                # Entry point
β”‚   └── index.css               # Base styles
β”œβ”€β”€ .env.example                # Environment variables template
β”œβ”€β”€ .gitignore
β”œβ”€β”€ index.html                  # HTML template
β”œβ”€β”€ package.json                # Dependencies
β”œβ”€β”€ tailwind.config.js          # Tailwind configuration
β”œβ”€β”€ postcss.config.js           # PostCSS configuration
β”œβ”€β”€ vite.config.js              # Vite configuration
└── vercel.json                 # Vercel deployment config

βš™οΈ Configuration

πŸ“ Content Customization

Edit the following files to personalize your portfolio:

File Purpose
src/data/projects.js Your project showcase
src/data/skills.js Technical skills & expertise
src/data/socials.js Social media links
src/data/activities.js Recent activities timeline

🎨 Styling

  • Theme colors: tailwind.config.js
  • Global styles: src/styles/globals.css
  • Component styles: src/styles/components.css

πŸ–ΌοΈ Assets

  • Replace public/images/profile.png with your photo
  • Update public/favicon.ico with your icon
  • Add your public/resume.pdf

πŸ”₯ Firebase Setup

1️⃣ Create Firebase Project

  1. Go to Firebase Console
  2. Click "Add project" and follow the wizard
  3. Enable Google Analytics (optional)

2️⃣ Enable Authentication

  1. In Firebase Console β†’ Authentication β†’ Get Started
  2. Click Email/Password β†’ Enable β†’ Save
  3. Add your admin user:
    • Go to Users tab β†’ Add user
    • Enter your email and password

3️⃣ Set up Firestore Database

  1. In Firebase Console β†’ Firestore Database β†’ Create database
  2. Start in Production mode
  3. Choose a location closest to your users
  4. Add security rules:
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /posts/{postId} {
      allow read: if true;
      allow write: if request.auth != null;
    }
  }
}

4️⃣ Enable Firebase Storage

  1. In Firebase Console β†’ Storage β†’ Get Started
  2. Start in Production mode
  3. Add security rules:
rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /projects/{fileName} {
      allow read: if true;
      allow write: if request.auth != null && request.resource.size < 5 * 1024 * 1024;
    }
    match /blog/{fileName} {
      allow read: if true;
      allow write: if request.auth != null && request.resource.size < 5 * 1024 * 1024;
    }
  }
}

5️⃣ Get Firebase Config

  1. Go to Project Settings (βš™οΈ icon)
  2. Scroll down to Your apps β†’ Web app (</> icon)
  3. Register app and copy the firebaseConfig object
  4. Add these values to your .env file

πŸš€ Deployment

Choose Your Platform

Deploy with Vercel Deploy to Netlify

🎯 Deploy to Vercel (Recommended)

Option 1: Via Dashboard (Easiest)

  1. Push your code to GitHub
  2. Go to Vercel Dashboard
  3. Click "Add New" β†’ "Project"
  4. Import your GitHub repository
  5. Configure:
    • Framework Preset: Vite
    • Build Command: npm run build
    • Output Directory: dist
  6. Add environment variables (all VITE_FIREBASE_* variables)
  7. Click "Deploy"

Option 2: Via CLI

# Install Vercel CLI
npm i -g vercel

# Login to Vercel
vercel login

# Deploy
vercel

# Follow the prompts and add environment variables

🌐 Deploy to Netlify

Via Dashboard

  1. Push your code to GitHub
  2. Go to Netlify Dashboard
  3. Click "Add new site" β†’ "Import an existing project"
  4. Connect to GitHub and select your repository
  5. Configure:
    • Build command: npm run build
    • Publish directory: dist
  6. Add environment variables
  7. Click "Deploy site"

Via CLI

# Install Netlify CLI
npm install -g netlify-cli

# Login
netlify login

# Deploy
netlify deploy --prod

βš™οΈ Important: Environment Variables

Add these in your deployment platform:

VITE_FIREBASE_API_KEY=your_value
VITE_FIREBASE_AUTH_DOMAIN=your_value
VITE_FIREBASE_PROJECT_ID=your_value
VITE_FIREBASE_STORAGE_BUCKET=your_value
VITE_FIREBASE_MESSAGING_SENDER_ID=your_value
VITE_FIREBASE_APP_ID=your_value

⚠️ Important: Set these for Production, Preview, and Development environments

πŸ“¦ Build Locally

# Build for production
npm run build

# Preview the build
npm run preview

The build output will be in the dist/ directory.


🎯 Usage Guide

πŸ‘¨β€πŸ’Ό Admin Dashboard

  1. Navigate to /admin
  2. Sign in with your Firebase credentials
  3. Manage content:
    • Projects: Add, edit, delete projects with Firebase Storage images
    • Blog: Write, edit, publish blog posts
    • Activities: Update your recent activities

πŸ“ Blog Editor Features

Formatting

  • Bold, Italic, Underline
  • Headings (H1, H2, H3)
  • Code blocks
  • Lists (ordered/unordered)
  • Links

Media

  • Image upload to Firebase Storage
  • Live preview
  • Drag & drop support
  • URL paste option

Publishing

  • Draft/Publish toggle
  • Real-time Firestore sync
  • Edit published posts
  • Delete posts

UI/UX

  • Split-screen editor
  • Live preview
  • Fullscreen mode
  • Syntax highlighting

🎨 Customization

Color Scheme

Edit tailwind.config.js:

module.exports = {
  theme: {
    extend: {
      colors: {
        primary: '#6366f1',    // Indigo
        secondary: '#8b5cf6',  // Purple
        accent: '#ec4899',     // Pink
      }
    }
  }
}

Animations

All animations use Framer Motion. Customize in component files:

const variants = {
  hidden: { opacity: 0, y: 20 },
  visible: { opacity: 1, y: 0 }
}

πŸ“Š Performance

Metric Score
⚑ Performance 95+
β™Ώ Accessibility 100
🎯 Best Practices 100
πŸ“± SEO 100

Lighthouse scores on production build

Optimization Features

  • βœ… Code splitting with Vite
  • βœ… Lazy loading images
  • βœ… Optimized bundle size (~275 KB gzipped)
  • βœ… Tree shaking
  • βœ… Modern browser targets
  • βœ… CSS purging with Tailwind
  • βœ… Preload critical assets

πŸ› Troubleshooting

Common Issues

White page after deployment

Solution:

  1. Check browser console for errors
  2. Verify all environment variables are set
  3. Ensure vercel.json has correct rewrites
  4. Check Firebase project is active
Firebase authentication errors

Solution:

  1. Verify Firebase credentials in .env
  2. Check Email/Password auth is enabled
  3. Ensure admin user is created
  4. Check Firestore security rules
Image upload not working

Solution:

  1. Check Firebase Storage is enabled
  2. Verify Storage security rules
  3. Ensure you're logged in as admin
  4. Check file size (max 5MB)
Build fails on Vercel/Netlify

Solution:

  1. Check build logs for specific errors
  2. Verify all dependencies in package.json
  3. Test build locally: npm run build
  4. Check Node.js version (18+)

πŸ“š Scripts

Command Description
npm run dev Start development server on port 5173
npm run build Build for production
npm run preview Preview production build
npm run lint Run ESLint (if configured)

🀝 Contributing

Contributions are welcome! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Commit Convention

feat: Add new feature
fix: Fix bug
docs: Update documentation
style: Format code
refactor: Refactor code
test: Add tests
chore: Update dependencies

πŸ“„ License

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

MIT License

Copyright (c) 2025 Mohd Raza Khan

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

πŸ‘¨β€πŸ’» Author

Mohd Raza Khan

GitHub LinkedIn Portfolio Email

Computer Science Engineering Student
Full Stack Developer | IoT Innovator | Open Source Enthusiast


πŸ™ Acknowledgments

  • React - The library for web and native user interfaces
  • Vite - Next generation frontend tooling
  • Tailwind CSS - A utility-first CSS framework
  • Framer Motion - Production-ready animation library
  • Firebase - App development platform
  • Lucide Icons - Beautiful & consistent icon toolkit
  • Vercel - Platform for frontend developers

⭐ Show Your Support

Give a ⭐️ if this project helped you!

πŸ“ˆ GitHub Stats

GitHub stars GitHub forks GitHub watchers


Made with ❀️ by Mohd Raza Khan

Happy Coding! πŸš€

- Push to `main` on GitHub. - In repo Settings β†’ Pages, set Source: β€œDeploy from a branch” or use an Actions workflow for Vite. - A typical Actions flow builds and publishes the `dist/` folder to `gh-pages`.
  1. Manual publish to gh-pages branch
  • Build locally, then publish the dist/ directory to a gh-pages branch using your preferred tool.

Alternatively, deploy to Netlify or Vercel β€” both work great with Vite projects.

For SPA deep-links (e.g., /projects/optirider or /blog/:id) make sure rewrites are enabled:

  • Vercel: see vercel.json in the repo.
  • Netlify: see public/_redirects with /* /index.html 200.

Blog + Admin (Firebase)

The blog editor is visible only when you are logged in (email/password) via Firebase Auth. Posts are stored in Firestore and support draft/publish.

1) Environment variables

Create a .env file in the project root and add your Firebase credentials:

VITE_FIREBASE_API_KEY=...
VITE_FIREBASE_AUTH_DOMAIN=...
VITE_FIREBASE_PROJECT_ID=...
VITE_FIREBASE_STORAGE_BUCKET=...
VITE_FIREBASE_MESSAGING_SENDER_ID=...
VITE_FIREBASE_APP_ID=...

Restart the dev server after changing .env.

2) Firebase setup

  • Enable Authentication β†’ Sign-in method β†’ Email/Password.
  • Create your admin user in Firebase Authentication Users.
  • Create a Firestore database in production mode.
  • Enable Firebase Storage for project image uploads.

Recommended Firestore security rules (adjust as needed):

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /posts/{postId} {
      allow read: if resource.data.published == true;
      allow read, write: if request.auth != null; // owner-only in UI
    }
  }
}

Recommended Storage security rules:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /projects/{fileName} {
      allow read: if true;
      allow write: if request.auth != null && request.resource.size < 5 * 1024 * 1024;
    }
    match /blog/{fileName} {
      allow read: if true;
      allow write: if request.auth != null && request.resource.size < 5 * 1024 * 1024;
    }
  }
}

With these rules, public visitors can read only published posts. Authenticated you (admin) can create, update, delete posts and see drafts.

3) Admin Panel Features

  • Projects Manager: Add, edit, delete projects with:

    • Firebase Storage image upload (drag-and-drop or paste URL)
    • Live image preview
    • Team/contributor support
    • Tech stack tags
    • Project status (Completed, In Progress, Planning)
    • Featured project toggle
    • Live demo and repo links
    • Automatic statistics dashboard
  • Blog Manager: Full-featured rich text editor with draft/publish states

  • Activities Manager: Recent updates and timeline

4) One-time migration from localStorage

If you previously created posts locally (older version), the app will import them into Firestore automatically the first time an authenticated admin opens the Blog page (if Firestore is empty). A local flag prevents duplicate imports.

Screenshots

Portfolio preview 1

Portfolio preview 2

Portfolio preview 3

Portfolio preview 4

Portfolio preview 5

License

This project is licensed under the ISC license.


Made with ❀️ using React, Vite, Tailwind CSS, and Framer Motion. ❀️ Mohd Raza Khan ❀️

About

Personal portfolio website showcasing real-world projects, innovations, and technical expertise in full-stack development, Flutter, IoT, and AI.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages