A stunning, fully responsive dark-mode portfolio website built with React, Vite, Framer Motion, and TailwindCSS. Features smooth animations, glassmorphism design, and a modern aesthetic.
- π¨ Modern Dark Theme with glassmorphism effects
- β‘ Smooth Animations using Framer Motion
- π± Fully Responsive - works on mobile, tablet, and desktop
- π Neon Accents with blue/purple/cyan color scheme
- π― Sticky Navigation with active section highlighting
- π Animated Progress Bar while scrolling
- πͺ Parallax Hero Section with floating tech icons
- β¨ Particle Background effects
- π§ EmailJS Integration for contact form
- π Horizontal Carousel for certifications
- π Scroll to Top button
- π« Smooth Page Transitions
- π Preloader Animation
- React 18 - UI library
- Vite - Build tool
- TailwindCSS - Styling
- Framer Motion - Animations
- React Icons - Icon library
- EmailJS - Email service
- React Intersection Observer - Scroll animations
portfolio/
βββ public/
βββ src/
β βββ components/
β β βββ Navbar.jsx
β β βββ Hero.jsx
β β βββ About.jsx
β β βββ Skills.jsx
β β βββ Projects.jsx
β β βββ Certifications.jsx
β β βββ Contact.jsx
β β βββ Footer.jsx
β β βββ Preloader.jsx
β β βββ ScrollToTop.jsx
β β βββ ParticleBackground.jsx
β βββ App.jsx
β βββ main.jsx
β βββ index.css
βββ index.html
βββ package.json
βββ tailwind.config.js
βββ postcss.config.js
βββ vite.config.js
Make sure you have the following installed:
- Node.js (v16 or higher)
- npm or yarn
-
Navigate to the project directory:
cd portfolio -
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Open your browser: The app will be running at
http://localhost:3000
Update Hero Section (src/components/Hero.jsx):
// Change your name
<span className="gradient-text">Your Name</span>
// Change subtitle
<h2>Your Title | Your Tagline</h2>
// Change description
<p>Your personal description...</p>
// Replace placeholder image
<img src="/path-to-your-image.jpg" alt="Your Name" />Edit About Me (src/components/About.jsx):
// Update introduction paragraphs
<p className="text-gray-300 leading-relaxed mb-6">
Your introduction...
</p>
// Update skills array
const skills = [
'Your Skill 1', 'Your Skill 2', // ... add your skills
];
// Update timeline
const timeline = [
{
icon: FaGraduationCap,
title: 'Your Degree',
organization: 'Your University',
period: 'Year - Year',
type: 'education'
},
// ... add more entries
];Modify Skills (src/components/Skills.jsx):
const skillsData = [
{
name: 'Your Skill',
level: 90, // Proficiency level (0-100)
icon: FaReact, // Choose appropriate icon
color: '#61DAFB' // Icon color
},
// ... add more skills
];Add Your Projects (src/components/Projects.jsx):
const projects = [
{
title: 'Project Name',
description: 'Project description...',
image: '/path-to-project-image.jpg',
tags: ['React', 'Node.js', 'MongoDB'], // Tech stack
github: 'https://github.com/username/repo',
demo: 'https://your-demo-url.com',
color: 'from-blue-500 to-cyan-500' // Gradient color
},
// ... add more projects
];Update Certifications (src/components/Certifications.jsx):
const certifications = [
{
title: 'Certificate Name',
issuer: 'Issuing Organization',
date: 'Year',
image: '/path-to-certificate-image.jpg',
credentialUrl: 'https://credential-url.com'
},
// ... add more certificates
];Configure EmailJS (src/components/Contact.jsx):
- Sign up at EmailJS
- Create an email service
- Create an email template
- Get your credentials
- Update the code:
const serviceId = 'your_service_id';
const templateId = 'your_template_id';
const publicKey = 'your_public_key';Update contact information:
const contactInfo = [
{ icon: FaEnvelope, text: 'your.email@example.com', href: 'mailto:your.email@example.com' },
{ icon: FaPhone, text: '+1 (555) 123-4567', href: 'tel:+15551234567' },
{ icon: FaMapMarkerAlt, text: 'Your City, Country', href: null },
];Update social media links (in Navbar.jsx, Contact.jsx, Footer.jsx):
const socialLinks = [
{ icon: FaGithub, url: 'https://github.com/yourusername', label: 'GitHub' },
{ icon: FaLinkedin, url: 'https://linkedin.com/in/yourusername', label: 'LinkedIn' },
{ icon: FaTwitter, url: 'https://twitter.com/yourusername', label: 'Twitter' },
{ icon: FaInstagram, url: 'https://instagram.com/yourusername', label: 'Instagram' },
];Customize colors (tailwind.config.js):
colors: {
primary: '#0ea5e9', // Change primary color
secondary: '#8b5cf6', // Change secondary color
accent: '#06b6d4', // Change accent color
dark: {
100: '#1e1e2e', // Adjust dark shades
200: '#181825',
300: '#11111b',
}
}Add your resume PDF to the public folder and update the links:
<a href="/resume.pdf" download>
View Resume
</a>- Profile Photo: Replace in
src/components/Hero.jsx - Project Images: Add to
public/projects/folder - Certificate Images: Add to
public/certificates/folder
- Profile Photo: 400x400px (square)
- Project Images: 600x400px (3:2 ratio)
- Certificate Images: 400x300px (4:3 ratio)
# Create production build
npm run build
# Preview production build
npm run previewThe optimized files will be in the dist folder, ready for deployment.
npm install -g vercel
vercelnpm run build
# Drag and drop the 'dist' folder to Netlifynpm install gh-pages --save-dev
# Add to package.json:
# "homepage": "https://yourusername.github.io/portfolio"
# "scripts": {
# "predeploy": "npm run build",
# "deploy": "gh-pages -d dist"
# }
npm run deploy- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
This project is open source and available under the MIT License.
Contributions, issues, and feature requests are welcome!
- Use high-quality images for better visual appeal
- Keep project descriptions concise but informative
- Update content regularly to showcase new work
- Test on multiple devices before deploying
- Optimize images for faster loading
Issue: Module not found errors
# Solution: Reinstall dependencies
rm -rf node_modules package-lock.json
npm installIssue: EmailJS not working
# Solution: Check your EmailJS credentials and ensure they're correctIssue: Build fails
# Solution: Check for syntax errors and missing dependencies
npm run build -- --debugIf you need help, feel free to:
- Open an issue
- Contact me via the contact form
- Reach out on social media
Made with β€οΈ using React + Tailwind + Framer Motion
Happy Coding! π