Thanks to visit codestin.com
Credit goes to github.com

Skip to content

SatinderSinghSall/Full-Stack-Satinder-Portfolio-with-Admin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

56 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Full-Stack Portfolio App with an Admin Panel to manage Skills, Projects, Experiences, Blogs & more - Satinder Portfolio


πŸš€ Satinder Portfolio β€” Full-Stack App Portfolio with Admin CMS

Modern production-grade Full-Stack Portfolio Platform built using:

  • React 19
  • Vite
  • Tailwind CSS v4
  • Framer Motion
  • Node.js
  • Express.js
  • MongoDB
  • Cloudinary
  • JWT Authentication

This project is not just a portfolio website β€” it is a complete scalable content management platform featuring:

  • Dynamic Portfolio Management
  • Admin Dashboard CMS
  • Blog System
  • Freelance Showcase
  • YouTube Integration
  • Contact Management
  • Cloud Media Uploads
  • Authentication System
  • Rich Text Editor CMS

🌟 Live Features

🌐 Public Portfolio

  • Modern animated landing page
  • Dynamic projects showcase
  • Freelance portfolio section
  • AI / ML showcase
  • Services section
  • Responsive mobile sidebar
  • Interactive animations
  • Dynamic blog system
  • YouTube content integration
  • Contact system

πŸ› οΈ Admin CMS Dashboard

  • Secure Admin Authentication
  • Add/Edit/Delete Projects
  • Blog Management System
  • Freelance Project Management
  • YouTube Content Management
  • Contact Messages Dashboard
  • Dynamic EditorJS content editor
  • Cloudinary image upload system

⚑ Tech Stack


🎨 Frontend Stack

Core

  • React 19
  • Vite 7

Styling

  • Tailwind CSS v4
  • Tailwind Merge
  • Class Variance Authority

Animation

  • Framer Motion

Routing

  • React Router DOM v7

Rich Text Editor

  • EditorJS
  • EditorJS Plugins

UI Libraries

  • Radix UI
  • Hero Icons
  • Lucide React

Charts

  • Recharts

API Communication

  • Axios

🧠 Backend Stack

Core

  • Node.js
  • Express.js 5

Database

  • MongoDB
  • Mongoose

Authentication

  • JWT
  • bcrypt

File Uploads

  • Multer
  • Cloudinary
  • Multer Storage Cloudinary

Email Services

  • Resend

Utilities

  • dotenv
  • cors
  • axios
  • cross-env

πŸ“ Full Project Structure

File Tree: Satinder Portfolio

Generated: 5/30/2026, 8:23:39 PM Root Path: e:\My Projects\Full-Stack App Portfolio with Admin\Satinder Portfolio

