AI Automation · Full-Stack

SmartHire AI —
Intelligent Resume Screening

An end-to-end AI recruitment platform that screens resumes in seconds using GPT-4o-mini — delivering personalized feedback to candidates via email while eliminating manual HR review.

Project Type Full-Stack AI App
Role Full-Stack Developer
AI Model GPT-4o-mini
Deployment Vercel + HF Spaces
SmartHire AI — Resume Screening Platform

Problem Statement

Traditional recruitment processes are slow, expensive, and inconsistent. HR teams at growing companies spend 60–80% of their hiring time manually screening resumes — a task that is fundamentally broken at scale.

Time-Consuming

A single job posting can receive 200+ applications. Manual screening each resume takes 6–8 minutes on average.

Inconsistent Evaluation

Different reviewers evaluate resumes differently. Bias, fatigue, and varying criteria lead to inconsistent hiring decisions.

Delayed Candidate Feedback

Candidates wait days or weeks to hear back — hurting employer brand and causing top candidates to accept other offers.

Unscalable

One HR manager cannot efficiently handle high-volume hiring periods without sacrificing quality or turnaround time.

The core question was: Can AI automate the first layer of resume screening while still giving candidates meaningful, personalized feedback?

Solution

SmartHire AI is an end-to-end recruitment automation platform that enables HR teams to post jobs and instantly screen every incoming resume using AI — with results delivered to candidates via email within minutes.

For HR Teams

  • Register and log in to a secure HR portal
  • Create job postings with title, description, required skills, and minimum experience
  • Each job gets a unique shareable application link
  • View all applicants with their AI scores and feedback on the dashboard

For Candidates

  • Open the job link — no account required
  • Submit name, email, and upload resume (PDF)
  • AI analyzes the resume instantly
  • Receive a detailed result email with score and feedback

Technical Architecture

The system follows a clean separation of concerns across four layers — frontend, backend API, AI agent, and data/email services.

┌─────────────────────────────────────────────────────────┐
│                 FRONTEND  (Next.js 14)                   │
│   Home → HR Login/Signup → Dashboard → Apply Page       │
│                 Tailwind CSS · TypeScript                │
└────────────────────────┬────────────────────────────────┘
                         │  REST API calls
┌────────────────────────▼────────────────────────────────┐
│                  BACKEND  (FastAPI)                      │
│   /api/hr/register    /api/jobs/create                  │
│   /api/jobs/{id}      /api/applications/submit          │
└────────┬──────────────────────────┬─────────────────────┘
         │                          │
┌────────▼────────┐      ┌──────────▼──────────────────┐
│  Supabase       │      │  AI Resume Agent             │
│  PostgreSQL DB  │      │  OpenAI GPT-4o-mini          │
│  Auth · Storage │      │  PDF Extraction (pdfplumber) │
│  (Resume files) │      │  JSON structured output      │
└─────────────────┘      └──────────┬──────────────────┘
                                     │
                          ┌──────────▼──────────────────┐
                          │  Email Service               │
                          │  Gmail SMTP                  │
                          │  Selection / Rejection Email │
                          └─────────────────────────────┘

Key Features Built

AI Resume Screening Engine

Custom AI agent built with OpenAI Async API. Uses ATS Scoring (0–100) with weighted criteria:

  • Skill match: 50%
  • Experience level: 25%
  • Education background: 15%
  • Resume quality/formatting: 10%
  • Auto decision: Score ≥ 70 → Selected, Score < 70 → Rejected

Unique Apply Links

Each job posting generates a UUID-based unique_link. HR shares it publicly. Candidates access it without creating an account — reducing friction in the application process.

Duplicate Prevention

Database-level constraint prevents the same candidate email from applying twice to the same job — maintaining data integrity without additional application-level code.

Instant Email Results

Via Gmail SMTP, candidates receive personalized emails within minutes — including their ATS score, AI feedback, and (if rejected) skill recommendations with free learning resources from Coursera, YouTube, and official docs.

HR Dashboard

Protected Next.js dashboard showing all job postings and applicants per job. HR managers see each candidate's score, status, missing skills, and AI-generated feedback at a glance.

Database Design

Supabase (PostgreSQL) with 3 core tables and a file storage bucket for resume PDFs.

TablePurpose
hr_usersStores HR profiles linked to Supabase Auth
jobsJob postings with skills, experience requirements, and unique apply link UUID
applicationsCandidate submissions with AI scores, decision status, and structured feedback

A Supabase resumes storage bucket holds uploaded PDF files, with public URLs saved per application record for later reference.

Deployment Architecture

LayerPlatformNotes
FrontendVercelAuto-deploy from GitHub on push to main
BackendHugging Face SpacesDocker container — free CPU hosting for ML-adjacent apps
DatabaseSupabase (managed PostgreSQL)Auth + row-level security enabled
File StorageSupabase StoragePDF resumes stored in resumes bucket

Challenges & How They Were Solved

Challenge 1: Inconsistent AI Output
GPT-4o-mini sometimes returned markdown-wrapped JSON or extra text, breaking parsing. Fixed by using OpenAI's response_format: {"type": "json_object"} parameter + strict system prompt to always return raw JSON only.
Challenge 2: PDF Parsing Failures
Some resumes are image-scanned PDFs with no extractable text. Implemented early detection — if pdfplumber returns empty text, the system raises a clear ValueError before calling OpenAI, saving API costs and giving users a clear error message.
Challenge 3: Candidate UX Without Auth
Requiring candidates to create accounts would reduce application rates significantly. Designed the apply flow to be completely account-free — candidates only need the job link, name, email, and resume file.
Challenge 4: CORS & Cross-Origin Requests
Next.js frontend and FastAPI backend run on different origins. Configured FastAPI CORS middleware to allow requests from the Vercel frontend domain in production, with strict origin whitelisting.

Results & Impact

Seconds Resume screened vs. hours manually
100% Consistent scoring, zero human bias
<5 min Candidate feedback delivered
Unlimited Applications with identical speed

Beyond speed, the platform turns rejections into growth opportunities — rejected candidates receive specific skill gaps with free learning resources (Coursera, YouTube, official docs) and estimated time to learn each skill.

What I Learned

1
Prompt Engineering at Scale

Designing prompts that produce reliable, parseable structured output requires careful iteration. Small wording changes can cause large output format differences.

2
Async Python

Building with AsyncOpenAI and FastAPI's async request handling allowed AI analysis to run without blocking other requests — critical for scalability.

3
Full-Stack Integration

Coordinating auth state between Next.js SSR, Supabase Auth, and a separate FastAPI backend required careful token handling and API design.

4
User-Centric Design

Removing the candidate account requirement was a deliberate UX decision that dramatically reduces friction — no code elegance matters if users don't convert.

Want a similar AI solution for your business?

We build custom AI automation platforms that save time, reduce costs, and scale effortlessly.