reinaissanced/kudos
๐ Kudos
An AI-powered resume builder and analysis tool built with Next.js and FastAPI. Kudos uses sentence-transformers for semantic resume-to-job description matching and Gemini 1.5 Flash for AI-powered suggestions. This project was built to explore integrating machine learning models with a modern React frontend to provide instant, actionable insights for job seekers.
๐ฆ Technologies
Next.jsReact.jsTypeScriptTailwind CSSFastAPIPythonGoogle Gemini 1.5 FlashSentence TransformersPytest
๐ฆ Features
Here's what you can do with Kudos:
- AI-Powered Analysis: Upload your PDF resume and paste a job description to get an instant match score and skill gap analysis.
- Secure File Handling: Process documents securely with PyPDF2 and PDF-lib.
- Smart Suggestions: Get generative AI suggestions on how to improve your resume to pass ATS filters and stand out to recruiters.
- Shareable Links: Generate auto-expiring shared links to showcase your analysis results or get feedback.
- Performance & Constraints: Includes in-memory LRU caching, input truncation, and per-IP rate limiting to ensure reliability and cost control.
๐ฉ๐ฝโ๐ณ The Process
I started by setting up the FastAPI backend, integrating sentence-transformers for calculating semantic similarities between resume text and job descriptions. Then, I connected Gemini 1.5 Flash to provide more nuanced, generative feedback on the user's skills.
Next, I focused on building the frontend using Next.js 14 and Tailwind CSS. I created intuitive components for dragging and dropping resumes, pasting job descriptions, and viewing the detailed analysis results.
To make sure the application was robust and scalable, I implemented rate limiting, input size limits, and robust error handling with exponential backoff for the AI calls.
Finally, I wrote tests for the backend using pytest to make sure the endpoints behaved as expected under various conditions. Along the way, I documented the process and environment variables so it would be easy to set up and run.
๐ What I Learned
During this project, I've picked up important skills and a better understanding of AI integrations.
๐ง Semantic Search & AI Integration:
- NLP Models: I learned how to use
sentence-transformersfor local semantic matching and how to securely combine it with remote LLM APIs (Gemini) for a hybrid AI approach.
๐ Rate Limiting & Caching:
- Performance: Implementing an in-memory LRU cache with TTL and per-IP rate limits taught me how to protect APIs from abuse and manage API costs effectively.
๐จ Next.js App Router:
- Modern React: I deepened my understanding of Next.js, building a responsive and interactive UI that seamlessly connects with my Python backend.
๐ Error Handling & Backoff:
- Resilience: Writing retry logic with exponential backoff for Gemini API calls improved the stability of my app when communicating with external services.
๐ญ How can it be improved?
- Add user authentication to save past resume analyses.
- Support more document formats like DOCX or TXT files.
- Add more granular feedback based on specific industry standards.
- Dark mode support for the UI.
- Use a persistent database instead of an in-memory cache for heavier loads.
๐ฆ Running the Project
To run the project in your local environment, follow these steps:
- Clone the repository to your local machine.
- In the
backenddirectory, create a.envfile based on.env.exampleand add yourGEMINI_API_KEY. - Set up the Python environment (using
.venv) and runpip install -r requirements.txt. - Start the backend server using
uvicorn app.main:app --reload(or according tobackend/README.md). - Open a new terminal, navigate to the
frontenddirectory, and runnpm installoryarn. - Run
npm run devoryarn devto start the Next.js development server. - Open http://localhost:3000 (or the port specified) in your web browser to view the app!
๐ฟ Video
(Coming soon!)