β”œβ”€β”€ πŸ“ backend
β”‚   β”œβ”€β”€ πŸ“ config
β”‚   β”‚   └── πŸ“„ cloudinary.js
β”‚   β”œβ”€β”€ πŸ“ controllers
β”‚   β”‚   β”œβ”€β”€ πŸ“„ authController.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ dashboardController.js
β”‚   β”‚   └── πŸ“„ freelanceController.js
β”‚   β”œβ”€β”€ πŸ“ middleware
β”‚   β”‚   β”œβ”€β”€ πŸ“„ auth.js
β”‚   β”‚   └── πŸ“„ cloudinaryUpload.js
β”‚   β”œβ”€β”€ πŸ“ models
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Blog.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ ContactMessage.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ FreelanceProject.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Project.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ User.js
β”‚   β”‚   └── πŸ“„ YouTubeVideo.js
β”‚   β”œβ”€β”€ πŸ“ routes
β”‚   β”‚   β”œβ”€β”€ πŸ“„ auth.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ blog.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ contact.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ dashboard.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ editorRoutes.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ freelance.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ project.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ upload.js
β”‚   β”‚   └── πŸ“„ youtube.js
β”‚   β”œβ”€β”€ πŸ“ services
β”‚   β”‚   └── πŸ“„ emailService.js
β”‚   β”œβ”€β”€ πŸ“ templates
β”‚   β”‚   β”œβ”€β”€ πŸ“„ adminNotificationTemplate.js
β”‚   β”‚   └── πŸ“„ userAcknowledgementTemplate.js
β”‚   β”œβ”€β”€ βš™οΈ .gitignore
β”‚   β”œβ”€β”€ πŸ“ README.md
β”‚   β”œβ”€β”€ πŸ“„ index.js
β”‚   β”œβ”€β”€ βš™οΈ package-lock.json
β”‚   β”œβ”€β”€ βš™οΈ package.json
β”‚   └── πŸ“„ seedAdmin.js
β”œβ”€β”€ πŸ“ frontend
β”‚   β”œβ”€β”€ πŸ“ Extra Codebase
β”‚   β”‚   β”œβ”€β”€ πŸ“„ About.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ ContactCTA_Button.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ ContactMessages.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Experience.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Footer.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Home.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Home2.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Services.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Skills.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Skills2.jsx
β”‚   β”‚   └── πŸ“„ adminNotificationTemplate.js
β”‚   β”œβ”€β”€ πŸ“ public
β”‚   β”‚   β”œβ”€β”€ πŸ“ Gallery
β”‚   β”‚   β”‚   └── πŸ“ Version 1.0.0
β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ–ΌοΈ Screenshot (1620).png
β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ–ΌοΈ Screenshot (1621).png
β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ–ΌοΈ Screenshot (1622).png
β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ–ΌοΈ Screenshot (1623).png
β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ–ΌοΈ Screenshot (1624).png
β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ–ΌοΈ Screenshot (1625).png
β”‚   β”‚   β”‚       └── πŸ–ΌοΈ Screenshot (1626).png
β”‚   β”‚   β”œβ”€β”€ 🌐 googled50bc0bace67ba10.html
β”‚   β”‚   β”œβ”€β”€ πŸ–ΌοΈ icon.png
β”‚   β”‚   β”œβ”€β”€ πŸ“„ robots.txt
β”‚   β”‚   β”œβ”€β”€ βš™οΈ sitemap.xml
β”‚   β”‚   └── πŸ–ΌοΈ vite.svg
β”‚   β”œβ”€β”€ πŸ“ src
β”‚   β”‚   β”œβ”€β”€ πŸ“ admin
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AddBlog.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AddFreelanceProject.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AddProject.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AddYouTube.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Blogs.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ContactMessages.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Dashboard.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ManageFreelanceProjects.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Projects.jsx
β”‚   β”‚   β”‚   └── πŸ“„ YouTube.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“ assets
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“• InternshipCompletionLetterSatinder.pdf
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ–ΌοΈ Satinder_Image.jpg
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“• Satinder_Resume.pdf
β”‚   β”‚   β”‚   └── πŸ–ΌοΈ react.svg
β”‚   β”‚   β”œβ”€β”€ πŸ“ components
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ ai-ml
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AiMlHero.jsx
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AiMlProjects.jsx
β”‚   β”‚   β”‚   β”‚   └── πŸ“„ AiMlSkills.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ ui
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ button.jsx
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ card.jsx
β”‚   β”‚   β”‚   β”‚   └── πŸ“„ dialog.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ About.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AdminAuthLayout.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AdminLayout.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AdminRoute.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AppPromoModal.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AppStatusModal.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AppsShowcase.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ContactCTA_Button.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ DeveloperCredit.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ EditorBlocksRenderer.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ EditorJSInput.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Experience.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ FeatureYouTube.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ FeaturedProjects.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Footer.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Hero.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Navbar.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ PoetryPromoModal.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ScrollToTop.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ScrollTopButton.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ SectionNavigator.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Sidebar.jsx
β”‚   β”‚   β”‚   └── πŸ“„ Skills.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“ lib
β”‚   β”‚   β”‚   └── πŸ“„ utils.js
β”‚   β”‚   β”œβ”€β”€ πŸ“ pages
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AiMl.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Blog.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ BlogDetails.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Contact.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ FreelanceDetails.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Home.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Login.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ NotFound.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ProjectDetail.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Projects_User.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Services.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ WatchMyFreelancing.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ WatchMyYouTube.jsx
β”‚   β”‚   β”‚   └── πŸ“„ YouTubeDetails.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“ services
β”‚   β”‚   β”œβ”€β”€ 🎨 App.css
β”‚   β”‚   β”œβ”€β”€ πŸ“„ App.jsx
β”‚   β”‚   β”œβ”€β”€ 🎨 index.css
β”‚   β”‚   └── πŸ“„ main.jsx
β”‚   β”œβ”€β”€ βš™οΈ .gitignore
β”‚   β”œβ”€β”€ πŸ“ README.md
β”‚   β”œβ”€β”€ βš™οΈ components.json
β”‚   β”œβ”€β”€ πŸ“„ eslint.config.js
β”‚   β”œβ”€β”€ 🌐 index.html
β”‚   β”œβ”€β”€ βš™οΈ jsconfig.json
β”‚   β”œβ”€β”€ βš™οΈ package-lock.json
β”‚   β”œβ”€β”€ βš™οΈ package.json
β”‚   β”œβ”€β”€ βš™οΈ vercel.json
β”‚   └── πŸ“„ vite.config.js
β”œβ”€β”€ βš™οΈ .gitignore
└── πŸ“ README.md

Generated by FileTree Pro Extension

