<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ehtsham ul haq </title>
    <description>The latest articles on DEV Community by ehtsham ul haq  (@ehtshamul).</description>
    <link>https://dev.to/ehtshamul</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3299217%2Fe8e8b980-8f7b-4b8f-ac76-24ade9a4a08d.jpeg</url>
      <title>DEV Community: ehtsham ul haq </title>
      <link>https://dev.to/ehtshamul</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ehtshamul"/>
    <language>en</language>
    <item>
      <title>personal Portfolio website with Admin plan</title>
      <dc:creator>ehtsham ul haq </dc:creator>
      <pubDate>Fri, 27 Jun 2025 06:27:26 +0000</pubDate>
      <link>https://dev.to/ehtshamul/personal-portfolio-website-with-admin-plan-4i2p</link>
      <guid>https://dev.to/ehtshamul/personal-portfolio-website-with-admin-plan-4i2p</guid>
      <description>&lt;h1&gt;
  
  
  Personal Portfolio - Full Stack Web Application
&lt;/h1&gt;

&lt;p&gt;this link github: &lt;a href="https://github.com/ehtshamul/Personal-Portfolio/tree/main" rel="noopener noreferrer"&gt;https://github.com/ehtshamul/Personal-Portfolio/tree/main&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A modern, responsive personal portfolio website built with the MERN stack (MongoDB, Express.js, Node.js) featuring a dynamic admin dashboard for content management.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Project Overview
&lt;/h2&gt;

&lt;p&gt;This is a comprehensive personal portfolio application that showcases professional work, blog posts, and provides a contact system. The application includes both a public-facing portfolio website and a secure admin dashboard for content management.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Public Portfolio Website&lt;/strong&gt;: Modern, responsive design showcasing projects, skills, and blog posts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin Dashboard&lt;/strong&gt;: Secure content management system for projects, blogs, and contact messages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication System&lt;/strong&gt;: JWT-based authentication for admin access&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Management&lt;/strong&gt;: CRUD operations for projects, blog posts, and contact management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contact System&lt;/strong&gt;: Contact form with message management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsive Design&lt;/strong&gt;: Mobile-first approach with Bootstrap and custom CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Features&lt;/strong&gt;: Rate limiting, helmet security, CORS protection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Updates&lt;/strong&gt;: Dynamic content loading without page refresh&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image Management&lt;/strong&gt;: Support for project and blog images with placeholder fallbacks&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚡ Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone and setup&lt;/span&gt;
git clone &amp;lt;repository-url&amp;gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;Personal-Portfolio
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Create .env file with your configuration&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"PORT=8000&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;DBsurl=mongodb://127.0.0.1:27017/haq_portfolio&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;JWT_SECRET=your_secret_key"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .env

&lt;span class="c"&gt;# Start development server&lt;/span&gt;
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visit &lt;code&gt;http://localhost:8000&lt;/code&gt; to see your portfolio!&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Technology Stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt; - JavaScript runtime environment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Express.js&lt;/strong&gt; - Web application framework&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MongoDB&lt;/strong&gt; - NoSQL database with Mongoose ODM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JWT&lt;/strong&gt; - JSON Web Tokens for authentication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;bcryptjs&lt;/strong&gt; - Password hashing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;multer&lt;/strong&gt; - File upload handling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nodemailer&lt;/strong&gt; - Email functionality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;express-rate-limit&lt;/strong&gt; - Rate limiting for API protection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;helmet&lt;/strong&gt; - Security middleware&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTML5&lt;/strong&gt; - Semantic markup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS3&lt;/strong&gt; - Custom styling with responsive design&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript (ES6+)&lt;/strong&gt; - Client-side functionality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bootstrap 5&lt;/strong&gt; - UI framework for responsive design&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Font Awesome&lt;/strong&gt; - Icon library&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Development Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;nodemon&lt;/strong&gt; - Development server with auto-restart&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;dotenv&lt;/strong&gt; - Environment variable management&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📁 Project Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Personal Portfolio/
├── App/
│   ├── controller/
│   │   ├── admin/
│   │   │   ├── blog.js
│   │   │   ├── contact.js
│   │   │   ├── projects.js
│   │   │   └── roles.js
│   │   └── web/
│   ├── middleware/
│   │   └── usermiddle.js
│   ├── models/
│   │   ├── admin/
│   │   │   ├── blog.js
│   │   │   ├── contact.js
│   │   │   ├── projects.js
│   │   │   └── user.js
│   │   └── web/
│   └── routes/
│       ├── admin/
│       │   ├── admin.js
│       │   ├── blogs.js
│       │   ├── contact.js
│       │   └── projects.js
│       └── web/
├── public/
│   ├── assets/
│   │   ├── bootstrap/
│   │   └── hero.jpeg
│   ├── admin.html
│   ├── dashboard.html
│   ├── dashboard.js
│   ├── index.html
│   ├── index.js
│   ├── login.js
│   └── style.css
├── main.js
├── package.json
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🚀 Installation &amp;amp; Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node.js (v14 or higher)&lt;/li&gt;
&lt;li&gt;MongoDB (local installation or MongoDB Atlas)&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Installation Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone the repository&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git clone &amp;lt;repository-url&amp;gt;
   &lt;span class="nb"&gt;cd &lt;/span&gt;Personal-Portfolio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install dependencies&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Environment Configuration&lt;/strong&gt;
