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.
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.
A single job posting can receive 200+ applications. Manual screening each resume takes 6–8 minutes on average.
Different reviewers evaluate resumes differently. Bias, fatigue, and varying criteria lead to inconsistent hiring decisions.
Candidates wait days or weeks to hear back — hurting employer brand and causing top candidates to accept other offers.
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?
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.
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 │
└─────────────────────────────┘
Custom AI agent built with OpenAI Async API. Uses ATS Scoring (0–100) with weighted criteria:
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.
Database-level constraint prevents the same candidate email from applying twice to the same job — maintaining data integrity without additional application-level code.
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.
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.
Supabase (PostgreSQL) with 3 core tables and a file storage bucket for resume PDFs.
| Table | Purpose |
|---|---|
hr_users | Stores HR profiles linked to Supabase Auth |
jobs | Job postings with skills, experience requirements, and unique apply link UUID |
applications | Candidate 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.
| Layer | Platform | Notes |
|---|---|---|
| Frontend | Vercel | Auto-deploy from GitHub on push to main |
| Backend | Hugging Face Spaces | Docker container — free CPU hosting for ML-adjacent apps |
| Database | Supabase (managed PostgreSQL) | Auth + row-level security enabled |
| File Storage | Supabase Storage | PDF resumes stored in resumes bucket |
response_format: {"type": "json_object"} parameter + strict system prompt to always return raw JSON only.
pdfplumber returns empty text, the system raises a clear ValueError before calling OpenAI, saving API costs and giving users a clear error message.
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.
Designing prompts that produce reliable, parseable structured output requires careful iteration. Small wording changes can cause large output format differences.
Building with AsyncOpenAI and FastAPI's async request handling allowed AI analysis to run without blocking other requests — critical for scalability.
Coordinating auth state between Next.js SSR, Supabase Auth, and a separate FastAPI backend required careful token handling and API design.
Removing the candidate account requirement was a deliberate UX decision that dramatically reduces friction — no code elegance matters if users don't convert.
We build custom AI automation platforms that save time, reduce costs, and scale effortlessly.