- Overview
- Live Preview
- Screenshots
- Features
- Tech Stack
- Project Structure
- Installation
- Environment Variables
- Admin Dashboard
- Architecture
- API Overview
- Deployment
- Security
- Performance
- Future Roadmap
- Contributing
- License
- Author
This project is much more than a traditional personal portfolio.
It is a production-ready Portfolio CMS that allows complete website management through a secure Admin Dashboard.
Instead of editing source code whenever new projects, skills, education, or experiences need to be added, everything can be managed dynamically from the dashboard.
The application combines a modern frontend experience with a scalable backend architecture, making it suitable as both a professional portfolio and a reusable CMS template.
- Modern Responsive Design
- Light & Dark Theme
- GSAP Page Animations
- Framer Motion Transitions
- Three.js Interactive Background
- Particle Cursor Effects
- Mobile First Layout
- Smooth Scrolling
- Elegant Typography
Everything can be managed from the Admin Dashboard.
- Hero Section
- About
- Skills
- Projects
- Experience
- Education
- Certifications
- Resume
- Semester Details
- Contact Information
- Social Links
- SEO Settings
The project includes a complete CMS.
- Secure Login
- JWT Authentication
- CRUD Operations
- Image Upload
- Resume Upload
- Section Visibility Toggle
- Dynamic Ordering
- Dashboard Overview
- Contact Messages
- Media Management
Integrated Coding Profile
- Live LeetCode Statistics
- Problems Solved
- Contest Rating
- GraphQL Proxy
- Dynamic API Fetching
Visitors can directly send messages from the portfolio.
Features include
- Contact Form
- MongoDB Storage
- Nodemailer
- Resend Integration
- SendGrid Support
- Email Notifications
Cloudinary is used for
- Project Images
- Resume Upload
- Certificates
- Hero Images
- Media Assets
- JWT Authentication
- Password Hashing
- bcrypt.js
- Protected Admin Routes
- Environment Variables
- Secure File Uploads
- Authentication Middleware
- Route-based Code Splitting (React Lazy & Suspense)
- Optimized Asset Loading & Image Transformations via Cloudinary (Responsive
srcSets) - Backend API Caching (Edge cache headers for public data)
- Reduced Core Web Vitals (LCP/CLS) using preconnects and deferred scripts
- Dynamic XML Sitemap Generation (
/api/sitemap.xml) - Auto-generated SEO-friendly URL slugs for Projects
- Dynamic Meta Tags (Open Graph, Twitter Cards) via React Helmet Async
- Injected JSON-LD Structured Data (e.g.
SoftwareApplication&BreadcrumbListschemas)
| Technology | Purpose |
|---|---|
| React 18 | Component-Based UI Development |
| Vite | Fast Build Tool & Development Server |
| Tailwind CSS | Utility-First Styling |
| React Router DOM | Client-side Routing |
| Zustand | Lightweight Global State Management |
| Axios | API Communication |
| GSAP | Advanced Animations |
| Framer Motion | UI Motion & Transitions |
| Three.js | Interactive 3D Graphics |
| @react-three/fiber | React Renderer for Three.js |
| @react-three/drei | Three.js Helpers |
| Lucide React | Modern Icon Library |
| React Icons | Additional Icons |
| Technology | Purpose |
|---|---|
| Node.js | JavaScript Runtime |
| Express.js | REST API Framework |
| MongoDB | NoSQL Database |
| Mongoose | MongoDB ODM |
| JWT | Authentication |
| bcrypt.js | Password Encryption |
| Multer | File Upload Handling |
| Cloudinary | Cloud Media Storage |
| Streamifier | Buffer Stream Uploads |
| Nodemailer | Email Notifications |
| Resend | Email Delivery |
| SendGrid | Transactional Emails |
- MongoDB Atlas
- Cloudinary
- Git
- GitHub
- Postman
- VS Code
- Vercel
- npm
Visitor
│
▼
React + Vite Frontend
│
Axios REST API Requests
│
▼
Express.js REST Server
│
┌───────────────┼────────────────┐
▼ ▼ ▼
Authentication Cloudinary Contact API
│ │ │
▼ ▼ ▼
JWT Auth Image Uploads Email Services
│
▼
MongoDB Atlas
My-Portfolio
│
├── backend
│ ├── config
│ │ ├── db.js
│ │ └── cloudinary.js
│ │
│ ├── controllers
│ │ ├── authController.js
│ │ ├── projectController.js
│ │ ├── skillController.js
│ │ ├── contactController.js
│ │ └── ...
│ │
│ ├── middleware
│ │ ├── auth.js
│ │ ├── upload.js
│ │ └── errorHandler.js
│ │
│ ├── models
│ │ ├── User.js
│ │ ├── Project.js
│ │ ├── Skill.js
│ │ ├── Experience.js
│ │ ├── Education.js
│ │ ├── Certification.js
│ │ ├── SiteConfig.js
│ │ └── Contact.js
│ │
│ ├── routes
│ ├── utils
│ ├── uploads
│ └── server.js
│
├── frontend
│ ├── public
│ │
│ ├── src
│ │ ├── assets
│ │ ├── components
│ │ ├── pages
│ │ ├── services
│ │ ├── hooks
│ │ ├── store
│ │ ├── utils
│ │ ├── App.jsx
│ │ └── main.jsx
│ │
│ ├── vite.config.js
│ └── tailwind.config.js
│
├── assets
│
├── README.md
│
└── LICENSE
git clone https://github.com/Utkal9/My-Portfolio.gitcd My-PortfolioNavigate to backend
cd backendInstall dependencies
npm installCreate
.env
Add
PORT=5000
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_super_secret_key
JWT_EXPIRES_IN=7d
FRONTEND_URL=http://localhost:5173
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
MAIL_USER=your_email@gmail.com
MAIL_PASS=your_app_password
ADMIN_EMAIL=your_email@gmail.com
ADMIN_EMAIL_DEFAULT=your_email@gmail.com
ADMIN_PASSWORD_DEFAULT=Admin@123Run Backend
npm run devBackend runs at
http://localhost:5000
Open another terminal
cd frontendInstall packages
npm installCreate
.env.local
Add
VITE_API_URL=http://localhost:5000/apiRun
npm run devFrontend starts at
http://localhost:5173
| Variable | Description |
|---|---|
| PORT | Server Port |
| MONGO_URI | MongoDB Atlas Connection |
| JWT_SECRET | JWT Secret |
| JWT_EXPIRES_IN | Token Expiration |
| FRONTEND_URL | Allowed Frontend URL |
| CLOUDINARY_CLOUD_NAME | Cloudinary Cloud |
| CLOUDINARY_API_KEY | API Key |
| CLOUDINARY_API_SECRET | API Secret |
| MAIL_USER | Gmail Address |
| MAIL_PASS | App Password |
| ADMIN_EMAIL | Admin Email |
| ADMIN_EMAIL_DEFAULT | Default Admin |
| ADMIN_PASSWORD_DEFAULT | Default Password |
| Variable | Description |
|---|---|
| VITE_API_URL | Backend API URL |
npm run devStarts the development server using Nodemon.
npm startRuns the production server.
npm run devStarts the Vite development server.
npm run buildCreates a production build.
npm run previewPreviews the production build locally.
Database Used
- MongoDB Atlas
Collections
- Users
- Projects
- Skills
- Experience
- Education
- Certifications
- Semesters
- Contacts
- SiteConfig
The application automatically seeds the first administrator account using the credentials provided in the backend .env file when no admin user exists.
Unlike a traditional portfolio, this project includes a fully functional Content Management System (CMS) that enables administrators to update every major section of the website without modifying the source code.
After authentication, administrators gain access to a centralized dashboard where all portfolio content can be managed.
Manage
- Name
- Role
- Tagline
- Hero Description
- CTA Buttons
- Hero Image
- Resume Link
Complete CRUD operations
- Add Project
- Edit Project
- Delete Project
- Upload Hero Image Gallery & Video Demos
- Project Description & Rich Fields (Architecture, Metrics, Learnings)
- Technologies Used & Key Features
- Live Demo URL
- GitHub URL
- Auto-generated URL Slugs
- Featured Project Toggle
Manage
- Skill Name
- Category
- Skill Icon
- Proficiency
- Display Order
Manage
- University
- Degree
- Duration
- CGPA
- Description
Manage
- Company
- Position
- Employment Type
- Duration
- Responsibilities
Store
- Certificate Name
- Issuer
- Issue Date
- Certificate Image
- Verification Link
Maintain
- Semester Number
- Subjects
- SGPA
- CGPA
Upload
- Latest Resume
- Resume Download Link
Manage
- GitHub
- Portfolio
View
- Name
- Subject
- Message
- Received Time
Messages are securely stored in MongoDB while email notifications are forwarded to the administrator.
Manage
- Theme
- SEO
- Hero Text
- Website Metadata
- Section Visibility
- Section Ordering
The backend follows a RESTful architecture.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/login |
Admin Login |
| GET | /api/auth/profile |
Get Current Admin |
| POST | /api/auth/logout |
Logout |
| Method | Endpoint |
|---|---|
| GET | /api/projects |
| GET | /api/projects/slug/:id |
| GET | /api/projects/all |
| POST | /api/projects |
| PUT | /api/projects/:id |
| DELETE | /api/projects/:id |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/sitemap |
Generates dynamic sitemap |
| Method | Endpoint |
|---|---|
| GET | /api/skills |
| POST | /api/skills |
| PUT | /api/skills/:id |
| DELETE | /api/skills/:id |
| Method | Endpoint |
|---|---|
| GET | /api/education |
| POST | /api/education |
| PUT | /api/education/:id |
| DELETE | /api/education/:id |
| Method | Endpoint |
|---|---|
| GET | /api/experience |
| POST | /api/experience |
| PUT | /api/experience/:id |
| DELETE | /api/experience/:id |
| Method | Endpoint |
|---|---|
| GET | /api/certifications |
| POST | /api/certifications |
| PUT | /api/certifications/:id |
| DELETE | /api/certifications/:id |
| Method | Endpoint |
|---|---|
| POST | /api/contact |
| GET | /api/contact |
| Method | Endpoint |
|---|---|
| POST | /api/resume |
| GET | /api/resume |
User
│
▼
Login Form
│
▼
Express Authentication API
│
▼
Verify Credentials
│
▼
bcrypt Password Match
│
▼
Generate JWT
│
▼
Protected Dashboard
All uploaded assets are stored securely in Cloudinary.
Supported uploads
- Hero Images
- Project Images
- Certificates
- Resume
- Profile Images
Benefits
- Faster Delivery
- Automatic Optimization
- CDN Support
- Reduced Server Storage
Visitor
│
▼
Contact Form
│
▼
Backend Validation
│
▼
MongoDB Storage
│
▼
Email Notification
│
▼
Administrator
Supported providers
- Nodemailer
- Resend
- SendGrid
Hosted on
- Vercel
Can be deployed on
- Render
- Railway
- AWS EC2
- DigitalOcean
- VPS
MongoDB Atlas
Cloudinary
The project follows multiple security best practices.
- JWT Tokens
- Password Hashing
- Protected Routes
- Environment Variables
- Input Validation
- Error Handling
- Secure File Upload
- API Middleware
- Mongoose Validation
- Schema Protection
- Cloudinary Secure URLs
- Image Validation
Several optimizations have been implemented.
- Lazy Loading
- Code Splitting
- Responsive Images
- Optimized Assets
- Vite Production Build
- Efficient REST APIs
- Optimized MongoDB Queries
- Async Operations
- Modular Architecture
- Smooth Animations
- Responsive Layout
- Fast Navigation
- Optimized Loading Experience
Unlike most personal portfolios, this project includes:
✅ Complete Admin CMS
✅ Secure Authentication
✅ Cloudinary Media Management
✅ Dynamic Content Management
✅ REST API Architecture
✅ Modern MERN Stack
✅ Responsive Design
✅ Three.js Effects
✅ GSAP Animations
✅ Framer Motion
✅ Production Ready Structure
✅ Scalable Backend
This project is actively evolving. Here are some planned enhancements:
- AI-powered portfolio assistant
- AI resume analyzer
- AI project recommendation engine
- Blog CMS
- Markdown editor
- Rich text editor
- Draft & publish workflow
- Visitor analytics dashboard
- Resume download analytics
- Contact form insights
- Project popularity tracking
- Multi-language support
- RTL language support
- Dynamic translations
- OAuth Login (Google & GitHub)
- Two-Factor Authentication (2FA)
- Password reset via email
- Docker & Docker Compose
- CI/CD with GitHub Actions
- Unit & Integration Tests
- API Documentation (Swagger/OpenAPI)
Contributions are welcome!
If you'd like to improve this project, follow these steps:
git clone https://github.com/Utkal9/My-Portfolio.gitgit checkout -b feature/awesome-featuregit commit -m "Add awesome feature"git push origin feature/awesome-featurePlease ensure your code follows the existing project structure and coding style.
Building this project strengthened my understanding of:
- Full Stack MERN Development
- REST API Design
- Authentication & Authorization
- MongoDB Data Modeling
- Cloudinary File Management
- Responsive UI Development
- State Management with Zustand
- Modern React Patterns
- Production Deployment
- Performance Optimization
- Secure Backend Development
- Clean Project Architecture
Works seamlessly across:
- Desktop
- Laptop
- Tablet
- Mobile
- Modular Architecture
- Scalable Folder Structure
- Secure Authentication
- Cloud Storage Integration
- Environment-Based Configuration
- Glassmorphism
- Smooth Animations
- Interactive Elements
- Light & Dark Themes
- Premium User Experience
- Fast Initial Load
- Lazy Loading
- Optimized Assets
- Code Splitting
- Efficient API Calls
This project is licensed under the MIT License.
Feel free to use it for learning, inspiration, or personal projects while retaining the license.
Computer Science & Engineering Student passionate about Full Stack Development, scalable backend systems, cloud technologies, and building modern web applications with exceptional user experiences.
https://my-portfolio-nu-flax-96.vercel.app
https://www.linkedin.com/in/utkal-behera59/
If you found this project helpful:
⭐ Star the repository
🍴 Fork the project
🛠️ Suggest improvements
📢 Share it with others
Your support motivates me to continue building and improving open-source projects.
Special thanks to the creators and maintainers of the amazing technologies that made this project possible:
- React
- Vite
- Node.js
- Express.js
- MongoDB
- Tailwind CSS
- Framer Motion
- GSAP
- Three.js
- Zustand
- Cloudinary
- Nodemailer
- Resend
- SendGrid







