OpportuniTrack - Job Application Tracker Powered by Nylas

James Shah - Sep 1 - - Dev Community

This is a submission for the Nylas Challenge: AI Expedition.

What I Built and Why

As someone who has been through the job hunt process myself, I know how exhausting it is. Especially in this market, candidates are applying to hundreds of jobs every day and it gets very overwhelming to keep track of each application. That's when I decided to build an app to automate this process!

Presenting to you OpportuniTrack - Track your next big opportunity, effortlessly! (Join the waitlist now to get early access!)

An example notification from OpportuniTrack

OpportuniTrack automatically tracks job applications by analyzing the user's emails and extracting information such as Company Name, Job Position, and Status of application (Applied, Rejected, Offered, etc.) from the job-related emails(predicted by the model)

It also notifies the users in real-time whenever there is a new job application or an update to an existing job application, so that users never lose any opportunity in a large pile of emails!

Okay, enough talk. Let's see it in action!

Demo

Code

GitHub logo jamesshah / opportunitrack

OpportuniTrack is an automated job application tracker app

OpportuniTrack - Track Your Next Opportunity, Effortlessly.

OpportuniTrack is an automated job application tracker using email.

Job hunt is exhausting (especially in this market!), and it's essential to keep track of hundreds of applications you submit everyday.

OpportuniTrack saves hours of manual work of keeping track of job applications everyday by automating it using your email

Features

  • Track applications automatically by connecting your email
  • Get notified whenever there is an update on your application
  • Add or edit applications manually
  • More features coming soon!

Architecture

OpportuniTrack Architecture

Note

  • OpportuniTrack is powered by Nylas API to securely analyze your emails
  • We only access emails that is likely to be a job application related email (predicted by our Machine Learning Model)
  • We don't store your email in our database, we only extract job application related information and store it



My Journey

Building OpportuniTrack was not as easy as I initially thought. As I've never developed a mobile app before, my first intuition was to build a web app. But with web app, I would not be able to give real-time update to user which is essential for this app since a job application update is a time-sensitive notification for users.

Now that I had decided to build a mobile app, the next challenge was to access the user's emails easily and securely. Nylas really shined here and with it's unified API for all different providers, I didn't have to worry about going through API documentation and setup process of various different providers.

With these tools and a lot of excitement, I started building OpportuniTrack.


I started with setting up Nylas and started exploring the APIs and features. Below are three 3 features that I used in this app, and I am planning to add more in future!

  • Auth API to get access to user emails
  • Email API to access user's past emails
  • Webhooks to get notified whenever user receives an email

Setting up a Node.js server and getting emails through Email API and Webhooks was really easy with Nylas.

Now the next task was to implement the brain of the application. The email analysis engine which would find the job application related email, extract information from it and finding the status of the application.

Initially, I thought of using a Large Language Model to do this, but soon realized that it was an over-kill and not cost-efficient at all. So, I decided to use traditional AI solutions - Text Classifier and Named Entity Recognition models.

I used a fine-tuned BART based model for email classification and GLiNER for extracting information from the email. These models are much smaller compared to LLMs and give decent accuracy with small fine-tuning.

With these two components ready, I had to enable communication between these two, since I needed asynchronous processing of the emails (Webhooks expect a response within 10 seconds and it can take more than 10 seconds to completely process the email and send notifications to the user). That's when I decided to use redis for queue-based communication between the server and the processing engine.

Finally, it was time to build the UI and connect all these pieces together to get it up and running. The complete architecture of the application came out to be as below:

Architecture


Things I learned and am proud of

  • This is my first iOS app, and getting it together within a few weeks is an achievement for myself
  • I learned more about distributed systems and the overhead that comes with it
  • Keeping the engineer ego aside and not using LLM just because it is trending and going with the simple solution that would work best for the problem at hand was a decision that will always stay with me

Finally, I would like to thank @nylas_team and @thepracticaldev for this challenge. It was a catalyst in building this app, and Nylas made this app see a day of light within a few weeks!

Please feel free to ask any questions you have in the comments!

. . . . . . . . . . . . . . . . . . . .
Terabox Video Player