Job Hunter Companion: AI that Review Your CV and Check Compability with Job Description

ยท

4 min read

A New Year Brings New Job Opportunities

Or so they say. It has become an annual event where everyone is on the lookout for a fresh job. On my LinkedIn timeline, I've noticed numerous individuals beginning to use the "open to work" badge. Surprisingly, within just the second week of the new year, there has been a wave of layoffs spanning from small companies to large global tech firms. This realization has led me to believe that perhaps it's time for people to revisit their resumes and LinkedIn profiles to align them with their current circumstances. So, how about letting AI assist you with that?

I simply wrote an MVP using a Chrome Extension for user interaction and MindsDB for the database and AI. I then shared my work on LinkedIn to validate the idea, and to my surprise, it garnered the highest impression I have ever received. Alright, let's proceed with building it.

The User Journey

Here is how you, as a user, will use Job Hunter Companion (JHC) Chrome Extension.

It's not like other ideas that create their own job marketplace, here you can improve your profile and use that to job description in all website. Just a single click and it will give you constructive feedback and can generate custom cover letter.

Getting Started with Chrome Extension

The scope of this part is only running the extension in local. I use React, Vite and tailwind for this frontend stack. The main different when we build a normal web app and chrome extension is we can use Chrome API only when we load it as extension. So the normal development server will not help us. Here is some changes I mad:

{
  "scripts": {
    "dev": "vite",
    "build": "vite build --watch",
  }
}

Look that I add --watch in vite build. So instead of running bun run dev, I run bun run build and it still looking for changes and build the app immediately.

// vite.config.js

export default defineConfig({
  build: {
    outDir: "/home/tegar/data/hackathon/mindsdb/dist",
    emptyOutDir: true
  },
  ...
});

Since I use WSL, I need to put my project in Linux filesystem so the file watcher will work, but I also need to load the output to the Windows filesystem. The config above will write the output to windows filesystem (data is a symlink to drive D:).

Proxy Backend Server

Since the MindsDB opensource have no authentication system, so it's not a best practice to call a request from client side. So I build a simple proxy backend using express that will handle complex query to MindsDB and save the CV as pdf in local disk. We will talk about why we need to save the pdf later.

There is nothing special in the code, just run bun run index.js and it will serve the backend.

The Main Part: MindsDB

First we need to prepare MindsDB dependency: web crawler and OpenAI

CREATE DATABASE web 
WITH ENGINE = 'web';

CREATE ML_ENGINE openai_engine
FROM openai
USING
    api_key = '<your-openai-key>';

After that we test how we get the resume from pdf and get the text from job posting

-- Get Text from PDF served by local server
SELECT * 
FROM web.crawler 
WHERE url = 'http://docker.host.internal:3000/resume' 
LIMIT 1;

-- Get Text from website
SELECT * 
FROM web.crawler 
WHERE url = 'https://<job-post-url>' 
LIMIT 1;

As you can see, I get the PDF from the express server. It will return the PDF directly. MindsDB can understand whether we put a web or pdf.

Conclusion

This is a first step to help many people to improve their profile and understand better about how match they profile and their desire job description. In the future if this MVP got more traction (and win the competition ๐Ÿ˜) I will publish the extension to the Chrome Web Store and create a SaaS for that. So everyone, especially non-tech fellow, doesn't need to install and run it by himself.

This post is part of hackathon hosted by Hashnode and MindsDB. Thank you for creating this awesome opportunity.

ย