Skip to content

jherve/job_search_ext

Repository files navigation

JobSearch, a Firefox extension to boost your job search

This extension helps you keep track of the job offers you stumble upon on LinkedIn, automagically saving all of them into a human-editable database file.

Here are some of its features :

  • Extract data from job offer pages (e.g. job position, company name, link, company domain, location, ...)
  • Save it in a plain text database format (recfile)
  • Add a colored overlay on the job offers depending on their status (seen/applied to/dismissed/rejected/...)
  • Display the offers you're interested in applying in a sidebar

How it runs

From the settings of the extension, you can choose where the file will be located ; let's say /home/me/job_search/. A jobs.rec file will be created in this directory.

From then, everytime you visit a page that contains a job offer, /home/me/job_search/jobs.rec will be updated with data extracted from the page.

E.g. if you visit https://www.linkedin.com/jobs/view/3765452342/, you will get a record about the job offer itself :

first_seen_date: Mon, 19 Feb 2024 13:31:00 +0100
url: https://www.linkedin.com/jobs/view/3765452342/
title: Data Engineer
origin: linked_in
location: Amérique latine
id: linked_in_3765452342
flexibility: full_remote
company: Mentor Talent Acquisition
application_process: regular

... and another with info about the company :

url: https://www.linkedin.com/company/mentor-talent-acquisition/life
name: Mentor Talent Acquisition
domain: Recrutement et placement de personnel

Because the database is just a plain text file, you can then update those records with other information that is harder to extract automatically (e.g. required experience, skills, ...) or with information about a potential application. You can also version it with git. Data integrity can be ensured via recutils utilities.

Installation

  1. Install external dependencies :
    • recutils to read/write the database file
    • pdm to install the Python environment
    • npm to install the Javascript environment
  2. Clone this repository
  3. Install the native backend : native/install.sh
  4. Build the extension : npm install && npm run build
  5. Install the extension as temporary by pointing to the file extension/manifest.json (NOT the manifest.json located at root)
  6. Setup the location of the job offers' file

Tech stack / general tech info

  • Firefox WebExtensions
  • Frontend code in PureScript, a pure functional language very similar to Haskell
  • Native application code is a basic Python app
  • Recutils, a genious piece of free software that brings database-like capabilities to a human-readable file format

Overall the extension architecture is not too complex, even though web extension standard mandates lots of message passing between parts that run in isolation of each other and can only communicate via JSON messages. E.g. only "content scripts" can read/write a web page's content ; only a native application that is launched by the browser is allowed to interact with the local file system ; only a background script can interact with the native application.

The major hard point was parsing LinkedIn pages to extract meaningful information. The HTML structure is not very semantic (lots of nested div and span with little identifiable class names), quite hard to retro-engineer in a reliable way, and evolves with UI updates.

For this task especially, PureScript type system proved incredibly useful.

Caveats

This extension was mostly written to :

  • help me with my current job search (come and say hello)
  • have an excuse to dive into Purescript
  • experiment with methods to properly extract data from unfriendly HTML code

Therefore it has the following caveats :

  • Very poor documentation
  • Likely not to run on Windows without pain (recutils doesn't work there)
  • Works only on Firefox
  • Poor packaging
  • Minimal UI

But it works on my machine 🤷 !

I will likely improve on this, e.g. by extracting the LinkedIn parsing code into a PureScript/Javascript standalone library, but don't hold your breath !

Tests

Frontend tests can be run with npm run test.

Native application tests can be run with (cd native && pdm run pytest).

About

A Firefox extension to boost your job search

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published