A stunning, responsive portfolio website built with React, TypeScript, Node.js, and modern web technologies. Features smooth animations, a clean design, and a fully functional contact form.
- Modern React with TypeScript - Type-safe, maintainable code
- Styled Components - CSS-in-JS with theme support
- Framer Motion - Smooth animations and transitions
- Responsive Design - Mobile-first approach, works on all devices
- Interactive Navigation - Smooth scrolling and active states
- Dynamic Content - Sections for about, projects, skills, and contact
- Performance Optimized - Fast loading and smooth interactions
- Express.js API - RESTful endpoints for portfolio data
- Contact Form - Email functionality with Nodemailer
- Security Features - Helmet, CORS, rate limiting
- Error Handling - Comprehensive error management
- Environment Configuration - Secure configuration management
- Dark Theme - Modern dark color scheme
- Gradient Accents - Beautiful gradient elements
- Glass Effects - Modern glassmorphism design
- Smooth Animations - Page transitions and hover effects
- Interactive Elements - Engaging user interactions
- Node.js (v16 or higher)
- npm or yarn
-
Clone the repository
git clone https://github.com/yourusername/portfolio.git cd portfolio -
Install dependencies
# Install root dependencies npm install # Install client dependencies cd client npm install # Install server dependencies cd ../server npm install
-
Environment Setup
Create a
.envfile in theserverdirectory:NODE_ENV=development PORT=5000 FRONTEND_URL=http://localhost:3000 # Email Configuration (for contact form) EMAIL_USER=your-email@gmail.com EMAIL_PASS=your-app-password
-
Run the application
# From the root directory npm run devThis will start both the frontend (port 3000) and backend (port 5000) concurrently.
portfolio/
├── client/ # React frontend
│ ├── public/
│ ├── src/
│ │ ├── components/ # Reusable components
│ │ │ ├── Navbar/
│ │ │ ├── Hero/
│ │ │ ├── FeaturedProjects/
│ │ │ ├── Skills/
│ │ │ └── Footer/
│ │ ├── pages/ # Page components
│ │ │ ├── Home/
│ │ │ ├── About/
│ │ │ ├── Projects/
│ │ │ └── Contact/
│ │ ├── styles/ # Styled-components and theme
│ │ │ ├── GlobalStyles.ts
│ │ │ ├── theme.ts
│ │ │ └── styled.d.ts
│ │ ├── App.tsx
│ │ └── index.tsx
│ └── package.json
├── server/ # Node.js backend
│ ├── server.js # Main server file
│ ├── .env # Environment variables
│ └── package.json
├── package.json # Root package.json
└── README.md
Update the portfolio data in server/server.js:
- Personal details (name, title, bio, contact info)
- Skills and technologies
- Projects and experience
- Education background
Modify client/src/styles/theme.ts to customize:
- Colors and gradients
- Typography settings
- Spacing and layout
- Breakpoints
- Animations
Update the following components with your content:
Hero.tsx- Main landing sectionAbout.tsx- About page contentProjects.tsx- Project showcaseSkills.tsx- Skills and technologiesContact.tsx- Contact information
- React 18 - Latest React features
- TypeScript - Type safety and better development experience
- Styled Components - CSS-in-JS styling solution
- Framer Motion - Animation library
- React Router - Client-side routing
- React Icons - Icon library
- React Intersection Observer - Scroll-based animations
- Node.js - Runtime environment
- Express.js - Web framework
- Nodemailer - Email functionality
- Helmet - Security middleware
- CORS - Cross-origin resource sharing
- Express Rate Limit - Rate limiting
- dotenv - Environment variable management
To enable the contact form:
-
Gmail Setup
- Create an App Password in your Google Account
- Update
.envwith your credentials
-
Alternative Email Services
- Modify the transporter configuration in
server.js - Supports most email providers
- Modify the transporter configuration in
- Build the client:
cd client npm run build - Drag and drop the
client/buildfolder into the Netlify dashboard, or connect your repository and set the build command tonpm run buildand publish directory toclient/build.
- Deploy the
serverdirectory to a Node.js hosting service (e.g., Render, Railway). - Set environment variables in your hosting dashboard.
- Update CORS settings in your backend for your Netlify frontend URL.
Netlify is for frontend only. Deploy your backend separately, then update your frontend API URLs to point to your backend's deployed URL.
The portfolio is fully responsive and optimized for:
- Desktop - Full experience with all animations
- Tablet - Adapted layout and touch-friendly interactions
- Mobile - Compact design with mobile navigation
- Code Splitting - Lazy loading of components
- Optimized Images - Responsive image loading
- Minimal Dependencies - Lightweight bundle size
- Efficient Animations - Hardware-accelerated animations
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
- Design inspiration from modern portfolio trends
- Built with love and lots of coffee ☕
- Open source community for amazing tools and libraries
Made with ❤️ by [Your Name]
For questions or support, feel free to reach out!