DEV Community

Building an AI résumé scorer with Claude + AWS Bedrock - architecture and lessons learned

Most résumés never reach a human recruiter. ATS software filters them out silently, with zero feedback to the applicant. That's the problem ScorAxis solves.

What it does

Upload a PDF → get a 0-100 ATS compatibility score with specific issues flagged and actionable fixes.

Stack

  • Backend: FastAPI + AWS ECS Fargate + RDS Postgres
  • Frontend: Next.js 15 + Vercel + Clerk auth
  • AI: Claude Haiku 4.5 (parsing) + Sonnet 4.6 (checks) via AWS Bedrock
  • Jobs: Inngest for background processing

Scoring - two halves

Deterministic (0-70) - pure Python, no AI: contact info, sections, word count, bullets, date consistency, layout density

LLM (0-30) - Claude Sonnet via tool use: action verbs, quantified impact, keyword coverage, tense, buzzwords

The interesting part - graceful degradation

If Sonnet is unavailable, the upload never fails. The system persists a deterministic-only score with a "Limited Mode" banner. The user always gets something useful.

Forced tool_choice made structured JSON output rock solid - almost zero validation failures in production.

Lessons

  • Separate deterministic from AI logic from day one
  • Forced tool use > prompt engineering for structured output
  • Ship early - real feedback beats internal tuning

Live at scoraxis.com - happy to answer questions about the architecture below.

Comments

No comments yet. Start the discussion.