Satinder Portfolio/
β”‚
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ config/
β”‚   β”œβ”€β”€ controllers/
β”‚   β”œβ”€β”€ middleware/
β”‚   β”œβ”€β”€ models/
β”‚   β”œβ”€β”€ routes/
β”‚   β”œβ”€β”€ services/
β”‚   β”œβ”€β”€ templates/
β”‚   β”œβ”€β”€ index.js
β”‚   β”œβ”€β”€ seedAdmin.js
β”‚   └── package.json
β”‚
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ public/
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ admin/
β”‚   β”‚   β”œβ”€β”€ assets/
β”‚   β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ pages/
β”‚   β”‚   β”œβ”€β”€ services/
β”‚   β”‚   β”œβ”€β”€ lib/
β”‚   β”‚   β”œβ”€β”€ App.jsx
β”‚   β”‚   └── main.jsx
β”‚   β”‚
β”‚   β”œβ”€β”€ vite.config.js
β”‚   └── package.json
β”‚
β”œβ”€β”€ .gitignore
└── README.md

✨ Key Features


πŸ” Authentication System

  • JWT-based Authentication
  • Protected Admin Routes
  • Token Validation Middleware
  • Secure Login System
  • Admin Authorization

☁️ Cloudinary Media System

Integrated Cloudinary upload pipeline:

  • Image Uploads
  • Cloud Storage
  • Optimized Delivery
  • Dynamic Image Rendering
  • Multer Upload Middleware

πŸ“ Dynamic Blog CMS

Rich content management powered by EditorJS:

  • Headers
  • Lists
  • Quotes
  • Tables
  • Images
  • Code Blocks
  • Embeds
  • Inline Styling

πŸ“§ Email System

Powered by Resend API:

  • Admin Notification Emails
  • User Acknowledgement Emails
  • HTML Email Templates
  • Dynamic Contact Form Workflow

πŸ“± Responsive Design System

Fully optimized for:

  • Mobile Devices
  • Tablets
  • Laptops
  • Ultra-wide Displays

Includes:

  • Mobile Drawer Navigation
  • Smooth Scroll Management
  • Responsive Layout Architecture
  • Performance Optimizations

🎨 UI / UX Features

  • Glassmorphism Design
  • Dark Premium Interface
  • Neon Glow Effects
  • Smooth Hover Interactions
  • Animated Route Transitions
  • Framer Motion Animations
  • Modern SaaS-style Layout

πŸš€ Installation Guide


1️⃣ Clone Repository

git clone <your-repository-url>

2️⃣ Navigate to Project

cd Satinder-Portfolio

3️⃣ Install Frontend Dependencies

cd frontend
npm install

4️⃣ Install Backend Dependencies

cd ../backend
npm install

πŸ”‘ Environment Variables


Frontend .env.development

VITE_API_URL=http://localhost:5000/api

Frontend .env.production

VITE_API_URL=https://your-production-api.com/api

Backend .env.development

PORT=5000

MONGO_URI=mongodb://127.0.0.1:27017/satinder_portfolio_db

JWT_SECRET=your_jwt_secret

CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret

RESEND_API_KEY=your_resend_api_key
ADMIN_EMAIL=your_admin_email

Backend .env.production

PORT=5000

MONGO_URI=your_production_mongodb_uri

JWT_SECRET=your_secure_jwt_secret

CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret

RESEND_API_KEY=your_resend_api_key
ADMIN_EMAIL=your_admin_email

▢️ Running Development Servers


Frontend

cd frontend
npm run dev

Frontend runs on:

http://localhost:5173

Backend

cd backend
npm run dev

Backend runs on:

http://localhost:5000

πŸ—οΈ Production Build


Frontend Build

npm run build

Backend Production

npm start

πŸ“‘ API Architecture

Base API URL:

/api

Example APIs:

/api/projects
/api/blogs
/api/freelance
/api/youtube
/api/contact
/api/auth

🧠 Database Models


User

Stores:

  • Admin credentials
  • Authentication data

Blog

Stores:

  • Blog content
  • EditorJS blocks
  • Cover images
  • Metadata

Project

Stores:

  • Portfolio projects
  • Technologies
  • External links
  • Images

FreelanceProject

Stores:

  • Freelance showcase projects
  • Client information

ContactMessage

Stores:

  • Contact form submissions
  • User inquiries

YouTubeVideo

Stores:

  • Featured YouTube videos
  • Metadata

πŸ”’ Security Features

  • JWT Authentication
  • Password Hashing
  • Protected Routes
  • Middleware Authorization
  • Environment Variable Protection
  • Secure Cloud Upload System

⚠️ Security Best Practices

Never expose:

  • MongoDB URIs
  • JWT Secrets
  • Cloudinary Secrets
  • API Keys
  • .env files

Always use:

.gitignore

for sensitive files.


🌍 Deployment Recommendations


Frontend Hosting

  • Vercel
  • Netlify

Backend Hosting

  • Render
  • Railway
  • VPS
  • DigitalOcean

Database Hosting

  • MongoDB Atlas

☁️ Media Storage

  • Cloudinary

🎯 Future Improvements

Planned upgrades include:

  • TypeScript Migration
  • React Query Integration
  • Role-Based Access Control (RBAC)
  • Analytics Dashboard
  • PWA Support
  • Server-side Rendering
  • Command Palette Search
  • Advanced SEO Optimization
  • API Rate Limiting
  • Redis Caching
  • WebSocket Features
  • Advanced Dashboard Analytics

