Skip to content
View KshitishMule's full-sized avatar
😍
I may be slow to respond.
😍
I may be slow to respond.

Block or report KshitishMule

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
KshitishMule/README.md

πŸš€ Full Stack Developer Portfolio

A production-ready developer portfolio built with React + Vite + Tailwind CSS + Framer Motion (frontend) and Node.js + Express + MongoDB Atlas (backend).


Contact Me Using https://kshitish-portfolio.onrender.com

πŸ“ Project Structure

portfolio/
β”œβ”€β”€ client/          # React frontend (deploy to Vercel)
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/   # Navbar, Hero, About, Skills, Projects, Experience, ContactForm, Footer
β”‚   β”‚   β”œβ”€β”€ pages/        # Home, ProjectDetail, Contact
β”‚   β”‚   └── data/         # portfolio.js (edit YOUR info here)
β”‚   β”œβ”€β”€ vercel.json
β”‚   └── .env.example
└── server/          # Express backend (deploy to Render)
    β”œβ”€β”€ config/           # db.js, notifications.js
    β”œβ”€β”€ controllers/      # contactController.js
    β”œβ”€β”€ models/           # Message.js
    β”œβ”€β”€ routes/           # contact.js
    β”œβ”€β”€ index.js
    └── .env.example

⚑ Quick Start (Local Development)

1. Clone & install dependencies

# Backend
cd server
npm install
cp .env.example .env   # Fill in your values

# Frontend
cd ../client
npm install
cp .env.example .env   # Set VITE_API_URL=http://localhost:5000

2. Start development servers

# Terminal 1 β€” Backend
cd server
node index.js          # or: npx nodemon index.js

# Terminal 2 β€” Frontend
cd client
npm run dev

Frontend runs at: http://localhost:5173
Backend runs at: http://localhost:5000


🎨 Personalizing Your Portfolio

Edit client/src/data/portfolio.js to update:

  • Your name, role, bio, email, location
  • Social links (GitHub, LinkedIn, Twitter)
  • Projects (title, description, tags, images, links)
  • Skills and categories
  • Work experience

🌍 Deployment

Step 1 β€” MongoDB Atlas (Database)

  1. Go to mongodb.com/atlas β†’ Create free account
  2. Create a new M0 free cluster
  3. Database Access β†’ Add user with password
  4. Network Access β†’ Add 0.0.0.0/0 (allow all IPs)
  5. Connect β†’ Copy connection string (replace <password>)

Step 2 β€” Backend on Render

  1. Push your server/ folder to a GitHub repo
  2. Go to render.com β†’ New Web Service
  3. Connect your GitHub repo
  4. Settings:
    • Build Command: npm install
    • Start Command: node index.js
    • Environment: Node
  5. Add Environment Variables:
    MONGO_URI=mongodb+srv://...
    EMAIL_USER=your@gmail.com
    EMAIL_PASS=your_app_password
    TWILIO_SID=ACxxxxxxxxx
    TWILIO_AUTH_TOKEN=xxxxxxxxx
    TWILIO_PHONE=+1234567890
    OWNER_PHONE=+0987654321
    ALLOWED_ORIGINS=https://yourportfolio.vercel.app
    NODE_ENV=production
    PORT=10000
    
  6. Deploy β†’ Copy your Render URL (e.g. https://portfolio-api.onrender.com)

Step 3 β€” Frontend on Vercel

  1. Push your client/ folder to GitHub
  2. Go to vercel.com β†’ New Project β†’ Import repo
  3. Vercel auto-detects Vite β€” no config needed
  4. Add Environment Variable:
    VITE_API_URL=https://portfolio-api.onrender.com
    
  5. Deploy β†’ Your portfolio is live! πŸŽ‰

πŸ“§ Gmail App Password Setup

  1. Google Account β†’ Security β†’ Enable 2-Step Verification
  2. Search "App passwords" β†’ Create one for "Mail"
  3. Use the 16-character password as EMAIL_PASS

πŸ“± Twilio SMS Setup

  1. Sign up at twilio.com (free trial)
  2. Get Account SID, Auth Token from dashboard
  3. Buy/use a trial phone number β†’ set as TWILIO_PHONE
  4. Set OWNER_PHONE to your personal number to receive SMS alerts

πŸ§ͺ API Example

POST https://your-backend.onrender.com/api/contact

// Request
{
  "name": "John Doe",
  "email": "john@example.com",
  "subject": "Project Inquiry",
  "message": "Hi! I'd love to work with you on a project."
}

// Success Response (201)
{
  "success": true,
  "message": "Thanks for reaching out! I'll get back to you soon.",
  "data": {
    "id": "64a1b2c3d4e5f6g7h8i9j0k",
    "createdAt": "2024-01-15T10:30:00.000Z"
  }
}

// Error Response (400)
{
  "success": false,
  "message": "Validation failed",
  "errors": [
    { "field": "email", "message": "Please enter a valid email" }
  ]
}

πŸ›‘οΈ Security Features

  • Helmet β€” Security headers
  • CORS β€” Restricted to your frontend origin
  • Rate Limiting β€” 100 req/15min global, 5 contact submissions/hour
  • Input Validation β€” express-validator on all fields
  • Input Sanitization β€” XSS protection via escape()
  • dotenv β€” Secrets never in code

πŸ“¦ Build for Production

cd client
npm run build     # Outputs to client/dist/

Vercel runs this automatically on deploy.


πŸ”§ Tech Stack

Layer Technology
Frontend React 18, Vite, Tailwind CSS v3, Framer Motion
Routing React Router DOM v6
Icons React Icons (Feather + HeroIcons)
SEO React Helmet Async
Backend Node.js, Express.js
Database MongoDB Atlas + Mongoose
Email Nodemailer + Gmail SMTP
SMS Twilio
Security Helmet, CORS, express-rate-limit, express-validator
Logging Morgan
Deploy Vercel (frontend) + Render (backend)

Pinned Loading

  1. AiSimpleChatBot AiSimpleChatBot Public

    Python 1

  2. Flask-Login-and-register Flask-Login-and-register Public

    HTML

  3. UnityHospital UnityHospital Public

    HTML

  4. ChatGptClone ChatGptClone Public

    CSS

  5. NURO-Offline-LLM NURO-Offline-LLM Public

    Python 1

  6. PortFolio PortFolio Public

    JavaScript 1