The Resume Analyzer accepts a PDF resume alongside a job context — company name, job title, and job description — then uses Google Gemini 2.5 Flash to produce a structured, multi-category evaluation. Rather than returning free-form text, the route passes a strictDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/nayalsaurav/ai360/llms.txt
Use this file to discover all available pages before exploring further.
responseSchema to Gemini with responseMimeType: "application/json", guaranteeing type-safe structured output every time. This makes it the most sophisticated tool in AI360, combining native PDF ingestion, inline-data base64 encoding, and Gemini’s constrained JSON generation into a single POST endpoint.
How to use
Enter job context
Fill in the Company Name, Job Title, and paste the full job description into the textarea. All three fields are required — the more detail you provide in the job description, the more targeted the analysis will be.
Upload your resume
Click the Upload Resume (PDF) file input and select your resume. The file must be a valid PDF and no larger than 10 MB.
Run the analysis
Click Analyze Resume. The button changes to “Analyzing Resume…” and a skeleton loader appears while Gemini processes your document. Depending on resume length this typically takes 5–15 seconds.
Evaluation categories
The analyzer scores your resume across five independent dimensions. Each category returns ascore (0–100) plus an array of tips, where every tip carries a type ("good" or "improve"), a short tip string, and an optional explanation string for extra context.
ATS Compatibility (0–100)
ATS Compatibility (0–100)
Measures how well the resume will survive automated parsing by Applicant Tracking Systems. The model checks for relevant keyword presence, absence of tables or graphics that confuse parsers, standard section headings, and machine-readable formatting. Tips for this category include the
tip field only (no explanation).Tone & Style (0–100)
Tone & Style (0–100)
Evaluates the professional register of the writing — consistent use of action verbs, avoidance of first-person pronouns, confident phrasing, and uniformity of tense across bullet points. Tips in this category always include an
explanation field to clarify the reasoning behind each suggestion.Content Relevance (0–100)
Content Relevance (0–100)
Assesses how closely the resume’s experience, achievements, and responsibilities align with the provided job description. High scores indicate strong contextual overlap; low scores signal a need to tailor bullet points to the target role. Tips include
explanation.Structure & Formatting (0–100)
Structure & Formatting (0–100)
Reviews logical section ordering (contact → summary → experience → education → skills), consistent date formatting, appropriate use of white space, and overall readability at a glance. Tips include
explanation.Skills Presentation (0–100)
Skills Presentation (0–100)
Examines whether key technical and soft skills are clearly surfaced, quantified where possible, and mapped to the requirements listed in the job description. Tips include
explanation.Response schema
The full TypeScript interface used by both the frontend (page.tsx) and the API route reflects exactly what Gemini returns:
API integration
The endpoint atPOST /api/utilities/resume-analyzer accepts multipart/form-data. Do not set the Content-Type header manually — the browser (or fetch) must set it automatically so the MIME boundary is included correctly.
Validation rules
The route runsvalidateInputs before calling Gemini. A 400 / 500 error response is returned if any of the following conditions are violated:
companyNamemust be present and non-whitespacejobTitlemust be present and non-whitespacejobDescriptionmust be present and non-whitespacefilemust be attached to the requestfileMIME type must be exactlyapplication/pdffilesize must be under 10 MB (10 × 1024 × 1024 bytes)
Error handling
When the Gemini call itself fails (network error, quota exceeded, malformed response), the route does not return an HTTP error status. Instead it returns
HTTP 200 with success: true and a zero-score error feedback object — every category score is 0 and every tip reads “Unable to analyze…”. Always check feedback.overallScore > 0 after a successful HTTP response to detect these silent Gemini-level failures and prompt the user to retry.