A modern, responsive portfolio website built with React, Vite, and Node.js. Features dynamic content management, downloadable resume, contact form with email integration, and beautiful tech stack showcase.
- Responsive Design: Works perfectly on desktop, tablet, and mobile devices
- Dark Mode: Toggle between light and dark themes with smooth transitions
- Dynamic Content: Add/edit experience and certifications through admin panel
- Resume Download: One-click resume download functionality
- Contact Form: Integrated contact form with email notifications using Nodemailer
- Tech Stack Icons: Beautiful icons showcasing technical skills
- Admin Panel: Secure admin interface for content management
- Smooth Animations: Framer Motion animations for enhanced user experience
- Modern UI: Clean, professional design with Tailwind CSS
- React - UI library
- Vite - Build tool and development server
- Tailwind CSS - Utility-first CSS framework
- Framer Motion - Animation library
- React Icons - Icon library
- Axios - HTTP client
- Node.js - Runtime environment
- Express - Web framework
- Nodemailer - Email sending
- CORS - Cross-origin resource sharing
- Body Parser - Request body parsing
- Node.js (v14 or higher)
- npm or yarn
- Gmail account (for email functionality)
-
Clone the repository
git clone <repository-url> cd portfolio-app
-
Install dependencies
npm install
-
Environment Setup
- Copy
.env.exampleto.env - Update the following variables:
EMAIL_USER=your-email@gmail.com EMAIL_PASS=your-app-password PORT=5000 ADMIN_PASSWORD=your-admin-password
- Copy
-
Gmail Setup (for contact form)
- Enable 2-factor authentication on your Gmail account
- Generate an app password for the portfolio app
- Use the app password in the
EMAIL_PASSvariable
-
Resume Setup
- Place your resume PDF file in the
publicfolder - Name it
het-patel-resume.pdfor update the path inHero.jsx
- Place your resume PDF file in the
# Run both frontend and backend
npm start
# Or run separately
npm run dev # Frontend only (port 3000)
npm run server # Backend only (port 5000)npm run build
npm run server- Click the user icon in the navigation bar
- Enter the admin password (default:
admin123) - Manage experiences and certifications
GET /api/experiences- Get all experiencesGET /api/experiences/:id- Get single experiencePOST /api/experiences- Add new experiencePUT /api/experiences/:id- Update experienceDELETE /api/experiences/:id- Delete experience
GET /api/certifications- Get all certificationsGET /api/certifications/:id- Get single certificationPOST /api/certifications- Add new certificationPUT /api/certifications/:id- Update certificationDELETE /api/certifications/:id- Delete certification
POST /api/contact- Send contact form email
Update the following files with your information:
src/components/Hero.jsx- Name, title, social linkssrc/components/About.jsx- About section contentsrc/components/Contact.jsx- Contact informationsrc/components/Footer.jsx- Footer details
Built with ❤️ by Het Patel+ Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Babel for Fast Refresh
- @vitejs/plugin-react-swc uses SWC for Fast Refresh
If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the TS template for information on how to integrate TypeScript and typescript-eslint in your project.