πŸ“ˆ Performance Optimizations

  • Vite Fast Bundling
  • Optimized React Rendering
  • Lazy Loaded Components
  • Dynamic Imports
  • Optimized Animations
  • Efficient API Calls
  • Responsive Media Rendering

πŸ“„ License

This project is licensed under the ISC License.


πŸ‘¨β€πŸ’» Author

Satinder Singh Sall

Full-Stack Engineer specializing in:

  • Frontend Engineering
  • Backend Architecture
  • Modern CMS Platforms
  • AI/ML Interfaces
  • Product Engineering
  • Scalable Full-Stack Systems

⭐ Project Vision

This project was designed not just as a portfolio website, but as a scalable full-stack product platform demonstrating:

  • Real-world frontend architecture
  • Backend system design
  • CMS development
  • Authentication systems
  • Cloud media management
  • API architecture
  • Modern UI/UX engineering
  • Production-grade workflows

Satinder Portfolio β€” Frontend

Modern Full-Stack Portfolio Frontend built with React 19, Vite, Tailwind CSS v4, Framer Motion, and a custom Admin CMS ecosystem.

This frontend powers the complete public-facing portfolio experience along with seamless integration to the backend admin system.


✨ Features

🌐 Public Portfolio

  • Modern responsive landing page
  • Animated hero sections
  • AI / ML showcase
  • Services section
  • Dynamic projects showcase
  • Freelancing showcase
  • YouTube integration
  • Blog system
  • Contact system
  • Smooth mobile sidebar navigation
  • SEO optimized structure

πŸ› οΈ Admin Dashboard

  • Secure Admin Login
  • Add / Edit / Delete Projects
  • Blog Management
  • Freelance Project Management
  • YouTube Content Management
  • Dashboard Analytics Layout
  • Dynamic EditorJS Blog Editor
  • Cloudinary image upload integration

🎨 UI / UX

  • Glassmorphism design system
  • Mobile-first responsive layout
  • Framer Motion animations
  • Tailwind CSS v4 styling
  • Radix UI components
  • Custom reusable component architecture
  • Smooth transitions & hover effects
  • Premium dark theme interface

⚑ Tech Stack

Frontend Framework

  • React 19
  • Vite 7

Styling

  • Tailwind CSS v4
  • Tailwind Merge
  • CVA (Class Variance Authority)

Animations

  • Framer Motion

Routing

  • React Router DOM v7

Rich Text Editor

  • EditorJS
  • Multiple EditorJS plugins

Drag & Drop

  • @hello-pangea/dnd

UI Components

  • Radix UI
  • Hero Icons
  • Lucide React

Charts & Visualization

  • Recharts

API Communication

  • Axios

πŸ“ Frontend Architecture

frontend/
β”‚
β”œβ”€β”€ public/                  # Static assets
β”œβ”€β”€ src/
β”‚
β”‚   β”œβ”€β”€ admin/               # Admin dashboard pages
β”‚   β”œβ”€β”€ assets/              # Images, PDFs, static assets
β”‚   β”œβ”€β”€ components/          # Reusable UI components
β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ ai-ml/           # AI/ML section components
β”‚   β”‚   β”œβ”€β”€ ui/              # Shared UI primitives
β”‚   β”‚   └── ...
β”‚   β”‚
β”‚   β”œβ”€β”€ lib/                 # Utility functions
β”‚   β”œβ”€β”€ pages/               # Route pages
β”‚   β”œβ”€β”€ services/            # API services
β”‚   β”‚
β”‚   β”œβ”€β”€ App.jsx              # Main app component
β”‚   β”œβ”€β”€ main.jsx             # Application entry point
β”‚   β”œβ”€β”€ App.css
β”‚   └── index.css
β”‚
β”œβ”€β”€ vite.config.js
β”œβ”€β”€ package.json
└── README.md

πŸš€ Installation

1. Clone Repository

git clone <your-repository-url>

2. Navigate to Frontend

cd frontend

3. Install Dependencies

npm install

πŸ”‘ Environment Variables

Create:

.env.development

and

.env.production

Development

VITE_API_URL=http://localhost:5000/api

Production

VITE_API_URL=https://your-production-api-url.com/api

▢️ Running Development Server

npm run dev

Frontend runs on:

http://localhost:5173

πŸ—οΈ Production Build

npm run build

πŸ‘€ Preview Production Build

npm run preview

πŸ“¦ Major Dependencies

Core

  • react
  • react-dom
  • vite

Styling

  • tailwindcss
  • tailwind-merge
  • class-variance-authority

Animation

  • framer-motion

Editor

  • @editorjs/editorjs
  • @editorjs/header
  • @editorjs/image
  • @editorjs/list
  • @editorjs/table
  • @editorjs/quote
  • @editorjs/code

