Building My Personal Reference Management System
(Blog post written with aid of ChatGPT)
The Need
I regularly get requests to forward resumes or to recommend someone for a job opening. I also get approached by people looking for potential candidates. Managing this after long day in office is quite tiring and prone to slipping out of memory.
I needed a way to:
- Keep track of people (friends) and their skills.
- Track open positions to fill (mostly recommended by friends)
- Have an easy, organized way to retrieve and manage this information as the requests keep coming in.
The Design
I wanted to keep things simple. The goal wasn’t to build something complex, but something that would make my life easier. I designed a basic CRUD (Create, Read, Update, Delete) app with three core components:
- Skills: The central pivot connecting people with positions. I am mostly tracking technical skills, but app doesn’t enforce any such constraint.
- Friends: The people who have forwarded me their resumes.
- Positions: Job positions to be filled.
The key idea here was the relationship between these components. A skill could be associated with multiple friends (people who possess that skill) and multiple positions (jobs that require that skill). It’s essentially a mapping system that allows me to quickly find the right candidate for a given job or the right job for a given skill set.
I also wanted to make it simple with multiple pages for listing central content and adding and editing each component.
Choosing the Tech Stack
Here’s what I went with:
-
FastHTML: I have explore FastHTML recently and really liked the simple approach for full stack apps in python. This is a minimal Python framework that’s perfect for creating small web apps. It doesn’t require a lot of boilerplate code.
-
Peewee ORM: For database management, I chose Peewee. It’s lightweight and easy to use, which made it perfect for this small-scale project. It helped me easily define and interact with my database models without needing to deal with complex SQL.
-
SQLite: For storing data, I went with SQLite. Single file DB with few tables is enough for this small project.
The Implementation
Here’s a quick overview of how everything came together:
-
main.py
: This file contains the logic for listing all skills, friends, and positions. It’s also responsible for handling the connections between them. You can think of this file as the brain of the app. -
template.py
: This file handles the add/edit forms for skills, friends, and positions. It’s where I kept the HTML templates for the forms and pages. -
models.py
: The database models are defined here. I used Peewee to create simple models for Skills, Friends, and Positions, and defined the relationships between them (many-to-many).
With everything in place, I could add a new skill, associate it with the right friends, and match it with open positions. It became an incredibly helpful tool to quickly see who had the right skills for any given job and vice versa.
The Code
If you’re interested in taking a look at the code or even giving it a try yourself, here’s the GitHub link:
https://github.com/kulkarniniraj/jobex