DEV Community

Aakash Das
Aakash Das

Posted on • Originally published at scoraxis.com

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.

Top comments (0)