Create a &lt;code&gt;.env&lt;/code&gt; file in the root directory:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   PORT=8000
   DBsurl=mongodb://127.0.0.1:27017/haq_portfolio
   JWT_SECRET=your_jwt_secret_key_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Database Setup&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure MongoDB is running locally, or&lt;/li&gt;
&lt;li&gt;Update the &lt;code&gt;DBsurl&lt;/code&gt; in &lt;code&gt;.env&lt;/code&gt; with your MongoDB Atlas connection string&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Create Admin User&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   npm run create-admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start the application&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# Development mode&lt;/span&gt;
   npm run dev

   &lt;span class="c"&gt;# Production mode&lt;/span&gt;
   npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Access the application&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Public Portfolio: &lt;code&gt;http://localhost:8000&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Admin Login: &lt;code&gt;http://localhost:8000/admin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Dashboard: &lt;code&gt;http://localhost:8000/dashboard&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📊 Database Models
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Project Model
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;technologies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;githuburl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;optional&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;liveurl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;optional&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;imageUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;featured&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Boolean &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;timestamps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Blog Model
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;excerpt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;author&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="nx"&gt;imageUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;published&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Boolean &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;timestamps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Contact Model
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;enum&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;new&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;read&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;replied&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;new&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;timestamps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  User Model
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;unique&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;unique&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hashed&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;timestamps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔌 API Endpoints
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Authentication
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;POST /api/admin/register&lt;/code&gt; - Register new admin user&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /api/admin/login&lt;/code&gt; - Admin login&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /api/admin/profile&lt;/code&gt; - Get admin profile (protected)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Projects
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /api/projects&lt;/code&gt; - Get all projects&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /api/projects&lt;/code&gt; - Create new project (protected)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PUT /api/projects/:id&lt;/code&gt; - Update project (protected)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DELETE /api/projects/:id&lt;/code&gt; - Delete project (protected)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Blogs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /api/blogs&lt;/code&gt; - Get all published blogs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /api/blogs&lt;/code&gt; - Create new blog post (protected)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PUT /api/blogs/:id&lt;/code&gt; - Update blog post (protected)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DELETE /api/blogs/:id&lt;/code&gt; - Delete blog post (protected)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Contact
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;POST /api/contact&lt;/code&gt; - Submit contact form&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /api/contact&lt;/code&gt; - Get all contact messages (protected)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PUT /api/contact/:id&lt;/code&gt; - Update message status (protected)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎨 Frontend Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Public Portfolio (&lt;code&gt;index.html&lt;/code&gt;)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hero Section&lt;/strong&gt;: Introduction with call-to-action buttons&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;About Section&lt;/strong&gt;: Personal information and statistics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills Section&lt;/strong&gt;: Categorized technical skills&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Projects Section&lt;/strong&gt;: Dynamic project showcase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blog Section&lt;/strong&gt;: Latest blog posts display&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contact Section&lt;/strong&gt;: Contact form and information&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Admin Dashboard (&lt;code&gt;dashboard.html&lt;/code&gt;)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard Overview&lt;/strong&gt;: Statistics and quick insights&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project Management&lt;/strong&gt;: CRUD operations for projects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blog Management&lt;/strong&gt;: CRUD operations for blog posts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contact Management&lt;/strong&gt;: Message handling and status updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsive Design&lt;/strong&gt;: Mobile-friendly admin interface&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔒 Security Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JWT Authentication&lt;/strong&gt;: Secure token-based authentication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password Hashing&lt;/strong&gt;: bcryptjs for password security&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate Limiting&lt;/strong&gt;: API protection against abuse&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Helmet Security&lt;/strong&gt;: HTTP headers security&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CORS Protection&lt;/strong&gt;: Cross-origin resource sharing control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input Validation&lt;/strong&gt;: Server-side validation for all inputs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Deployment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Local Development
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Production Deployment
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Set up environment variables for production&lt;/li&gt;
&lt;li&gt;Configure MongoDB connection&lt;/li&gt;
&lt;li&gt;Set up reverse proxy (nginx recommended)&lt;/li&gt;
&lt;li&gt;Use PM2 for process management:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; pm2
   pm2 start main.js &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"portfolio"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📱 Responsive Design