Routing

  • react-router-dom

UI

  • lucide-react
  • @heroicons/react
  • radix-ui

πŸ”’ Authentication Flow

Frontend communicates with backend authentication APIs using:

  • JWT Authentication
  • Protected Admin Routes
  • Local Storage Token Management
  • Route Guards

🌩️ Cloudinary Integration

Images uploaded through Admin Dashboard are processed via backend and stored on Cloudinary.

Frontend handles:

  • Preview rendering
  • Upload state management
  • Dynamic asset rendering

πŸ“± Responsive Design

The entire frontend is optimized for:

  • Mobile Devices
  • Tablets
  • Laptops
  • Large Displays

Special attention has been given to:

  • Mobile navigation
  • Scroll behavior
  • Drawer systems
  • Performance
  • Accessibility

🎯 Performance Optimizations

  • Vite fast bundling
  • Lazy loading routes
  • Optimized animations
  • Reusable component system
  • Efficient API calls
  • Dynamic rendering
  • Responsive image handling

🧠 Future Improvements

Planned upgrades include:

  • TypeScript migration
  • React Query integration
  • Advanced analytics dashboard
  • Theme customization
  • Multi-admin RBAC system
  • PWA support
  • Server-side rendering
  • Command palette search
  • Advanced SEO optimization

πŸ›‘οΈ Security Notes

Never expose:

  • API Keys
  • JWT Secrets
  • Cloudinary Secrets
  • Database URIs

Use .env files properly and keep secrets outside version control.


πŸ“„ License

This project is licensed under the ISC License.


πŸ‘¨β€πŸ’» Author

Satinder Singh Sall

Full-Stack Engineer specializing in:

  • Modern React Applications
  • Backend Systems
  • AI/ML Interfaces
  • Product Engineering
  • Full-Stack Architecture

⭐ Project Vision

This portfolio is designed not just as a personal website, but as a scalable full-stack product platform demonstrating:

  • Modern frontend engineering
  • Backend architecture
  • CMS systems
  • UI/UX systems
  • Production-grade workflows
  • Real-world application development

Satinder Portfolio β€” Backend

Scalable Express.js backend powering the full-stack Satinder Portfolio platform with Admin CMS, authentication system, dynamic content management, image uploads, and email integrations.

This backend provides REST APIs for:

  • Portfolio management
  • Blog CMS
  • Freelance showcase
  • YouTube content system
  • Contact management
  • Admin authentication
  • Cloudinary media uploads

✨ Features

πŸ” Authentication System

  • JWT Authentication
  • Protected Admin Routes
  • Middleware-based authorization
  • Secure login system

πŸ“ Content Management APIs

  • Blog CRUD APIs
  • Project CRUD APIs
  • Freelance Project APIs
  • YouTube Content APIs
  • Contact Form APIs

☁️ Cloudinary Upload System

  • Cloudinary integration
  • Image upload handling
  • Multer middleware
  • Dynamic media storage

πŸ“§ Email System

  • Resend Email Integration
  • Admin Notifications
  • User Acknowledgement Emails
  • Custom email templates

⚑ Tech Stack

Backend Framework

  • Node.js
  • Express.js 5

Database

  • MongoDB
  • Mongoose ODM

Authentication

  • JWT (jsonwebtoken)
  • bcrypt

File Upload

  • Multer
  • Cloudinary
  • multer-storage-cloudinary

Email Services

  • Resend

Utilities

  • dotenv
  • cors
  • axios
  • cross-env

πŸ“ Backend Architecture

backend/
β”‚
β”œβ”€β”€ config/                     # Configuration files
β”‚   └── cloudinary.js
β”‚
β”œβ”€β”€ controllers/                # Route controllers
β”‚   β”œβ”€β”€ authController.js
β”‚   β”œβ”€β”€ dashboardController.js
β”‚   └── freelanceController.js
β”‚
β”œβ”€β”€ middleware/                 # Custom middlewares
β”‚   β”œβ”€β”€ auth.js
β”‚   └── cloudinaryUpload.js
β”‚
β”œβ”€β”€ models/                     # Mongoose schemas
β”‚   β”œβ”€β”€ Blog.js
β”‚   β”œβ”€β”€ ContactMessage.js
β”‚   β”œβ”€β”€ FreelanceProject.js
β”‚   β”œβ”€β”€ Project.js
β”‚   β”œβ”€β”€ User.js
β”‚   └── YouTubeVideo.js
β”‚
β”œβ”€β”€ routes/                     # API routes
β”‚   β”œβ”€β”€ auth.js
β”‚   β”œβ”€β”€ blog.js
β”‚   β”œβ”€β”€ contact.js
β”‚   β”œβ”€β”€ dashboard.js
β”‚   β”œβ”€β”€ editorRoutes.js
β”‚   β”œβ”€β”€ freelance.js
β”‚   β”œβ”€β”€ project.js
β”‚   β”œβ”€β”€ upload.js
β”‚   └── youtube.js
β”‚
β”œβ”€β”€ services/                   # Business logic services
β”‚   └── emailService.js
β”‚
β”œβ”€β”€ templates/                  # Email templates
β”‚   β”œβ”€β”€ adminNotificationTemplate.js
β”‚   └── userAcknowledgementTemplate.js
β”‚
β”œβ”€β”€ index.js                    # Main server entry point
β”œβ”€β”€ seedAdmin.js                # Admin seeding script
β”œβ”€β”€ package.json
└── README.md

