SkillAgentSearch skills...

JobHuntTS

JobHunt is an open-source job board platform that enables employers to post job listings and job seekers to search and apply for jobs. The platform is built using Express.js and GraphQL, making it efficient and flexible for managing job-related interactions.

Install / Use

/learn @BaseMax/JobHuntTS

README

JobHunt - Open Source Job Board Platform in TypeScript

JobHunt is an open-source job board platform that enables employers to post job listings and job seekers to search and apply for jobs. The platform is built using Express.js and GraphQL, making it efficient and flexible for managing job-related interactions. This repository contains the source code for JobHunt, and we welcome contributions from the community to enhance its features and capabilities.

Features

  • Employer Dashboard: Employers can easily create accounts, log in, and post job listings.
  • Job Seeker Profile: Job seekers can create profiles, search for jobs, and apply using their profiles.
  • Job Listings: Display job with detailed descriptions, requirements, and application instructions.
  • Application Tracking: Employers can track and manage job applications through the dashboard.
  • GraphQL API: Utilize a powerful GraphQL API for seamless job listing retrieval and user interactions.
  • Open Source: JobHunt is open source, allowing you to customize and contribute to its development.
  • Refresh Token: JobHunt is featured by refresh token to enhance user experience.

Installation

Follow these steps to set up and run JobHunt locally on your machine:

Clone the repository:

git clone https://github.com/BaseMax/JobHuntTS.git

Navigate to the project directory:

cd JobHuntTS

Install dependencies:

npm install

Configure environment variables:

Rename .env.example to .env and fill in your environment variables.

Run the development server:

tsc
npm run dev

Open your browser and visit http://localhost:4000 to access JobHunt.

GraphQL

| Type | Name | Description | Example | | ------------ | ------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------- | | Mutation | createJob | Create a new job . | create job | | Query | getJobs | Get a list of all available jobs. | get list of jobs | | Query | getJobById | Get details of a specific job by its ID. | get job by id | | Query | getJobByTitle | Search for jobs by title. | get job by title | | Query | getJobByCategory | Filter jobs by category. | get jobs by category | | Query | getFeaturedJobs | Get a list of featured job listings. | get featured jobs | | Query | getUserApplications | Get user applications... | get user applications | | Mutation | updateJob | Update details of an existing job . | update job | | Mutation | deleteJob | delete an existing job . | delete job | | Mutation | applyForJob | Apply for a job using user's profile. | apply for job | | Mutation | withdrawApplication | Withdraw a job application by its ID. | withdraw application | | Mutation | acceptApplication | Accept a job application for a job | update job status | | Mutation | rejectApplication | Reject a job application for a job. | reject application | | Mutation | signUp | Create a new user profile. | sign up | | Query | getApplications | Get all job applications for a job listing. | get applications | | Mutation | updateUserProfile | Update user profile | update user profile | | Mutation | deleteUserProfile | Delete a user profile by its ID. | delete user profile | | Query | getUserProfiles | Get a list of all registered users. | get user profiles | | Query | getCategories | Get a list of all available job categories. | get categories | | Mutation | createCategory | Create a new job category. | create category | | Mutation | updateCategory | Update a job category's details. | update category | | Mutation | deleteCategory | Delete a job category by its ID. | delete category | | Query | getSimilarJobs | Get a list of jobs similar to a given job. | get similar jobs | | Query | getRecentJobs | Get a list of recently posted job listings. | get recent jobs | | Query | getJobCountByCategory | Get the number of jobs in a specific category. | get job count by category | | Mutation | addBookmark | Add a job to a user's bookmarks. | add book mark | | Mutation | removeBookmark | Remove a job from a user's bookmarks. | remove job from book marks | | Query | getBookmarkedJobs | Get a list of jobs bookmarked by a user. | get booked mark jobs | | Query | getUserBookmarkCount | Get the number of bookmarks for a user. | get booked mark jobs | | Mutation | createReview | Create a review for a specific a job. | create review | | Mutation | updateReview | Update a review's content or rating. | update review | | Mutation | deleteReview | Delete a review by its ID. | delete review | | Query | getReviewsForJob | Get all reviews for a specific job . | get reviews for job | | Query | getTopCategories | Get the most popular job categories. | get top categories | | Query | getJobsWithApplications | Get a job and count of associated applications. | get count of applications | | Query | getOpenApplications | Get a list of open job applications. | get open applications |

GraphQL Schema

type Job {
  id: ID!
  title: String!
  company: String!
  category: String!
  salary: Float
  description: String!
  requirements: [String]
  location: String
  featured: Boolean
  applications: [Application]
  reviews: [Review]
}

type User {
  id: ID!
  name: String!
  email: String!

}

type Application {
  id: ID!
  user: User!
  job: Job!
  status: String!
  createdDate: String!
}

type Review {
  id: ID!
  user: User!
  job: Job!
  rating: Int!
  content: String!
}

type Category {
  id: ID!
  name: String!
  jobs: [Job]
}

type Bookmark {
  id: ID!
  user: User!
  job: Job!
}

type JobCountByCategory {
  category: String!
  count: Int!
}

type CategoryWithJobCount {
  id: ID!
  name: String!
  jobCount: Int!
}

type ApplicationWithStatus {
  id: ID!
  user: User!
  job: Job!
  status: String!
}

type JobWithApplications {
  id: ID!
  title: String!
  applicationCount: Int!
}

type ApplicationStatus {
  status: String!
  count: Int!
}

type ReviewWithAuthor {
  id: ID!
  rating: Int!
  content: String!

}

type UserWithBookmarks {
  id: ID!
  username: String!
  bookmarkCount: Int!
}

type Query {
  getJobs: [Job]
  getJobById(id: ID!): Job
  getJobByTitle(title: String!): [Job]
  getJobByCategory(category: String!): [Job]
  getFeaturedJobs: [Job]
  getUserProfile(username: String!): User
  getUserApplications(userID: ID!): [Application]
  getCategories: [Category]
  getUsers: [User]
  getApplications(jobID: ID!): [Application]
  getSimilarJobs(jobID: ID!): [Job]
  getRecentJobs: [Job]
  getJobCountByCategory(category: String!): Int
  getBookmarkedJobs(userID: ID!): [Job]
  getReviewsForJob(jobID: ID!): [Review]
  getTopCategories(limit: Int!): [CategoryWithJobCount]
  getUserBookmarkCount(userID: ID!): Int
  getJobsWith
View on GitHub
GitHub Stars4
CategoryDevelopment
Updated3d ago
Forks1

Languages

TypeScript

Security Score

90/100

Audited on Mar 27, 2026

No findings