&lt;/h2&gt;

&lt;p&gt;The application is built with a mobile-first approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bootstrap 5 for responsive grid system&lt;/li&gt;
&lt;li&gt;Custom CSS for enhanced styling&lt;/li&gt;
&lt;li&gt;Font Awesome icons for visual elements&lt;/li&gt;
&lt;li&gt;Optimized for all device sizes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔧 Available Scripts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;npm start&lt;/code&gt; - Start production server&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm run dev&lt;/code&gt; - Start development server with nodemon&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm test&lt;/code&gt; - Run API tests&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm run create-admin&lt;/code&gt; - Create initial admin user&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Common Issues
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;MongoDB Connection Error&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure MongoDB is running: &lt;code&gt;mongod&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Check connection string in &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Verify MongoDB service is started&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Port Already in Use&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change PORT in &lt;code&gt;.env&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Kill process using the port: &lt;code&gt;lsof -ti:8000 | xargs kill -9&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;JWT Token Issues&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure JWT_SECRET is set in &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Clear browser localStorage&lt;/li&gt;
&lt;li&gt;Check token expiration&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Static Files Not Loading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify file paths in &lt;code&gt;public/&lt;/code&gt; directory&lt;/li&gt;
&lt;li&gt;Check express.static middleware configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Development Tips
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;npm run dev&lt;/code&gt; for development with auto-restart&lt;/li&gt;
&lt;li&gt;Check browser console for frontend errors&lt;/li&gt;
&lt;li&gt;Monitor server logs for backend issues&lt;/li&gt;
&lt;li&gt;Use MongoDB Compass for database visualization&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤝 Contributing
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Fork the repository&lt;/li&gt;
&lt;li&gt;Create a feature branch (&lt;code&gt;git checkout -b feature/AmazingFeature&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Commit your changes (&lt;code&gt;git commit -m 'Add some AmazingFeature'&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Push to the branch (&lt;code&gt;git push origin feature/AmazingFeature&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Open a Pull Request&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📄 License
&lt;/h2&gt;

&lt;p&gt;This project is licensed under the ISC License.&lt;/p&gt;

&lt;h2&gt;
  
  
  👨‍💻 Author
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ehtsham ul haq&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email: &lt;a href="mailto:ehtshamhaqnawaz@gmail.com"&gt;ehtshamhaqnawaz@gmail.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Phone: +92 3160143685&lt;/li&gt;
&lt;li&gt;Location: Islamabad, Lahore&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙏 Acknowledgments
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bootstrap for the responsive framework&lt;/li&gt;
&lt;li&gt;Font Awesome for the icon library&lt;/li&gt;
&lt;li&gt;MongoDB for the database solution&lt;/li&gt;
&lt;li&gt;Express.js community for the excellent documentation&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This is a personal portfolio project showcasing full-stack development skills with modern web technologies. The application demonstrates best practices in web development, security, and user experience design. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
