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!)
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)
Unlike other job tracking tools, OpportuniTrack uniquely combines real-time email analysis with instant notifications, ensuring you stay on top of every opportunity without lifting a finger.
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:
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
Choosing Redis for queue-based communication was pivotal in ensuring the app's scalability and responsiveness. This choice allowed me to handle asynchronous processing seamlessly, addressing the challenge of webhook response time limitations effectively
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
Thank you to @nylas_team and @thepracticaldev for providing the platform to bring OpportuniTrack to life. This challenge has been an incredible journey, and I’m excited about the potential of OpportuniTrack to empower job seekers globally!
Please feel free to ask any questions you have in the comments!