{"id":29132170,"url":"https://github.com/manasscodes/devconnector-coursera","last_synced_at":"2026-04-11T12:03:42.266Z","repository":{"id":301767638,"uuid":"1010174764","full_name":"manasscodes/devconnector-coursera","owner":"manasscodes","description":"A full-stack MERN social network app for developers. Built as part of a Coursera project-based course to learn MongoDB, Express.js, React, and Node.js. Features user authentication, profile creation, posts, and a RESTful API. Ideal for beginners exploring full-stack development.","archived":false,"fork":false,"pushed_at":"2025-07-19T16:15:29.000Z","size":579,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-19T20:05:34.493Z","etag":null,"topics":["expressjs","mongodb","nodejs","reactjs","redux-toolkit","vite"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/manasscodes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-28T14:07:57.000Z","updated_at":"2025-07-19T16:15:33.000Z","dependencies_parsed_at":"2025-06-28T18:34:34.039Z","dependency_job_id":"13ce3de3-ee1f-49b6-a263-b50d2e78acb9","html_url":"https://github.com/manasscodes/devconnector-coursera","commit_stats":null,"previous_names":["manasscodes/devconnector-coursera"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/manasscodes/devconnector-coursera","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manasscodes%2Fdevconnector-coursera","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manasscodes%2Fdevconnector-coursera/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manasscodes%2Fdevconnector-coursera/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manasscodes%2Fdevconnector-coursera/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manasscodes","download_url":"https://codeload.github.com/manasscodes/devconnector-coursera/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manasscodes%2Fdevconnector-coursera/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31679484,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T08:18:19.405Z","status":"ssl_error","status_checked_at":"2026-04-11T08:17:08.892Z","response_time":54,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["expressjs","mongodb","nodejs","reactjs","redux-toolkit","vite"],"created_at":"2025-06-30T06:16:26.079Z","updated_at":"2026-04-11T12:03:42.259Z","avatar_url":"https://github.com/manasscodes.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DevConnector 👨‍💻\n\nA full-stack MERN social network application designed specifically for developers to connect, share experiences, and showcase their skills. Built as part of a Coursera project-based course to master MongoDB, Express.js, React, and Node.js development.\n\n![MERN Stack](https://img.shields.io/badge/Stack-MERN-61DAFB?style=for-the-badge\u0026logo=react)\n![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)\n![Node.js](https://img.shields.io/badge/Node.js-339933?style=for-the-badge\u0026logo=node.js\u0026logoColor=white)\n![React](https://img.shields.io/badge/React-61DAFB?style=for-the-badge\u0026logo=react\u0026logoColor=black)\n![MongoDB](https://img.shields.io/badge/MongoDB-47A248?style=for-the-badge\u0026logo=mongodb\u0026logoColor=white)\n![Express.js](https://img.shields.io/badge/Express.js-000000?style=for-the-badge\u0026logo=express\u0026logoColor=white)\n\n---\n\n## 📖 Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n- [Tech Stack](#tech-stack)\n- [Project Structure](#project-structure)\n- [Prerequisites](#prerequisites)\n- [Installation \u0026 Setup](#installation--setup)\n- [Environment Configuration](#environment-configuration)\n- [API Documentation](#api-documentation)\n- [Frontend Architecture](#frontend-architecture)\n- [Database Schema](#database-schema)\n- [Authentication \u0026 Security](#authentication--security)\n- [Deployment](#deployment)\n- [Contributing](#contributing)\n- [License](#license)\n- [Acknowledgments](#acknowledgments)\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./image.png\" alt=\"Certificate\" /\u003e\n\u003c/p\u003e\n\n\n## 🎯 Overview\n\nDevConnector is a comprehensive social networking platform tailored for software developers. The application enables developers to:\n\n- **Create Professional Profiles**: Showcase skills, experience, and education\n- **Connect with Peers**: Follow and interact with other developers\n- **Share Knowledge**: Post updates, ask questions, and share insights\n- **Build Networks**: Like, comment, and engage with the developer community\n- **Showcase Projects**: Link GitHub repositories and display portfolio work\n\nThis project demonstrates modern full-stack development practices using the MERN stack, featuring JWT-based authentication, RESTful API design, responsive UI, and robust state management.\n\n---\n\n## ✨ Features\n\n### 🔐 Authentication \u0026 Authorization\n- **Secure Registration/Login**: JWT-based authentication system\n- **Protected Routes**: Role-based access control for sensitive operations\n- **Session Management**: Automatic token refresh and secure logout\n- **Password Security**: Bcrypt encryption for password hashing\n\n### 👤 Profile Management\n- **Developer Profiles**: Comprehensive profile creation with professional details\n- **Experience \u0026 Education**: Timeline of work history and educational background\n- **Skills Showcase**: Tag-based skill representation\n- **Social Links**: Integration with GitHub, LinkedIn, Twitter, and other platforms\n- **Avatar Integration**: Gravatar integration for profile pictures\n\n### 📱 Social Features\n- **Post Creation**: Rich text posts with formatting support\n- **Interactive Feed**: Real-time feed of developer posts\n- **Engagement System**: Like and comment functionality\n- **Developer Discovery**: Browse and connect with other developers\n- **Activity Tracking**: Monitor interactions and engagement\n\n### 🛠️ Technical Features\n- **Responsive Design**: Mobile-first responsive UI\n- **Real-time Updates**: Live notifications and feed updates\n- **Search Functionality**: Find developers by skills, location, or experience\n- **Data Validation**: Comprehensive input validation on both client and server\n- **Error Handling**: Graceful error management with user-friendly messages\n\n---\n\n## 🏗️ Tech Stack\n\n### **Backend**\n- **Runtime**: Node.js (v16+)\n- **Framework**: Express.js\n- **Database**: MongoDB with Mongoose ODM\n- **Authentication**: JSON Web Tokens (JWT)\n- **Validation**: Express Validator\n- **Security**: Bcrypt, Helmet, CORS\n- **API Testing**: Postman collection included\n\n### **Frontend**\n- **Library**: React 18+ with Hooks\n- **State Management**: Redux Toolkit\n- **Routing**: React Router v6\n- **Styling**: CSS3, Bootstrap 5\n- **HTTP Client**: Axios\n- **UI Components**: Custom React components\n- **Form Handling**: Controlled components with validation\n\n### **Development Tools**\n- **Build Tool**: Webpack (via Create React App)\n- **Package Manager**: npm\n- **Code Formatting**: Prettier\n- **Development Server**: Concurrently for full-stack development\n- **Environment**: dotenv for environment variables\n\n---\n\n## 📁 Project Structure\n\n```\ndevconnector-coursera/\n│\n├── 📁 client/                    # React frontend application\n│   ├── 📁 public/\n│   │   ├── index.html\n│   │   └── favicon.ico\n│   ├── 📁 src/\n│   │   ├── 📁 components/        # Reusable React components\n│   │   │   ├── 📁 auth/          # Authentication components\n│   │   │   │   ├── Login.js\n│   │   │   │   └── Register.js\n│   │   │   ├── 📁 dashboard/     # Dashboard components\n│   │   │   │   ├── Dashboard.js\n│   │   │   │   ├── Education.js\n│   │   │   │   └── Experience.js\n│   │   │   ├── 📁 layout/        # Layout components\n│   │   │   │   ├── Alert.js\n│   │   │   │   ├── Landing.js\n│   │   │   │   ├── Navbar.js\n│   │   │   │   └── Spinner.js\n│   │   │   ├── 📁 posts/         # Post-related components\n│   │   │   │   ├── Posts.js\n│   │   │   │   ├── PostItem.js\n│   │   │   │   └── PostForm.js\n│   │   │   ├── 📁 profile/       # Profile components\n│   │   │   │   ├── Profile.js\n│   │   │   │   ├── ProfileTop.js\n│   │   │   │   └── ProfileAbout.js\n│   │   │   ├── 📁 profile-forms/ # Profile form components\n│   │   │   │   ├── CreateProfile.js\n│   │   │   │   ├── EditProfile.js\n│   │   │   │   ├── AddExperience.js\n│   │   │   │   └── AddEducation.js\n│   │   │   ├── 📁 profiles/      # Profiles listing\n│   │   │   │   ├── Profiles.js\n│   │   │   │   └── ProfileItem.js\n│   │   │   └── 📁 routing/       # Route components\n│   │   │       └── PrivateRoute.js\n│   │   ├── 📁 redux/             # Redux state management\n│   │   │   ├── 📁 actions/       # Action creators\n│   │   │   │   ├── alert.js\n│   │   │   │   ├── auth.js\n│   │   │   │   ├── post.js\n│   │   │   │   └── profile.js\n│   │   │   ├── 📁 reducers/      # Redux reducers\n│   │   │   │   ├── alert.js\n│   │   │   │   ├── auth.js\n│   │   │   │   ├── index.js\n│   │   │   │   ├── post.js\n│   │   │   │   └── profile.js\n│   │   │   └── store.js          # Redux store configuration\n│   │   ├── 📁 utils/             # Utility functions\n│   │   │   ├── api.js\n│   │   │   ├── setAuthToken.js\n│   │   │   └── formatDate.js\n│   │   ├── App.js                # Main App component\n│   │   ├── App.css               # Global styles\n│   │   └── index.js              # React DOM entry point\n│   └── package.json              # Client dependencies\n│\n├── 📁 server/                    # Express.js backend application\n│   ├── 📁 config/                # Configuration files\n│   │   ├── db.js                 # Database connection\n│   │   └── default.json          # Default configuration\n│   ├── 📁 middleware/            # Custom middleware\n│   │   └── auth.js               # JWT authentication middleware\n│   ├── 📁 models/                # Mongoose data models\n│   │   ├── User.js               # User model\n│   │   ├── Profile.js            # Profile model\n│   │   └── Post.js               # Post model\n│   ├── 📁 routes/                # API route handlers\n│   │   └── 📁 api/\n│   │       ├── auth.js           # Authentication routes\n│   │       ├── posts.js          # Posts CRUD routes\n│   │       ├── profile.js        # Profile management routes\n│   │       └── users.js          # User registration routes\n│   ├── server.js                 # Express server entry point\n│   └── package.json              # Server dependencies\n│\n├── 📄 README.md                  # Project documentation\n├── 📄 .gitignore                 # Git ignore rules\n└── 📄 package.json               # Root package.json for scripts\n```\n\n---\n\n## 📋 Prerequisites\n\nBefore running this application, ensure you have the following installed:\n\n### **Required Software**\n- **Node.js**: Version 16.0 or higher\n- **npm**: Version 8.0 or higher (comes with Node.js)\n- **MongoDB**: Local installation or MongoDB Atlas account\n- **Git**: For version control\n\n### **Development Tools (Recommended)**\n- **VS Code**: With React, Node.js, and MongoDB extensions\n- **Postman**: For API testing\n- **MongoDB Compass**: For database visualization\n- **Chrome DevTools**: For debugging React applications\n\n### **API Keys \u0026 Services**\n- **MongoDB Atlas**: Database connection string\n- **GitHub Personal Access Token**: For repository integration\n- **Gravatar Account**: For profile avatars (optional)\n\n---\n\n## 🚀 Installation \u0026 Setup\n\n### **1. Clone the Repository**\n```bash\n# Clone the project\ngit clone https://github.com/manasscodes/devconnector-coursera.git\n\n# Navigate to project directory\ncd devconnector-coursera\n```\n\n### **2. Server Setup**\n```bash\n# Navigate to server directory\ncd server\n\n# Install server dependencies\nnpm install\n\n# Install additional security packages\nnpm install helmet cors express-rate-limit\n\n# Return to root directory\ncd ..\n```\n\n### **3. Client Setup**\n```bash\n# Navigate to client directory\ncd client\n\n# Install client dependencies\nnpm install\n\n# Install additional UI packages (if needed)\nnpm install react-router-dom@6 axios redux @reduxjs/toolkit\n\n# Return to root directory\ncd ..\n```\n\n### **4. Root Level Setup**\n```bash\n# Install concurrently for running both server and client\nnpm install\n\n# Verify installation\nnpm run dev\n```\n\n---\n\n## ⚙️ Environment Configuration\n\n### **Server Configuration**\n\nCreate `server/config/default.json`:\n```json\n{\n  \"mongoURI\": \"mongodb://localhost:27017/devconnector\",\n  \"jwtSecret\": \"your-super-secret-jwt-key-here\",\n  \"githubToken\": \"your-github-personal-access-token\"\n}\n```\n\n### **Production Configuration**\n\nCreate `server/config/production.json`:\n```json\n{\n  \"mongoURI\": \"your-mongodb-atlas-connection-string\",\n  \"jwtSecret\": \"your-production-jwt-secret\",\n  \"githubToken\": \"your-github-token\"\n}\n```\n\n### **Environment Variables**\n\nCreate `.env` file in the root directory:\n```env\nNODE_ENV=development\nPORT=5000\nMONGODB_URI=mongodb://localhost:27017/devconnector\nJWT_SECRET=your-jwt-secret-key\nGITHUB_TOKEN=your-github-token\nCLIENT_URL=http://localhost:3000\n```\n\n### **MongoDB Setup**\n\n#### **Local MongoDB**\n```bash\n# Start MongoDB service\nmongod\n\n# Connect to MongoDB shell\nmongo\n\n# Create database\nuse devconnector\n\n# Create a user (optional)\ndb.createUser({\n  user: \"devconnector\",\n  pwd: \"password123\",\n  roles: [\"readWrite\"]\n})\n```\n\n#### **MongoDB Atlas (Cloud)**\n1. Create account at [MongoDB Atlas](https://www.mongodb.com/atlas)\n2. Create a new cluster\n3. Set up database user and password\n4. Whitelist your IP address\n5. Get connection string and add to configuration\n\n---\n\n## 🔗 API Documentation\n\n### **Authentication Endpoints**\n\n#### **POST /api/users** - Register User\n```http\nPOST /api/users\nContent-Type: application/json\n\n{\n  \"name\": \"John Doe\",\n  \"email\": \"john@example.com\",\n  \"password\": \"password123\"\n}\n```\n\n#### **POST /api/auth** - Login User\n```http\nPOST /api/auth\nContent-Type: application/json\n\n{\n  \"email\": \"john@example.com\",\n  \"password\": \"password123\"\n}\n```\n\n#### **GET /api/auth** - Get Current User\n```http\nGET /api/auth\nAuthorization: Bearer \u003cjwt-token\u003e\n```\n\n### **Profile Endpoints**\n\n#### **GET /api/profile/me** - Get Current User Profile\n```http\nGET /api/profile/me\nAuthorization: Bearer \u003cjwt-token\u003e\n```\n\n#### **POST /api/profile** - Create/Update Profile\n```http\nPOST /api/profile\nAuthorization: Bearer \u003cjwt-token\u003e\nContent-Type: application/json\n\n{\n  \"company\": \"Tech Corp\",\n  \"website\": \"https://techcorp.com\",\n  \"location\": \"San Francisco, CA\",\n  \"bio\": \"Passionate full-stack developer\",\n  \"status\": \"Senior Developer\",\n  \"githubusername\": \"johndoe\",\n  \"skills\": \"JavaScript,React,Node.js,MongoDB\",\n  \"social\": {\n    \"linkedin\": \"https://linkedin.com/in/johndoe\",\n    \"twitter\": \"https://twitter.com/johndoe\"\n  }\n}\n```\n\n#### **PUT /api/profile/experience** - Add Experience\n```http\nPUT /api/profile/experience\nAuthorization: Bearer \u003cjwt-token\u003e\nContent-Type: application/json\n\n{\n  \"title\": \"Senior Developer\",\n  \"company\": \"Tech Solutions Inc\",\n  \"location\": \"New York, NY\",\n  \"from\": \"2020-01-15\",\n  \"to\": \"2023-03-20\",\n  \"current\": false,\n  \"description\": \"Led development of scalable web applications\"\n}\n```\n\n### **Posts Endpoints**\n\n#### **GET /api/posts** - Get All Posts\n```http\nGET /api/posts\nAuthorization: Bearer \u003cjwt-token\u003e\n```\n\n#### **POST /api/posts** - Create Post\n```http\nPOST /api/posts\nAuthorization: Bearer \u003cjwt-token\u003e\nContent-Type: application/json\n\n{\n  \"text\": \"Just deployed my first MERN application! 🚀\"\n}\n```\n\n#### **PUT /api/posts/like/:id** - Like/Unlike Post\n```http\nPUT /api/posts/like/60c72b2f9b1d8b3a4c8e6f7a\nAuthorization: Bearer \u003cjwt-token\u003e\n```\n\n### **Error Responses**\n\nAll endpoints return consistent error responses:\n```json\n{\n  \"errors\": [\n    {\n      \"msg\": \"Error message description\",\n      \"param\": \"field_name\",\n      \"location\": \"body\"\n    }\n  ]\n}\n```\n\n---\n\n## 🎨 Frontend Architecture\n\n### **Component Hierarchy**\n\n```\nApp.js\n├── Navbar\n├── Alert\n├── Routes\n│   ├── Landing\n│   ├── Register\n│   ├── Login\n│   ├── Dashboard\n│   │   ├── DashboardActions\n│   │   ├── Experience\n│   │   └── Education\n│   ├── CreateProfile\n│   ├── EditProfile\n│   ├── Profiles\n│   │   └── ProfileItem\n│   ├── Profile\n│   │   ├── ProfileTop\n│   │   ├── ProfileAbout\n│   │   ├── ProfileExperience\n│   │   ├── ProfileEducation\n│   │   └── ProfileGithub\n│   └── Posts\n│       ├── PostForm\n│       └── PostItem\n└── PrivateRoute (HOC)\n```\n\n### **Redux State Structure**\n\n```javascript\n{\n  auth: {\n    token: \"jwt-token-string\",\n    isAuthenticated: true,\n    loading: false,\n    user: {\n      id: \"user-id\",\n      name: \"User Name\",\n      email: \"user@example.com\",\n      avatar: \"gravatar-url\"\n    }\n  },\n  profile: {\n    profile: { /* current user profile */ },\n    profiles: [ /* all profiles */ ],\n    repos: [ /* github repositories */ ],\n    loading: false,\n    error: {}\n  },\n  post: {\n    posts: [ /* all posts */ ],\n    post: { /* single post */ },\n    loading: false,\n    error: {}\n  },\n  alert: [\n    {\n      id: \"alert-id\",\n      msg: \"Alert message\",\n      alertType: \"success\"\n    }\n  ]\n}\n```\n\n### **Custom Hooks**\n\nThe application uses several custom hooks for improved code reusability:\n\n```javascript\n// useAuth.js - Authentication hook\nconst useAuth = () =\u003e {\n  const { token, isAuthenticated, user } = useSelector(state =\u003e state.auth);\n  return { token, isAuthenticated, user };\n};\n\n// useProfile.js - Profile management hook\nconst useProfile = () =\u003e {\n  const dispatch = useDispatch();\n  const { profile, loading } = useSelector(state =\u003e state.profile);\n  \n  const createProfile = (profileData) =\u003e {\n    dispatch(createProfileAction(profileData));\n  };\n  \n  return { profile, loading, createProfile };\n};\n```\n\n---\n\n## 🗄️ Database Schema\n\n### **User Model**\n```javascript\n{\n  _id: ObjectId,\n  name: String (required),\n  email: String (required, unique),\n  password: String (required, hashed),\n  avatar: String (gravatar URL),\n  date: Date (default: Date.now)\n}\n```\n\n### **Profile Model**\n```javascript\n{\n  _id: ObjectId,\n  user: ObjectId (ref: 'users'),\n  company: String,\n  website: String,\n  location: String,\n  status: String (required),\n  skills: [String] (required),\n  bio: String,\n  githubusername: String,\n  experience: [\n    {\n      title: String (required),\n      company: String (required),\n      location: String,\n      from: Date (required),\n      to: Date,\n      current: Boolean,\n      description: String\n    }\n  ],\n  education: [\n    {\n      school: String (required),\n      degree: String (required),\n      fieldofstudy: String (required),\n      from: Date (required),\n      to: Date,\n      current: Boolean,\n      description: String\n    }\n  ],\n  social: {\n    youtube: String,\n    twitter: String,\n    facebook: String,\n    linkedin: String,\n    instagram: String\n  },\n  date: Date (default: Date.now)\n}\n```\n\n### **Post Model**\n```javascript\n{\n  _id: ObjectId,\n  user: ObjectId (ref: 'users'),\n  text: String (required),\n  name: String,\n  avatar: String,\n  likes: [\n    {\n      user: ObjectId (ref: 'users')\n    }\n  ],\n  comments: [\n    {\n      user: ObjectId (ref: 'users'),\n      text: String (required),\n      name: String,\n      avatar: String,\n      date: Date (default: Date.now)\n    }\n  ],\n  date: Date (default: Date.now)\n}\n```\n\n---\n\n## 🔒 Authentication \u0026 Security\n\n### **JWT Authentication Flow**\n\n1. **Registration/Login**: User provides credentials\n2. **Token Generation**: Server creates JWT with user payload\n3. **Token Storage**: Client stores token in localStorage\n4. **Request Headers**: Token sent in Authorization header\n5. **Token Verification**: Server validates token on protected routes\n6. **Auto-logout**: Token expiration triggers automatic logout\n\n### **Security Measures**\n\n#### **Password Security**\n```javascript\n// Bcrypt hashing with salt rounds\nconst saltRounds = 10;\nconst hashedPassword = await bcrypt.hash(password, saltRounds);\n```\n\n#### **Input Validation**\n```javascript\n// Express Validator middleware\nconst registerValidation = [\n  check('name', 'Name is required').not().isEmpty(),\n  check('email', 'Please include a valid email').isEmail(),\n  check('password', 'Password must be 6 or more characters').isLength({ min: 6 })\n];\n```\n\n#### **Security Headers**\n```javascript\n// Helmet.js security headers\napp.use(helmet({\n  contentSecurityPolicy: {\n    directives: {\n      defaultSrc: [\"'self'\"],\n      styleSrc: [\"'self'\", \"'unsafe-inline'\"],\n      scriptSrc: [\"'self'\"],\n      imgSrc: [\"'self'\", \"data:\", \"https:\"]\n    }\n  }\n}));\n```\n\n#### **Rate Limiting**\n```javascript\n// Rate limiting middleware\nconst rateLimit = require('express-rate-limit');\n\nconst limiter = rateLimit({\n  windowMs: 15 * 60 * 1000, // 15 minutes\n  max: 100, // limit each IP to 100 requests per windowMs\n  message: 'Too many requests from this IP'\n});\n```\n\n---\n\n## 🚀 Deployment\n\n### **Development Mode**\n```bash\n# Run both client and server concurrently\nnpm run dev\n\n# Run server only\nnpm run server\n\n# Run client only\nnpm run client\n```\n\n### **Production Build**\n```bash\n# Build client for production\ncd client\nnpm run build\n\n# Set production environment\nexport NODE_ENV=production\n\n# Start production server\ncd ..\nnpm start\n```\n\n### **Heroku Deployment**\n\n#### **Prepare for Deployment**\n```bash\n# Create production branch (local only)\ngit checkout -b production\n\n# Add production config\ngit add -f server/config/production.json\ngit commit -m \"Add production config\"\n\n# Create Heroku app\nheroku create your-app-name\n\n# Set environment variables\nheroku config:set NODE_ENV=production\nheroku config:set JWT_SECRET=your-production-jwt-secret\nheroku config:set MONGODB_URI=your-mongodb-atlas-uri\n```\n\n#### **Deploy to Heroku**\n```bash\n# Push to Heroku\ngit push heroku production:main\n\n# View logs\nheroku logs --tail\n\n# Open deployed app\nheroku open\n```\n\n### **Vercel Deployment (Frontend)**\n\n#### **Setup Vercel**\n```bash\n# Install Vercel CLI\nnpm i -g vercel\n\n# Login to Vercel\nvercel login\n\n# Deploy from client directory\ncd client\nvercel\n\n# Set environment variables in Vercel dashboard\n# REACT_APP_API_URL=your-backend-url\n```\n\n### **Docker Deployment**\n\n#### **Dockerfile**\n```dockerfile\n# Multi-stage build for production\nFROM node:16-alpine as build\n\n# Build client\nWORKDIR /app/client\nCOPY client/package*.json ./\nRUN npm ci --only=production\nCOPY client/ ./\nRUN npm run build\n\n# Production server\nFROM node:16-alpine\nWORKDIR /app\nCOPY server/package*.json ./\nRUN npm ci --only=production\nCOPY server/ ./\nCOPY --from=build /app/client/build ./public\n\nEXPOSE 5000\nCMD [\"node\", \"server.js\"]\n```\n\n#### **Docker Compose**\n```yaml\nversion: '3.8'\nservices:\n  app:\n    build: .\n    ports:\n      - \"5000:5000\"\n    environment:\n      - NODE_ENV=production\n      - MONGODB_URI=mongodb://mongo:27017/devconnector\n    depends_on:\n      - mongo\n  \n  mongo:\n    image: mongo:5.0\n    ports:\n      - \"27017:27017\"\n    volumes:\n      - mongo_data:/data/db\n\nvolumes:\n  mongo_data:\n```\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions to DevConnector! Here's how you can help:\n\n### **Development Workflow**\n\n1. **Fork the Repository**\n   ```bash\n   git clone https://github.com/manasscodes/devconnector-coursera.git\n   cd devconnector-coursera\n   ```\n\n2. **Create Feature Branch**\n   ```bash\n   git checkout -b feature/amazing-feature\n   ```\n\n3. **Make Changes**\n   - Follow existing code style\n   - Add tests for new features\n   - Update documentation\n\n4. **Commit Changes**\n   ```bash\n   git commit -m \"Add amazing feature\"\n   ```\n\n5. **Push and Create PR**\n   ```bash\n   git push origin feature/amazing-feature\n   ```\n\n### **Code Style Guidelines**\n\n#### **JavaScript/React**\n- Use ES6+ features\n- Follow functional component patterns\n- Use React Hooks over class components\n- Implement proper error boundaries\n\n#### **File Organization**\n- Components in `client/src/components/`\n- Redux actions in `client/src/redux/actions/`\n- API routes in `server/routes/api/`\n- Models in `server/models/`\n\n#### **Naming Conventions**\n- Components: PascalCase (`UserProfile.js`)\n- Files: camelCase (`userService.js`)\n- Constants: UPPER_SNAKE_CASE (`API_BASE_URL`)\n- CSS classes: kebab-case (`user-profile`)\n\n### **Testing Guidelines**\n\n```bash\n# Run tests\nnpm test\n\n# Run tests with coverage\nnpm run test:coverage\n\n# Run integration tests\nnpm run test:integration\n```\n\n---\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n```\nMIT License\n\nCopyright (c) 2024 Manas Kolaskar\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n\n---\n\n## 🙏 Acknowledgments\n\n### **Course \u0026 Learning**\n- **Coursera**: Platform for project-based learning\n- **MERN Stack Community**: For extensive documentation and support\n- **Brad Traversy**: Original DevConnector concept and methodology\n\n### **Technologies**\n- **MongoDB**: For flexible document database\n- **Express.js**: For robust web application framework\n- **React**: For building user interfaces\n- **Node.js**: For server-side JavaScript runtime\n\n### **Contributors**\n- **Manas Kolaskar** - *Initial work* - [@manasscodes](https://github.com/manasscodes)\n\n### **Special Thanks**\n- Open source community for amazing packages and tools\n- Stack Overflow community for problem-solving assistance\n- GitHub for hosting and version control\n- All beta testers and early users\n\n---\n\n## 📞 Support \u0026 Contact\n\n### **Developer**\n**Manas Kolaskar**\n- 🛠 Full-Stack Developer | MERN | GenAI Projects\n- 🔗 GitHub: [@manasscodes](https://github.com/manasscodes)\n- 📫 LinkedIn: [Manas Kolaskar](https://www.linkedin.com/in/manaskolaskar)\n- 📧 Email: [Contact via LinkedIn](https://www.linkedin.com/in/manaskolaskar)\n\n### **Project Links**\n- 🔗 **Repository**: [DevConnector Coursera](https://github.com/manasscodes/devconnector-coursera)\n- 📋 **Issues**: [Report Issues](https://github.com/manasscodes/devconnector-coursera/issues)\n- 💡 **Discussions**: [Join Discussions](https://github.com/manasscodes/devconnector-coursera/discussions)\n\n### **Getting Help**\nIf you encounter any issues or have questions:\n\n1. Check the [Issues](https://github.com/manasscodes/devconnector-coursera/issues) page\n2. Search existing discussions\n3. Create a new issue with detailed description\n4. Join our community discussions\n\n---\n\n## 📈 Project Status\n\n- ✅ **Backend API**: Complete with authentication, profiles, and posts\n- ✅ **Frontend React App**: Responsive UI with Redux state management\n- ✅ **Database Integration**: MongoDB with Mongoose ODM\n- 🔄 **Deployment**: In progress - preparing for production deployment\n- 📋 **Documentation**: Comprehensive README and API documentation\n- 🧪 **Testing**: Unit and integration tests implementation planned\n\n---\n\n⭐️ **Star this repository if you find it helpful!**\n\n*This project is built for educational purposes as part of a Coursera course and is open to improvements and contributions from the developer community.*","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanasscodes%2Fdevconnector-coursera","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanasscodes%2Fdevconnector-coursera","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanasscodes%2Fdevconnector-coursera/lists"}