A full-stack system that evaluates a candidate's resume against a job description using semantic search and generative AI.
This application extracts text from uploaded resumes (PDF), breaks it into manageable chunks, embeds the chunks using a powerful embedding model, stores them in a vector database, and later performs a semantic search when a job description is provided. The retrieved chunks are passed to a generative AI model to create a well-formatted evaluation.
| Component | Technology Used |
|---|---|
| Embedding Model | text-embedding-004 (Gemini) |
| AI Model | gemini-flash-2.0 |
| Vector Database | Pinecone |
| Frontend | React |
| Backend | Express.js, Node.js |
| PDF Parsing | pdf-parse |
- A user uploads a resume PDF.
- The backend uses
pdf-parseto extract raw text.
- The extracted text is split into chunks of ~500 words each for better embedding and semantic resolution.
- Each chunk is embedded using Gemini's
text-embedding-004model. - Embeddings are paired with the original text and stored in Pinecone under a defined namespace.
- When a user submits a job description, it's embedded the same way.
- A semantic similarity search is performed on Pinecone using the embedded query.
- Top-k relevant chunks from the resume are retrieved.
- The top chunks + job description are fed into
gemini-flash-2.0. - A formatted, markdown-compliant evaluation is generated, analyzing:
- Strengths
- Gaps
- Fit Verdict
- Recommendations
- The final response is returned to the frontend.
- The React app renders the markdown evaluation cleanly for the user.
- Upload resume PDF β
- Query with job description β
- View detailed HR-style candidate assessment