A modern, responsive portfolio website built with React, featuring a comprehensive admin panel for content management. This project showcases full-stack development skills with Firebase backend and Cloudinary media management.
- Responsive Design: Mobile-first approach with Tailwind CSS
- Dark/Light Theme: Automatic theme switching with system preference detection
- Smooth Animations: Framer Motion powered animations and transitions
- SEO Optimized: Meta tags, structured data, and performance optimization
- Contact Form: Integrated contact system with email notifications
- Project Showcase: Dynamic project gallery with filtering and search
- Resume Download: PDF resume with professional formatting
- Secure Authentication: Firebase Auth with role-based access control
- Content Management: Dynamic content editing for all website sections
- Media Management: Cloudinary integration for image/file uploads
- Contact Management: View and respond to contact form submissions
- User Management: Admin user creation and permission management
- Rate Limiting: Login attempt protection (5 attempts, 15min lockout)
- Session Management: Secure session handling with timeout
- Input Validation: Comprehensive form validation and sanitization
- Error Handling: Graceful error handling with user-friendly messages
- Firebase Security Rules: Proper Firestore security configuration
- React 18 - Modern React with hooks and context
- React Router v6 - Client-side routing
- Tailwind CSS - Utility-first CSS framework
- Framer Motion - Animation library
- React Icons - Icon library
- React Toastify - Notification system
- Firebase Authentication - User authentication and management
- Firestore - NoSQL database for content and user data
- Cloudinary - Cloud media management and optimization
- Firebase Hosting - Static site hosting
- Create React App - React development environment
- PostCSS - CSS processing
- ESLint - Code linting
- Jest - Testing framework
PortFolio-WebSite/
βββ public/ # Static assets
βββ src/
β βββ admin/ # Admin panel components
β β βββ components/ # Admin UI components
β β βββ pages/ # Admin page components
β β βββ services/ # Admin services
β β βββ utils/ # Admin utilities
β βββ components/ # Shared UI components
β βββ context/ # React context providers
β βββ firebase/ # Firebase configuration
β βββ hooks/ # Custom React hooks
β βββ pages/ # Public website pages
β βββ services/ # API and external services
β βββ assets/ # Static assets
βββ scripts/ # Setup and utility scripts
βββ preview/ # Website preview images
- Node.js (v16 or higher)
- npm or yarn
- Firebase account
- Cloudinary account (optional)
-
Clone the repository
git clone https://github.com/dhruvpatel16120/PortFolio-WebSite.git cd PortFolio-WebSite
-
Install dependencies
npm install
-
Set up environment variables
cp env-template.txt .env
Fill in your Firebase and Cloudinary credentials in the
.env
file. -
Set up Firebase
npm run setup-firebase
-
Set up Cloudinary (optional)
npm run setup-cloudinary
-
Create admin user
npm run create-admin
-
Start development server
npm start
The website will be available at http://localhost:3000
Admin panel will be available at http://localhost:3000/admin
Create a .env
file in the root directory with the following variables:
# Firebase Configuration
REACT_APP_FIREBASE_API_KEY=your_api_key_here
REACT_APP_FIREBASE_AUTH_DOMAIN=your_project_id.firebaseapp.com
REACT_APP_FIREBASE_PROJECT_ID=your_project_id
REACT_APP_FIREBASE_STORAGE_BUCKET=your_project_id.appspot.com
REACT_APP_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
REACT_APP_FIREBASE_APP_ID=your_app_id
# Admin Configuration
REACT_APP_ADMIN_EMAIL=admin@yourdomain.com
REACT_APP_ADMIN_PASSWORD=YourSecurePassword123!
REACT_APP_ADMIN_ROLE=super_admin
# Cloudinary Configuration (Optional)
REACT_APP_CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name
REACT_APP_CLOUDINARY_UPLOAD_PRESET=portfolio_uploads
REACT_APP_CLOUDINARY_API_KEY=your_cloudinary_api_key
REACT_APP_CLOUDINARY_API_SECRET=your_cloudinary_api_secret
- Create a new Firebase project
- Enable Authentication (Email/Password)
- Create a Firestore database
- Set up Firebase Hosting
- Configure Firestore security rules
- Create a Cloudinary account
- Create an upload preset
- Configure CORS settings
- Set up folder structure
- Home (
/
) - Hero section, services, and call-to-action - About (
/about
) - Personal information and skills - Projects (
/projects
) - Portfolio showcase with filtering - Contact (
/contact
) - Contact form with validation - Resume (
/resume
) - Professional resume with download - 404 - Custom error page
- Dashboard (
/admin
) - Overview and quick actions - Content Management (
/admin/content
) - Edit website content - Contact Management (
/admin/contact
) - View and respond to submissions - Media Management (
/admin/media
) - Upload and manage media files
The project uses Tailwind CSS for styling. You can customize:
- Colors in
tailwind.config.js
- Theme variables in
src/index.css
- Component styles in individual component files
All content is managed through the admin panel or can be edited in:
src/pages/
- Page content and structuresrc/components/
- Reusable componentspublic/
- Static assets
- Add new pages in
src/pages/
- Create new components in
src/components/
- Extend admin functionality in
src/admin/
- Firebase Authentication with email/password
- Role-based access control
- Session management with timeout
- Rate limiting for login attempts
- Input validation and sanitization
- Secure API endpoints
- Environment variable protection
- Firebase security rules
- HTTPS enforcement
- Content Security Policy
- XSS protection
- CSRF protection
npm run build
firebase deploy
The project can be deployed to:
- Vercel
- Netlify
- GitHub Pages
- Any static hosting service
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- React - Frontend framework
- Firebase - Backend services
- Tailwind CSS - CSS framework
- Framer Motion - Animation library
- Cloudinary - Media management
For support and questions:
- Create an issue on GitHub
- Contact through the website contact form
- Email: [dhruvpatel16120@gmail.com]
Built with β€οΈ by Dhruv Patel
Full-Stack Developer & Digital Marketing Expert