live link: https://thekarm.onrender.com
Karm is a comprehensive job portal platform built with the MERN stack (MongoDB, Express.js, React.js, Node.js). It serves as a bridge connecting job seekers with employers, facilitating the entire recruitment process from job posting to application management.
- Features
- Technology Stack
- System Architecture
- Installation and Setup
- Project Structure
- API Documentation
- User Roles and Permissions
- Database Schema
- Deployment
- Security Measures
- Future Enhancements
- Contributing
- License
- User registration and profile creation
- Resume upload and management
- Job search with advanced filtering options
- Job application tracking
- Application status monitoring
- Company information browsing
- Company profile creation and management
- Job posting with detailed descriptions
- Applicant management system
- Resume screening
- Application status updates
- Candidate communication
- User management
- Company verification
- Job posting moderation
- Platform analytics
- Content management
- React.js: A JavaScript library for building user interfaces
- Redux Toolkit: State management solution
- React Router: For navigation and routing
- Tailwind CSS: Utility-first CSS framework
- Shadcn UI Components: Modern UI components
- Axios: HTTP client for API requests
- Vite: Fast build tool and development server
- Node.js: JavaScript runtime environment
- Express.js: Web application framework
- MongoDB: NoSQL database
- Mongoose: Object Data Modeling (ODM) library
- JWT: JSON Web Tokens for authentication
- Bcrypt: Password hashing
- Multer: File upload handling
- Cloudinary: Cloud storage for images and files
- Git: Version control
- npm: Package management
- ESLint: Code linting
- Render: Cloud hosting platform
Karm follows a typical MERN stack architecture:
- Client Layer: React.js frontend with Redux state management
- API Layer: Express.js RESTful API endpoints
- Business Logic Layer: Node.js controllers and services
- Data Access Layer: Mongoose models and MongoDB database
The application implements the following security measures:
- JWT-based authentication
- HTTP security headers (Helmet)
- Rate limiting to prevent abuse
- CORS protection
- Password hashing with Bcrypt
- Node.js (v14.x or higher)
- npm (v6.x or higher)
- MongoDB instance (local or Atlas)
-
Clone the repository
git clone https://github.com/your-username/karm.git cd karm -
Install backend dependencies
npm install
-
Create a
.envfile in the root directory with the following variables:MONGO_URI=your_mongodb_connection_string PORT=8000 SECRET_KEY=your_jwt_secret_key CLOUD_NAME=your_cloudinary_cloud_name API_KEY=your_cloudinary_api_key API_SECRET=your_cloudinary_api_secret NODE_ENV=development ACCESS_TOKEN_SECRET=your_access_token_secret ACCESS_TOKEN_EXPIRY=1d REFRESH_TOKEN_SECRET=your_refresh_token_secret REFRESH_TOKEN_EXPIRY=10d -
Start the backend server
npm run dev
-
Navigate to the frontend directory
cd frontend -
Install frontend dependencies
npm install
-
Start the frontend development server
npm run dev
-
Build for production
npm run build
To run both frontend and backend concurrently:
# From the root directory
npm run devKARM/
├── backend/ # Backend code
│ ├── controllers/ # Request handlers
│ ├── middlewares/ # Express middlewares
│ ├── models/ # Mongoose schemas
│ ├── routes/ # API routes
│ ├── utils/ # Utility functions
│ └── index.js # Server entry point
│
├── frontend/ # Frontend code
│ ├── public/ # Static assets
│ ├── src/ # Source code
│ │ ├── assets/ # Images, fonts, etc.
│ │ ├── components/ # Reusable UI components
│ │ │ ├── Admin/ # Admin-specific components
│ │ │ ├── Applicants/ # Applicant-related components
│ │ │ ├── Companies/ # Company-related components
│ │ │ ├── Jobs/ # Job-related components
│ │ │ └── ... # Other component directories
│ │ ├── hooks/ # Custom React hooks
│ │ ├── lib/ # Utility functions
│ │ ├── redux/ # Redux store and slices
│ │ │ ├── applicationSlice.js
│ │ │ ├── authSlice.js
│ │ │ ├── companySlice.js
│ │ │ ├── jobSlice.js
│ │ │ └── store.js
│ │ ├── utils/ # Helper functions
│ │ ├── App.jsx # Main application component
│ │ ├── index.css # Global styles
│ │ └── main.jsx # Application entry point
│ ├── index.html # HTML template
│ └── vite.config.js # Vite configuration
│
├── .env # Environment variables
├── .gitignore # Git ignore file
├── package.json # Project dependencies and scripts
└── README.md # Project documentation
POST /api/v1/user/register- Register a new userPOST /api/v1/user/login- Log in an existing userGET /api/v1/user/logout- Log out the current userPOST /api/v1/user/profile/update- Update user profile
POST /api/v1/job/post- Create a new job postingGET /api/v1/job/get- Get all jobsGET /api/v1/job/getadminjobs- Get jobs for admin viewGET /api/v1/job/get/:id- Get a specific job by ID
POST /api/v1/company/create- Create a new companyGET /api/v1/company/get- Get all companiesGET /api/v1/company/get/:id- Get a specific company by ID
POST /api/v1/application/apply- Submit a job applicationGET /api/v1/application/getbyuser- Get applications for current userGET /api/v1/application/getbyjob/:jobId- Get applications for a specific jobPUT /api/v1/application/status/:id- Update application status
- Can create and update profile
- Can search and apply for jobs
- Can track application status
- Can upload and manage resume
- Can create and manage company profile
- Can post and manage job listings
- Can view and manage applications
- Can communicate with applicants
- Has access to all platform features
- Can manage users, companies, and job postings
- Can view platform analytics
- Can moderate content
- Basic information: fullname, email, phoneNumber, password
- Role: student, recruiter, admin
- Profile: bio, skills, resume, company reference, profile photo
- Basic information: name, description, website, location
- Logo: URL to company logo
- User reference: link to the user who created the company
- Basic information: title, description, requirements, salary
- Job details: experienceLevel, location, jobType, position
- References: company, created_by (user)
- Applications: list of applications for this job
- References: job, applicant (user)
- Status: pending, accepted, rejected
- Resume: URL to resume file
- Application date
- Skill Model: for tracking and matching skills
- Chat Model: for communications
- Notification Model: for system notifications
- Feedback & Rating Model: for reviews
- Payment & Subscription Models: for premium features
- Audit Model: for system logging
- File Storage Model: for document management
The application is deployed on Render.com with the following setup:
-
Backend Service: Node.js web service
- Build Command:
npm install - Start Command:
npm start - Environment Variables: Set in Render dashboard
- Build Command:
-
Frontend: Static site
- Build Command:
npm install && npm run build - Publish Directory:
frontend/dist
- Build Command:
-
Database: MongoDB Atlas cluster
- Connected via environment variables
The live application is accessible at: https://thekarm.onrender.com
- Authentication: JWT-based token authentication with access and refresh tokens
- Password Security: Bcrypt hashing with appropriate salt rounds
- API Protection: Helmet for HTTP headers, rate limiting for abuse prevention
- Data Validation: Server-side validation for all inputs
- CORS Configuration: Restricted cross-origin resource sharing
- File Upload Security: Multer for handling multipart/form-data with size limits
- Environment Variables: Sensitive information stored in .env files
- Advanced Search: Implementing Elasticsearch for better job search functionality
- Real-time Notifications: Socket.io for instant updates
- AI-powered Matching: Job recommendation system based on user profiles
- Video Interviews: Integration with WebRTC for online interviews
- Mobile Application: React Native version for iOS and Android
- Analytics Dashboard: Advanced reporting for employers
- Internationalization: Multi-language support
- Accessibility Improvements: WCAG compliance
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License.