About the project

Inspiration

When a company visits a campus, the placement team can end up with hundreds of resumes. Someone has to read each one, check eligibility, compare skills and build a shortlist. Done by hand, it takes ages.

Students have a different version of the problem. You can have the right skills and still not know if your resume is good enough for a specific job. Most of us also couldn't say which skills we were missing.

We wanted to deal with both in one project, so we built PlaceAI. It helps the placement team with first-round screening and gives students feedback on their resumes and skills.

What it does

PlaceAI screens resumes and matches candidates to jobs for campus placements.

A student uploads a resume as a PDF or DOCX. The system parses it and returns an ATS score with feedback, the skills it found, an eligibility check for a chosen job, and a comparison against that job's requirements. After that, the student can get a learning roadmap and practise interviews with an AI chatbot.

Placement admins get their own dashboard. They post jobs, set eligibility criteria and see which candidates fit. Candidates are ranked, so the team starts from an ordered list instead of a pile of resumes.

How we built it

Frontend: React 18, Vite, Tailwind CSS, Framer Motion

Backend: Python 3.11, FastAPI, REST APIs

Database: PostgreSQL with SQLAlchemy

AI and NLP: PyMuPDF, python-docx, spaCy, sentence-transformers (MiniLM-L6-v2), scikit-learn, Nexus API

The React frontend talks to the FastAPI backend over REST. PostgreSQL stores users, jobs, resumes and analysis results.

When a resume is uploaded, we first extract the text, using PyMuPDF for PDFs and python-docx for DOCX files. spaCy helps process that text, and we pull out skills and other resume details. Then the system calculates the ATS score and checks the candidate against the job requirements.

For skill matching we didn't stop at exact keywords. MiniLM-L6-v2 compares the meaning of the resume text with the job description, which gave us better matches. scikit-learn handles the recommendation logic. The learning roadmaps and the interview chatbot's questions and replies come from the Nexus API.

Challenges we faced

Resumes have no standard format. Two resumes can hold the same information and look nothing alike. Some use tables, some use multiple columns, and some have odd spacing or unusual section names. Our extraction was inconsistent at first, so we kept testing the parser on different resumes and fixing it whenever the text came out wrong.

Job matching was the next problem. We started with keyword comparison, but it was too crude. A candidate might know a skill and describe it with different words, and keyword matching misses that. This is why we switched to semantic similarity.

The ATS score took the most thinking. No simple formula tells you whether a resume is good. We had to decide what goes into the score and how much each factor should count.

We also ran into the usual development trouble: authentication and role-based access, API integration, database handling and parsing errors. We spent time cutting down processing time during resume analysis, and we tried to keep the interface simple for both students and admins.

What we learned

Before this project, we knew most of these tools from coursework or small experiments. Using React, FastAPI, PostgreSQL, document processing and NLP together in one application taught us a lot more about how the pieces connect.

Keyword matching looked easy and gave poor results, and that showed us why meaning matters more than exact words. We also found that adding AI to an app takes more than calling an API. You have to decide what to send the model, how to handle what comes back, and whether the output actually helps the user.

Debugging was the other big lesson. Features rarely worked the first time. We had to test different cases, find where things broke and fix them without breaking everything else.

What we're proud of

We finished a working platform that ties together a frontend, a backend, a database and several AI components. It started as basic resume screening, and we added features around it one at a time. Now students can analyse their resumes, check how well they fit a job, get learning recommendations and practise interviews. Admins can manage postings and review candidates in one place.

We're happiest with the semantic skill matching, the PDF and DOCX parsing, and the fact that we built the whole thing from scratch.

What's next

Voice mock interviews. Students would speak their answers and get feedback on them. Explained match scores. Instead of showing only a percentage, the system would say why the score is high or low. Skill-gap suggestions. If a student is missing a required skill, PlaceAI would point to courses, certifications or topics to learn it. Better resume evaluation with more advanced LLM-based methods. Multi-college support with better analytics for placement teams.

We want students to understand their strengths and weak spots, and we want placement teams to spend less time on first-round screening. We'll keep building in that direction.

Share this project:

Updates

Submission history