πŸš€ Installation

1. Clone Repository

git clone <your-repository-url>

2. Navigate to Backend

cd backend

3. Install Dependencies

npm install

πŸ”‘ Environment Variables

Create:

.env.development

and

.env.production

βš™οΈ Development Environment

PORT=5000

MONGO_URI=mongodb://127.0.0.1:27017/satinder_portfolio_db

JWT_SECRET=your_jwt_secret

CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret

RESEND_API_KEY=your_resend_api_key
ADMIN_EMAIL=your_admin_email

🌍 Production Environment

PORT=5000

MONGO_URI=your_production_mongodb_uri

JWT_SECRET=your_secure_jwt_secret

CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret

RESEND_API_KEY=your_resend_api_key
ADMIN_EMAIL=your_admin_email

▢️ Running Development Server

npm run dev

Server runs on:

http://localhost:5000

πŸš€ Production Server

npm start

πŸ“‘ API Base URL

/api

Example:

http://localhost:5000/api/projects

πŸ›‘οΈ Authentication System

Protected routes use:

  • JWT tokens
  • Authorization middleware
  • Token validation
  • Admin-only access control

Authentication flow:

  1. User logs in
  2. JWT token generated
  3. Token stored on frontend
  4. Protected APIs validated using middleware

☁️ Cloudinary Upload Flow

Image uploads are handled using:

  • Multer
  • Cloudinary Storage Engine
  • Upload Middleware

Features:

  • Automatic cloud storage
  • Optimized asset delivery
  • Dynamic URL generation
  • Secure upload handling

πŸ“§ Email Notification System

The backend sends:

  • Admin notification emails
  • User acknowledgement emails

Powered by:

  • Resend API
  • HTML email templates

πŸ“¦ Major Dependencies

Core

  • express
  • mongoose
  • dotenv

Authentication

  • bcrypt
  • jsonwebtoken

Uploads

  • multer
  • cloudinary
  • multer-storage-cloudinary

Utilities

  • cors
  • axios
  • cross-env

Email

  • resend

🧠 Database Models

User

Stores:

  • Admin credentials
  • Authentication data

Blog

Stores:

  • Blog content
  • EditorJS blocks
  • Metadata
  • Cover images

Project

Stores:

  • Portfolio projects
  • Technologies
  • Project links
  • Images

FreelanceProject

Stores:

  • Freelance showcase projects
  • Client/project information

ContactMessage

Stores:

  • User contact form submissions
  • Inquiry information

YouTubeVideo

Stores:

  • Featured YouTube content
  • Video metadata

πŸ”’ Security Features

  • JWT-based authentication
  • Password hashing using bcrypt
  • Environment variable protection
  • Protected admin APIs
  • Middleware authorization
  • Secure cloud upload system

⚠️ Important Security Notes

Never commit:

  • .env files
  • JWT secrets
  • MongoDB credentials
  • Cloudinary secrets
  • Resend API keys

Always add sensitive files to:

.gitignore

🌐 Deployment Recommendations

Frontend

  • Vercel
  • Netlify

Backend

  • Render
  • Railway
  • VPS
  • DigitalOcean

Database

  • MongoDB Atlas

🎯 Future Improvements

Planned upgrades:

  • TypeScript migration
  • RBAC (Role-Based Access Control)
  • API rate limiting
  • Request validation
  • Swagger API docs
  • Redis caching
  • WebSocket notifications
  • Microservice architecture
  • Advanced analytics APIs

πŸ“„ License

This project is licensed under the ISC License.


πŸ‘¨β€πŸ’» Author

Satinder Singh Sall

Full-Stack Engineer focused on:

  • Backend architecture
  • Modern web systems
  • CMS platforms
  • Scalable APIs
  • Product engineering

⭐ Project Vision

This backend is designed as a production-ready content platform supporting:

  • Dynamic portfolio systems
  • Admin CMS workflows
  • Secure authentication
  • Cloud media management
  • Real-world application architecture

Full-Stack Portfolio App with an Admin Panel to manage Skills, Projects, Experiences, Blogs & more - Satinder Portfolio

File Tree: Satinder Portfolio

Generated: 5/30/2026, 8:12:05 PM Root Path: e:\My Projects\Full-Stack App Portfolio with Admin\Satinder Portfolio

