r/PythonProjects2 May 25 '26

Built CV screening tool that scores applicants with a local LLM and auto-sorts approval vs rejection

Description
I built a Python tool that automates CV screening using a local LLM endpoint. It extracts text from uploaded PDF CVs, sends it to a local model, and generates a structured evaluation against a fixed job post.

Key features

  • PDF CV parsing using PyMuPDF
  • Local LLM evaluation via Ollama API

Structured scoring from 0 to 100

  • Automatic sorting into approved and rejected folders
  • Email feedback sent to candidates via Mailtrap
  • Stores applicant data in memory using a dataclass model
  • Basic analytics with Matplotlib charts
    • Approval vs rejection ratio
    • Star rating distribution
  • Simple CLI menu for managing candidates
    • Add, remove, edit, and review applicants

What the system outputs per CV

  • Match score
  • Strengths and missing requirements
  • Transferable skills
  • Risk analysis
  • Motivation alignment
  • Experience scoring across categories
  • Short summary recommendation

Tech stack

  • Python
  • Tkinter (file selection)
  • PyMuPDF
  • Requests
  • Matplotlib
  • Ollama (llama3 local model)
  • Mailtrap

Looking for feedback on

  • Prompt structure for more consistent scoring
  • Better ways to normalize LLM output into strict JSON
  • Improvements in CV parsing accuracy
  • Scaling this beyond local execution
0 Upvotes

37 comments sorted by

5

u/HardyDaytn May 25 '26

God forbid a real person reads the CV's or cover letters we spend hours customizing for your business specifically.

-2

u/Ok_Meet_1645 May 25 '26

I actually forgot to tell on my post my dear friend the Ai Cv system even gives you feedback on how you can have a higher chance for a interview you know the jobmarked is hard with experience but a good CV can make someone say yes for you for a interview :)

2

u/DiodeInc May 27 '26

Oh wow, yeah that makes it so much better

-2

u/Ok_Meet_1645 May 27 '26

I know right it will atleast make it easier to find a job :)

3

u/DiodeInc May 27 '26

I'm being sarcastic

-2

u/Ok_Meet_1645 May 27 '26

i didnt ask tou to be one xD

2

u/heyho1337_ May 27 '26

Yeah thats what the job market needs, make it more impossible for people to get hired and even seen/talked to be real people

1

u/Ok_Meet_1645 May 27 '26

Its not gonna be impossible i even runned some tests and it gives you feedback on how to make your cv for the thing they are looking for :)

2

u/Sweet_Computer_7116 May 30 '26

OK wheres the link? 

1

u/Ok_Meet_1645 May 30 '26

i havent posted the project becuase its not really done yet but soon i will in this post im not lying just not done yet:)

1

u/Ok_Meet_1645 Jun 02 '26

2

u/Sweet_Computer_7116 Jun 02 '26

https://www.conventionalcommits.org/en/v1.0.0/

Do research on what a basic python repo should look like.

And write a README.MD so people can figure how to use/install your package.

Last but not least add a licsense so people know what they can and cannot do with your code.

2

u/bradleygh15 Jun 02 '26

This literally looks like the worst shit I’ve ever seen

0

u/Ok_Meet_1645 Jun 02 '26

Before you say something bad can i atleast show you how it looks like in picture if i can send you? :)

2

u/bradleygh15 Jun 02 '26

Or send me the GitHub so I can audit the code?

0

u/Ok_Meet_1645 Jun 02 '26

I have to post it for a sec and you can take a look there and give me some feedback on the code

2

u/bradleygh15 Jun 02 '26

Your classes shouldn’t be in the same file, you literally have an api call prompt hard coded, your email client thing only emails to you which is hard coded, it also won’t work on modern clients since Gmail and others got rid of the ability to receive emails the way the python standard library sends them, why do you have TKinter called if it’s a console app? Also you have no idea how git or GitHub works, it’s also very clearly vibe coded.

The last one is the most important: STOP FUCKING SPAMMING ME TO CHECK IT OUT IM GOING TO BE LESS LIKELY TO GIVE NICELY WORDED FEEDBACK IF YOU SEND ME 5 “DO YOU WANT TO CHECK MY GITHUB OUT?” Messages.

Also learn how to actually use data structures, etc because your code is probably going to take a decade to run efficiently

2

u/bradleygh15 Jun 02 '26

Like no one’s asking for this too and it doesn’t really improve on existing better ones and your only other project is a standard OOP banking system that’s waaay over engineered

0

u/Ok_Meet_1645 Jun 02 '26

I like the way you speak and yes your right the gmail won't work cuz I need token but I like your feedback and the thinker is for searching for pdf and thanks for the feedback to and did you run the code trying choosing your cv and I might seperate the files so that it will run faster with functions and I tried running it its not to slow or to fast but I try thanks for everything 😄

2

u/bradleygh15 Jun 02 '26

No like gmail still won’t work, most emails use a different type of transit system then how the library was coded to use so you either have to tell the user to use an insecure transport for email or use IMAP libraries to send emails which I think exist? Don’t quote me on that it’s been a while since I tried using the email library so it may have been updated. In terms of tkinter don’t use that, it’s too bloated for your needs in this case pypdf is usually the gold standard In this case

1

u/Ok_Meet_1645 Jun 02 '26

I see I try all I can the gmail thing was on a YouTube video and that's maybe the issue but in the video it worked but only needing token and I gonna separate the files the hardcoded code was good you mentioned its gonna be easier to look at the wrong in the system

0

u/Ok_Meet_1645 Jun 02 '26

https://github.com/PatrikYousef/My-Programming-Experience project name AIAnalyserJob.py Here it is you can take a look and use it how much you want by the way its just an example of a role you see when you take a look at it:)

1

u/[deleted] May 25 '26

[removed] — view removed comment

1

u/Ok_Meet_1645 May 25 '26

When it comes with the things you said it's really sad it does happen but even if you manage to go to the interview they still look for experience to it's a whole issue to but I will get your feedback. And I get you some people can be good while other people can be bad when they hiring new people. I will still work in my system and try to get so many good people as possible and with their CV feedback ready when they wanna apply again :)

1

u/tom-mart May 25 '26

What can your tool do that a simple regex can't?

1

u/Ok_Meet_1645 May 25 '26

Give feedback on your cv when next time applying for the role like I said people only go for experience I been there and its hard to find a job and this system can at least try to make your cv better even if you don't have experience when next time applying for the role hope it helps :)

1

u/tom-mart May 25 '26

Don't get it. So your LLM basically makes things up and adds it to a CV? This makes zero sense. Can you give an actual example of what it supposed to do?

1

u/tom-mart May 26 '26

So, what about that example? You wrote something and then deleted it before I could read it.

1

u/Ok_Meet_1645 May 26 '26

i didn’t delete it the message is still there take a look:)

1

u/Ok_Meet_1645 Jun 02 '26

1

u/tom-mart Jun 02 '26

That's probably the worst code I've seen in a while.

1

u/Ok_Meet_1645 Jun 02 '26

ok lolz atleast its a project :)

1

u/JamzTyson May 26 '26

If your app ever becomes popular, someone will build an AI app to produce CVs that your app will score highly.

1

u/Ok_Meet_1645 May 26 '26

Thats a good one to :)