Lavoro Buono - a full-stack web app for tracking applicants and job offers

Overview

As the title suggests, this is a web app that allows applicants to connect with job offers uploaded to the site. I helped to develop this app while at my 2-month internship at Tesisquare in Milan. This isn't part of the company's core business, but it was a side project that they had going on at the time, and I took it upon myself to develop the platform.

App functionalities and structure

So, what does the applicant tracking system (ATS) actually do? Well, a whole bunch of stuff. I wish I could provide screenshots, but I don't believe I have permission to do so, so I won't :P. Anyways, here is what it can do:

  • Automatic matching algorithm between candidates and job offers
  • Companies can sign up and post their job offers
  • RBAC system for managing roles between super admins, admins, managers, etc.
  • CV upload for candidates
  • Configuration menus for admins to change pretty much anything they want such as automatic emails
  • Basic system for companies to reach out to candidates that they find interesting
  • KPI charts and diagrams for admins to view stuff such as success rate of applications and whatnot

Honestly, I might have forgotten some things because I haven't taken a look at the site in a long time, but it's very cool and I'm satisfied with what I was able to get working in 2 months.

Automatic matching system

While I wish I could take credit for creating this system, I can't. A coworker of mine thought of the mechanism for this, but I was the one that got to implement it, which was still cool. The premise is that whenever you upload a CV to the site, you're not just uploading a pdf, you have to fill out a form. When you upload job offers, there is also a form to fill out. In both of these forms, there are input fields that track certain criteria. For example, one of the input fields was, "What license does the candidate have?" This opened a drop-down menu with some options. Now, when a job offer was uploaded, they would have the same field but worded like, "What is the minimum required license you are looking for?" Then, the matching algorithm just looks for candidates that meet that required license criteria. This same logic was applied to various criteria like language, region, protected categories status, etc.

However, we can't just completely exclude a candidate because they didn't meet a single criteria, that wouldn't make much sense. If you are a recruiter, you'd want to see something like a percent match instead, right? Well, to achieve this each criteria is assigned a weight. When a candidate's CV matches, they earn points equal to the weight of that criteria. If they don't match, they get no points for that criteria. This is done for each criteria. The final score is the sum of what the candidates matches with normalized over the total of all weights. And there you have a simple match percentage for each candidate! Through the admin panel, the weights can be configured, so if an admin thinks that the "languages" criteria is very important, they can assign more weight to it.

Final thoughts on my internship

This was my first internship and also my first ever job actually. To be honest, I enjoyed it a fair amount because I generally preferred this way more than studying for university xD. The nice thing about work was that when I clocked out, that was it! No more work for the day. While in university I'll be at classes for most of the day and then still have to study when I get home. Not to mention that any amount of free time you use to actually enjoy your time is plagued with guilt with the back of your mind thinking, "Well, I could be studying right now..." It gets pretty exhausting. On top of it all, I actually get paid to work, so it's just a massive win all around. Unfortunately, I was encouraged to use an AI IDE the whole time, so I didn't get to learn PHP as much because the AI was just writing everything for me. This part of the job wasn't as fun in my opinion and I tried to limit my AI usage as much as I could. I did learn a lot of MySQL, though. I got to work a lot with the database and that was pretty fun actually. Overall, great experience. I may consider working for them in the future if they have any positions open.

If you'd like to check out the website that serves as a portal to my web app, you can check it out here.