β”œβ”€β”€ πŸ“ backend
β”‚   β”œβ”€β”€ πŸ“ config
β”‚   β”‚   └── πŸ“„ cloudinary.js
β”‚   β”œβ”€β”€ πŸ“ controllers
β”‚   β”‚   β”œβ”€β”€ πŸ“„ authController.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ dashboardController.js
β”‚   β”‚   └── πŸ“„ freelanceController.js
β”‚   β”œβ”€β”€ πŸ“ middleware
β”‚   β”‚   β”œβ”€β”€ πŸ“„ auth.js
β”‚   β”‚   └── πŸ“„ cloudinaryUpload.js
β”‚   β”œβ”€β”€ πŸ“ models
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Blog.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ ContactMessage.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ FreelanceProject.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Project.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ User.js
β”‚   β”‚   └── πŸ“„ YouTubeVideo.js
β”‚   β”œβ”€β”€ πŸ“ routes
β”‚   β”‚   β”œβ”€β”€ πŸ“„ auth.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ blog.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ contact.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ dashboard.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ editorRoutes.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ freelance.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ project.js
β”‚   β”‚   β”œβ”€β”€ πŸ“„ upload.js
β”‚   β”‚   └── πŸ“„ youtube.js
β”‚   β”œβ”€β”€ πŸ“ services
β”‚   β”‚   └── πŸ“„ emailService.js
β”‚   β”œβ”€β”€ πŸ“ templates
β”‚   β”‚   β”œβ”€β”€ πŸ“„ adminNotificationTemplate.js
β”‚   β”‚   └── πŸ“„ userAcknowledgementTemplate.js
β”‚   β”œβ”€β”€ βš™οΈ .gitignore
β”‚   β”œβ”€β”€ πŸ“ README.md
β”‚   β”œβ”€β”€ πŸ“„ index.js
β”‚   β”œβ”€β”€ βš™οΈ package-lock.json
β”‚   β”œβ”€β”€ βš™οΈ package.json
β”‚   └── πŸ“„ seedAdmin.js
β”œβ”€β”€ πŸ“ frontend
β”‚   β”œβ”€β”€ πŸ“ Extra Codebase
β”‚   β”‚   β”œβ”€β”€ πŸ“„ About.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ ContactCTA_Button.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ ContactMessages.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Experience.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Footer.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Home.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Home2.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Services.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Skills.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“„ Skills2.jsx
β”‚   β”‚   └── πŸ“„ adminNotificationTemplate.js
β”‚   β”œβ”€β”€ πŸ“ public
β”‚   β”‚   β”œβ”€β”€ πŸ“ Gallery
β”‚   β”‚   β”‚   └── πŸ“ Version 1.0.0
β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ–ΌοΈ Screenshot (1620).png
β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ–ΌοΈ Screenshot (1621).png
β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ–ΌοΈ Screenshot (1622).png
β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ–ΌοΈ Screenshot (1623).png
β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ–ΌοΈ Screenshot (1624).png
β”‚   β”‚   β”‚       β”œβ”€β”€ πŸ–ΌοΈ Screenshot (1625).png
β”‚   β”‚   β”‚       └── πŸ–ΌοΈ Screenshot (1626).png
β”‚   β”‚   β”œβ”€β”€ 🌐 googled50bc0bace67ba10.html
β”‚   β”‚   β”œβ”€β”€ πŸ–ΌοΈ icon.png
β”‚   β”‚   β”œβ”€β”€ πŸ“„ robots.txt
β”‚   β”‚   β”œβ”€β”€ βš™οΈ sitemap.xml
β”‚   β”‚   └── πŸ–ΌοΈ vite.svg
β”‚   β”œβ”€β”€ πŸ“ src
β”‚   β”‚   β”œβ”€β”€ πŸ“ admin
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AddBlog.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AddFreelanceProject.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AddProject.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AddYouTube.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Blogs.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ContactMessages.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Dashboard.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ManageFreelanceProjects.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Projects.jsx
β”‚   β”‚   β”‚   └── πŸ“„ YouTube.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“ assets
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“• InternshipCompletionLetterSatinder.pdf
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ–ΌοΈ Satinder_Image.jpg
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“• Satinder_Resume.pdf
β”‚   β”‚   β”‚   └── πŸ–ΌοΈ react.svg
β”‚   β”‚   β”œβ”€β”€ πŸ“ components
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ ai-ml
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AiMlHero.jsx
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AiMlProjects.jsx
β”‚   β”‚   β”‚   β”‚   └── πŸ“„ AiMlSkills.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ ui
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ button.jsx
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ card.jsx
β”‚   β”‚   β”‚   β”‚   └── πŸ“„ dialog.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ About.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AdminAuthLayout.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AdminLayout.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AdminRoute.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AppPromoModal.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AppStatusModal.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AppsShowcase.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ContactCTA_Button.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ DeveloperCredit.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ EditorBlocksRenderer.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ EditorJSInput.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Experience.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ FeatureYouTube.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ FeaturedProjects.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Footer.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Hero.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Navbar.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ PoetryPromoModal.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ScrollToTop.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ScrollTopButton.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ SectionNavigator.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Sidebar.jsx
β”‚   β”‚   β”‚   └── πŸ“„ Skills.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“ lib
β”‚   β”‚   β”‚   └── πŸ“„ utils.js
β”‚   β”‚   β”œβ”€β”€ πŸ“ pages
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AiMl.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Blog.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ BlogDetails.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Contact.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ FreelanceDetails.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Home.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Login.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ NotFound.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ProjectDetail.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Projects_User.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Services.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ WatchMyFreelancing.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ WatchMyYouTube.jsx
β”‚   β”‚   β”‚   └── πŸ“„ YouTubeDetails.jsx
β”‚   β”‚   β”œβ”€β”€ πŸ“ services
β”‚   β”‚   β”œβ”€β”€ 🎨 App.css
β”‚   β”‚   β”œβ”€β”€ πŸ“„ App.jsx
β”‚   β”‚   β”œβ”€β”€ 🎨 index.css
β”‚   β”‚   └── πŸ“„ main.jsx
β”‚   β”œβ”€β”€ βš™οΈ .gitignore
β”‚   β”œβ”€β”€ πŸ“ README.md
β”‚   β”œβ”€β”€ βš™οΈ components.json
β”‚   β”œβ”€β”€ πŸ“„ eslint.config.js
β”‚   β”œβ”€β”€ 🌐 index.html
β”‚   β”œβ”€β”€ βš™οΈ jsconfig.json
β”‚   β”œβ”€β”€ βš™οΈ package-lock.json
β”‚   β”œβ”€β”€ βš™οΈ package.json
β”‚   β”œβ”€β”€ βš™οΈ vercel.json
β”‚   └── πŸ“„ vite.config.js
β”œβ”€β”€ βš™οΈ .gitignore
└── πŸ“ README.md

