Inspiration

Hiring is fundamentally broken for small startups and indie founders. Enterprise Applicant Tracking Systems (ATS) are painfully expensive, bloated, and require complex onboarding. As a result, founders waste hours manually skimming irrelevant resumes. We were inspired to build FitCheck, an "AI Micro-ATS" that is entirely frictionless. We wanted to prove that with modern AI, you don't need a heavy enterprise suite to hire smartly—you just need the right prompt and a clean UI.

What it does

FitCheck is a lightning-fast, zero-friction resume screener. Users simply paste their Job Description into the app and drag-and-drop up to 5 candidate resumes (in PDF format). Instantly, FitCheck acts as an expert technical recruiter. It reads every resume simultaneously, cross-references the candidate's experience against the exact requirements of the Job Description, and generates a dynamic leaderboard. Every candidate is given a "Fit Score" out of 100, along with a brutally honest 2-sentence breakdown of their absolute biggest strengths and skill gaps for that specific role.

How we built it

We built FitCheck as a full-stack web application using Next.js 14 (App Router).

  • Frontend: We completely bypassed heavy component libraries in favor of custom, vanilla CSS to craft a premium, dark-mode UI with glassmorphism effects and micro-animations.
  • Backend: We utilized Next.js serverless API routes to securely handle our AI logic, ensuring API keys are never exposed to the client browser.
  • The Brains: We integrated the @google/generative-ai SDK and utilized the blazing-fast Gemini 2.5 Flash model. Instead of relying on brittle, third-party OCR libraries to parse PDFs, we leveraged Gemini's native multimodality by passing the raw Base64 encoded PDFs directly into the API.

Challenges we ran into

Building with cutting-edge AI APIs always comes with turbulence:

Model Endpoint Routing: We initially faced 404 Not Found errors when hitting the Gemini API because of strict versioning and naming conventions between the beta SDKs and the live model endpoints (migrating from the 1.5-flash tier to 2.5-flash). Handling High Demand: During testing, we hit 503 Service Unavailable errors due to sudden API capacity spikes on Google's end. Rather than letting the app crash and ruin the user experience, we engineered a graceful fallback system. Our backend intercepts these specific provider errors and relays a clean JSON response to the frontend, which triggers a custom, disappearing toast notification to alert the user without breaking the UI flow.

Accomplishments that we're proud of

We are incredibly proud of achieving deterministic JSON output from the LLM. AI models are notoriously prone to formatting hallucinations, but through rigorous prompt engineering, we forced Gemini to act as an API itself—consistently outputting a strict JSON array of candidates. We are also proud of the UI; we managed to build a frontend that feels like a premium, paid consumer product using only vanilla CSS and zero external styling libraries.

What we learned

We learned a tremendous amount about Prompt Engineering for Structured Data. We learned how to constrain a multimodal model to analyze raw, binary PDF files without needing any intermediate text-extraction tools. We also learned that in the era of AI engineering, building graceful UI failure states (like handling 503 errors) is just as important as building the successful "happy path."

What's next for FitCheck

The next evolution of FitCheck is moving from "Screening" to "Interviewing." We plan to add a feature where clicking on a candidate's profile automatically generates a custom list of 5 technical interview questions designed specifically to probe the "Skill Gaps / Weaknesses" that Gemini identified in their resume. We also plan to integrate Google Drive API so recruiters can simply point FitCheck to a folder of 100 resumes and let it run in the background.

Built With

Share this project:

Updates