CoolFace
Apppublic

reinaissanced/kudos

sourceHugging Faceupdated 7mo agoView on Hugging Face
0likes
App README

๐Ÿ“„ 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.js
  • โ€”React.js
  • โ€”TypeScript
  • โ€”Tailwind CSS
  • โ€”FastAPI
  • โ€”Python
  • โ€”Google Gemini 1.5 Flash
  • โ€”Sentence Transformers
  • โ€”Pytest

๐Ÿฆ„ 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-transformers for 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:

  1. 1.Clone the repository to your local machine.
  2. 2.In the backend directory, create a .env file based on .env.example and add your GEMINI_API_KEY.
  3. 3.Set up the Python environment (using .venv) and run pip install -r requirements.txt.
  4. 4.Start the backend server using uvicorn app.main:app --reload (or according to backend/README.md).
  5. 5.Open a new terminal, navigate to the frontend directory, and run npm install or yarn.
  6. 6.Run npm run dev or yarn dev to start the Next.js development server.
  7. 7.Open http://localhost:3000 (or the port specified) in your web browser to view the app!

๐Ÿฟ Video

(Coming soon!)