Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/nayalsaurav/resume-analyzer/llms.txt

Use this file to discover all available pages before exploring further.

Resume Check Karo runs your uploaded PDF through a multi-stage pipeline that validates your inputs, constructs a context-rich prompt from the job details you provide, and sends everything to Google Gemini AI. The model evaluates the resume against five structured dimensions and returns a machine-readable JSON scorecard that is immediately rendered as an interactive feedback report.

How It Works

1

Upload Your PDF

You select a PDF resume file on the dashboard. The client performs an initial check — confirming the file is a PDF and does not exceed 10 MB — before anything is sent to the server.
2

Server-Side Validation

The analyzeResume server action re-validates every input on the server. All four fields (Company Name, Job Title, Job Description, and the file itself) must be present and well-formed. Any violation returns an error before the AI is contacted.
3

Build the AI Prompt

A structured instruction string is assembled that injects the company name, target job title, and full job description as context. The prompt then instructs Gemini to evaluate the resume across five specific dimensions and return a strictly typed JSON response.
4

Send to Google Gemini

The PDF is read as an ArrayBuffer, base64-encoded, and submitted alongside the instruction prompt to the Gemini model configured via the GOOGLE_AI_MODEL environment variable. The model name is kept in environment configuration so it can be swapped without a code change.
5

Parse the Structured Response

Gemini returns a JSON object that conforms to a predefined schema. The getAiResponse function validates and parses this object into a typed Feedback structure. If the model call fails for any reason, a safe fallback object with all scores set to 0 is returned instead.
6

Display the Scorecard

The parsed Feedback object is passed to the FeedbackDisplay component, which renders the overall score, five animated category cards, and color-coded tip lists — all without a page reload.

Validation Rules

Every field is required. The server action will reject the request if any of the following conditions are not met.

Company Name

Must be a non-empty string after trimming whitespace. This is injected into the AI prompt so the model understands the employer context.

Job Title

Must be a non-empty string after trimming whitespace. The model uses this to calibrate expected seniority, tone, and skill requirements.

Job Description

Required and must be a non-empty string after trimming whitespace. The client form additionally enforces a minimum of 50 characters to ensure the AI has enough context for accurate analysis.

Resume File

Must be a valid PDF (application/pdf MIME type). Maximum size is 10 MB. DOC/DOCX files are not accepted by the server action.
The client-side form accepts PDF, DOC, and DOCX extensions for display purposes, but the server action enforces PDF only with the application/pdf MIME type check. Always upload a .pdf file to avoid a server-side rejection.

AI Prompt Construction

The instruction prompt sent to Gemini contains three layers of context followed by evaluation directives. Injected context:
  • Company — the employer name you entered
  • Position — the job title you entered
  • Job Description — the full text of the posting
Evaluation directives: The model is instructed to score the resume against five dimensions, assign a score between 0 and 100 for each, and produce 3–4 actionable tips per category. The AI is explicitly told to be critical and that low scores are acceptable — it should not inflate scores for a weak resume. Evaluation dimensions passed to the model:
  1. ATS — keyword optimization and formatting compatibility
  2. Tone & Style — professional language and appropriate voice
  3. Content — relevance to the role, achievements, and quantified results
  4. Structure — layout clarity and section organization
  5. Skills — alignment of technical and soft skills with the job requirements

Structured Response Schema

Gemini is constrained to return a JSON object matching the following shape. The getAiResponse function uses this schema to enforce structured output from the model.
interface FeedbackTip {
  type: "good" | "improve";
  tip: string;
  explanation?: string; // present on toneAndStyle, content, structure, skills — not on ATS
}

interface FeedbackSection {
  score: number;        // 0–100
  tips: FeedbackTip[]; // 3–4 tips per section
}

interface Feedback {
  overallScore: number;       // 0–100, weighted average
  ATS: FeedbackSection;
  toneAndStyle: FeedbackSection;
  content: FeedbackSection;
  skills: FeedbackSection;
  structure: FeedbackSection;
}
The explanation field is present on tips for toneAndStyle, content, structure, and skills sections. ATS tips contain only type and tip — there is no explanation field in the ATS schema.
A representative response object looks like this:
{
  "overallScore": 72,
  "ATS": {
    "score": 68,
    "tips": [
      {
        "type": "improve",
        "tip": "Add role-specific keywords from the job description."
      },
      {
        "type": "good",
        "tip": "Resume uses a single-column layout compatible with most ATS parsers."
      }
    ]
  },
  "toneAndStyle": {
    "score": 80,
    "tips": [
      {
        "type": "good",
        "tip": "Consistent use of active voice throughout the work experience section.",
        "explanation": "Active-voice bullet points read faster and project confidence to both ATS systems and human reviewers."
      }
    ]
  },
  "content": {
    "score": 65,
    "tips": [
      {
        "type": "improve",
        "tip": "Replace duty-based bullet points with achievement-focused statements.",
        "explanation": "Phrases like 'responsible for managing' describe duties. Replace them with outcomes: 'Reduced deployment time by 40% by introducing automated pipelines.'"
      }
    ]
  },
  "skills": {
    "score": 70,
    "tips": [
      {
        "type": "improve",
        "tip": "Explicitly list the tech stack mentioned in the job description.",
        "explanation": "The posting calls for Kubernetes and Terraform but neither appears in your skills section or experience bullets."
      }
    ]
  },
  "structure": {
    "score": 78,
    "tips": [
      {
        "type": "good",
        "tip": "Clear section headings improve readability and ATS parsing.",
        "explanation": "Standard headings like Experience, Education, and Skills are recognised by virtually all ATS platforms."
      }
    ]
  }
}
If the Gemini API call fails — due to a network error, quota limit, or unexpected model output — the system returns a fallback Feedback object with all scores set to 0 and a generic error tip rather than crashing the request.
Paste a job description of 150 words or more for the most accurate analysis. Short or vague descriptions give the model less signal to work with, which can produce generic tips rather than targeted, role-specific feedback.

Build docs developers (and LLMs) love