Generated by FileTree Pro Extension


Absolutely! Here’s a clean, professional README structure for your Full-Stack Portfolio App with Admin Panel project. It’s polished and ready to present on GitHub or any documentation platform:


Satinder Portfolio β€” Full-Stack Portfolio App with Admin Panel

Live Demo


Overview

Satinder Portfolio is a comprehensive full-stack web application featuring a personal portfolio with an admin panel. The admin panel allows managing various sections including Skills, Projects, Experiences, Blogs, and more. This project is designed to showcase web development skills, both on the frontend and backend, with a strong emphasis on real-world use cases such as content management, authentication, and file uploads.


Features

  • Admin Panel to add, update, and delete portfolio content.
  • Authentication system for secure admin access.
  • Manage Skills, Projects, Experiences, Blogs, and YouTube videos.
  • Contact form with message management.
  • Responsive UI for seamless experience on all devices.
  • Cloudinary integration for media uploads.
  • Modern tech stack with React (frontend) and Node.js/Express (backend).

Tech Stack

Frontend

  • React.js (with JSX and Hooks)
  • Vite as build tool
  • CSS for styling

Backend

  • Node.js with Express.js
  • MongoDB (via Mongoose) for database
  • Cloudinary for image and media storage
  • JWT for authentication

Project Structure

Satinder Portfolio/
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ config/                 # Config files (e.g., Cloudinary)
β”‚   β”œβ”€β”€ controllers/            # API logic controllers
β”‚   β”œβ”€β”€ middleware/             # Auth and file upload middleware
β”‚   β”œβ”€β”€ models/                 # Mongoose models (User, Blog, Project, etc.)
β”‚   β”œβ”€β”€ routes/                 # Express route handlers
β”‚   β”œβ”€β”€ index.js                # Entry point for backend server
β”‚   β”œβ”€β”€ seedAdmin.js            # Script to create admin user
β”‚   └── .env                   # Environment variables (hidden)
β”‚
└── frontend/
    β”œβ”€β”€ public/                 # Static assets
    β”œβ”€β”€ src/
    β”‚   β”œβ”€β”€ admin/              # Admin panel pages and forms
    β”‚   β”œβ”€β”€ assets/             # Images, resume PDFs, etc.
    β”‚   β”œβ”€β”€ components/         # Reusable React components
    β”‚   β”œβ”€β”€ pages/              # Main frontend pages
    β”‚   β”œβ”€β”€ services/           # API calls and services (optional)
    β”‚   β”œβ”€β”€ App.jsx             # Main React app component
    β”‚   └── main.jsx            # ReactDOM render and app initialization
    β”œβ”€β”€ vite.config.js          # Vite config
    └── .env                   # Frontend environment variables (hidden)

About

Satinder Portfolio is a full-stack web app featuring a personal portfolio with an admin panel to manage Skills, Projects, Experiences, Blogs, and more. It showcases frontend and backend skills, emphasizing real-world features like content management, authentication, and file uploads for dynamic, secure updates.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors