This site is not affiliated with or endorsed by Vercel, Inc. Read the docs, then deploy or run each experiment yourself.
AI

Resume Fit Lab

Score a resume against a job description with match score, missing skills, strengths, and rewritten bullets.

Run this experiment yourself

Demos are not embedded on this site. Deploy a standalone copy on Vercel or run the experiment app locally.

Local development

cd apps/experiments/resume-fit-lab
pnpm install
pnpm dev

Then open http://localhost:3010.

This is an experimental demo. Use it as a starting point for your own projects.

Resume Fit Lab compares a job description and resume (both textareas) and returns a structured fit report: matchScore (0–100), missingSkills[], strengths[], and rewrittenBullets[]. Helpers in logic.ts clamp the score and list lengths after generateObject. No keys - 503.

Features

  • Dual text inputs – job description + resume (each capped ~10k chars).
  • Structured fit report – score, gaps, strengths, rewritten bullets.
  • Normalized output – normalizeFitResult clamps score and array sizes.
  • Sample JD / resume – one-click reset content.
  • Honest degradation – never invents a fit score without a provider.

Server Reference

POST /api/fit

{ "jobDescription": "...", "resume": "..." }

Success (200)

{
  "matchScore": 78,
  "missingSkills": ["Postgres"],
  "strengths": ["Next.js", "TypeScript"],
  "rewrittenBullets": ["Deployed Next.js apps on Vercel with typed APIs."],
  "provider": "ai-gateway"
}
StatusCause
503No AI provider
400Missing either field

Implementation Details

Validate and truncate

Both fields required; truncateText enforces MAX_FIELD_CHARS.

generateObject + normalize

const result = await generateObject({ model: resolveModel(), schema: fitSchema, prompt });
return Response.json({ ...normalizeFitResult(result.object), provider: providerLabel() });

Use Cases

  • Coaching rewrite suggestions for applicants.
  • Teaching structured HR-adjacent AI outputs (with clear disclaimer).
  • Quick gap analysis before a real ATS pipeline.

Limitations

  • Educational only - not a hiring decision tool.
  • No file upload parsing beyond pasted text in this lab.
  • No auth / rate limits.
  • Score is model-subjective.

Use in your project

Reuse the Zod fitSchema and normalizeFitResult. Add your own auth before exposing publicly.

Deployment

Deploy on Vercel

Local Development

cd apps/experiments/resume-fit-lab
pnpm install
pnpm dev

Configuration

VariableRequiredPurpose
AI_GATEWAY_API_KEYYes (or OPENAI_API_KEY)Preferred provider
OPENAI_API_KEYNoFallback
AI_MODELNoModel override

Vercel / Next.js Features Used

  • AI SDK generateObject
  • Vercel AI Gateway
  • Route Handlers
  • Zod

Next Steps

On this page