Welcome to my personal developer portfolio built using React + Vite. This portfolio showcases my projects, skills, resume, and contact options with a sleek UI, animations, and mobile-first responsive layout.
- ⚛️ Built with React + Vite for blazing-fast performance
- 🎨 Responsive & minimal design with CSS Modules
- 🧠 Framer Motion animations for smooth transitions
- 💼 Categorized Projects with hover tilt and live/demo links
- 📊 Circular skill progress bars with icons
- 📎 Resume download and display integration
- 📬 Contact form powered by EmailJS
- 🌐 Progressive Web App (PWA) support with custom splash screen
- 🔍 SEO Optimized with Open Graph and meta tags
- 🌓 (Optional) Dark mode support (commented out for now)
- 🧭 Sidebar navigation with scroll-based active section highlight
- 📱 Fully mobile-responsive design
my-portfolio/
├── public/
│ ├── assets/
│ │ ├── img/ # Favicon and splash icons
│ │ └── projects/ # Project banners (optional if imported via import)
│ ├── manifest.webmanifest # PWA config
│ └── robots.txt # SEO crawling rules
├── src/
│ ├── assets/ # Static assets (images, fallback, etc.)
│ ├── components/ # All portfolio sections as components
│ │ ├── About.jsx
│ │ ├── Contact.jsx
│ │ ├── Hero.jsx
│ │ ├── Projects.jsx
│ │ ├── Resume.jsx
│ │ ├── SideNav.jsx
│ │ └── Skills.jsx
│ ├── styles/ (optional) # If separating global or shared styles
│ ├── App.jsx # Main app entry
│ └── main.jsx # Root file for ReactDOM render
├── .eslintrc # Lint config
├── package.json
├── vite.config.js
└── README.md
- Frontend: React, Vite
- Styling: CSS Modules, Bootstrap Icons, React Icons
- Animation: Framer Motion
- Contact Form: EmailJS
- PWA:
vite-plugin-pwa
- SEO:
react-helmet-async
git clone https://github.com/devayanm/portfolio.git
cd portfolio
npm install
Use
--legacy-peer-deps
if you face any dependency resolution error.
npm run dev
npm run build
This portfolio supports PWA with:
- Offline access
- Add to Home screen
- Custom splash screen and icon set
Ensure all icons and
manifest.webmanifest
are placed correctly under/public
and configured viavite.config.js
.
Optimized using react-helmet-async
with:
- Page title, description, author
- Open Graph for social sharing
- Google site verification
- Robots directives for crawlers
The Contact form is powered by EmailJS. Configure your EmailJS credentials in the component or .env
for production use.
- Icons by React Icons
- Hosting via Vercel
- Animation via Framer Motion
- Email form via EmailJS
- Favicons via Favicon.io
This project is licensed under the Devayan Attribution-Only License — free to use with credit.
© 2025 Devayan Mandal
Made with ❤️ by Devayan Mandal