Skip to content

Repository files navigation

Kafaah — AI-Powered Applicant Tracking System

⚠️ Status: Active Development — Core features are functional. Full public release coming soon.

Kafaah (كفاءة — Arabic for "competence") is an AI-native ATS built for modern hiring teams. It uses large language models to analyze resumes against job descriptions, detect fraud, generate interview questions, and now — read analysis results aloud via ElevenLabs voice AI.


✨ Features

✅ Currently Working

  • AI Resume Analysis — Upload PDF/DOCX/TXT resumes; get a 0–100% match score, strengths, skill gaps, and a recommendation (Highly Recommended → Not Recommended)
  • Bulk Upload — Analyze multiple candidates at once with per-candidate tabs
  • Fraud & Keyword-Stuffing Detection — LLM-powered detection of inflated or fabricated resumes
  • Custom Interview Questions — Auto-generated per candidate based on their actual profile vs. the job
  • Bias-Blind Mode — Strips name, gender, and demographic signals before AI evaluation for fairer hiring
  • 🔊 Voice Reports (ElevenLabs) — Press "Listen to Report" to hear the full analysis summary read aloud using ElevenLabs' multilingual v2 model (Arabic + English)
  • Auth System — Cookie-based sessions with protected routes
  • Dashboard — Candidate listing, job management, and pipeline tracking
  • Bilingual — Full Arabic (RTL) and English support with locale switching

🔧 In Progress

  • Kanban pipeline view
  • Side-by-side candidate comparison
  • Referral system
  • Blog with SEO-optimized articles
  • Pricing page + subscription management

🛠 Tech Stack

Layer Technology
Frontend Next.js 14 (App Router), TypeScript, CSS Modules
AI / LLM AWS Bedrock (Claude 3), custom prompt engineering
Voice ElevenLabs API — eleven_multilingual_v2
Database AWS DynamoDB (candidates, jobs, sessions, analyses)
Auth Custom cookie-based session system
File Parsing PDF + DOCX extraction via API route
Deployment AWS EC2 + nginx (reverse proxy)
i18n Custom locale context — Arabic (RTL) + English

🏗 Architecture Overview

User Browser
    │
    ├── /tool           → Free resume analysis (no login required)
    ├── /dashboard      → Logged-in: jobs, candidates, pipeline
    ├── /login /signup  → Auth pages
    └── /blog /pricing  → Marketing pages
    
Next.js API Routes
    ├── /api/analyze    → Calls AWS Bedrock (Claude), saves to DynamoDB
    ├── /api/speak      → Calls ElevenLabs TTS, streams audio/mpeg
    ├── /api/parse-file → Extracts text from PDF/DOCX
    ├── /api/auth       → Session management
    ├── /api/jobs       → Jobs CRUD
    └── /api/candidates → Candidate management

AWS
    ├── Bedrock (Claude 3) — resume analysis
    └── DynamoDB — all persistent data (users, jobs, candidates, analyses)

ElevenLabs
    └── eleven_multilingual_v2 — Arabic + English voice reports

🚀 Getting Started (Local Development)

Prerequisites

  • Node.js 18+
  • AWS account with Bedrock access (Claude 3 enabled in us-east-2)
  • ElevenLabs account (free tier works)

1. Clone & Install

git clone https://github.com/MoradMoqbel/kafaah.git
cd kafaah
npm install

2. Environment Variables

Copy .env.example to .env.local and fill in your keys:

cp .env.example .env.local
# AWS
AWS_REGION=us-east-2
AWS_ACCESS_KEY_ID=your_key
AWS_SECRET_ACCESS_KEY=your_secret
DYNAMODB_TABLE_PREFIX=kafaah_dev_

# App
NEXT_PUBLIC_APP_URL=http://localhost:3000
NEXTAUTH_SECRET=your_random_32char_secret

# ElevenLabs (for voice reports)
ELEVENLABS_API_KEY=sk_your_elevenlabs_key

3. Run

npm run dev

Open http://localhost:3000


📁 Project Structure

src/
├── app/
│   ├── api/
│   │   ├── analyze/      # Resume analysis (AWS Bedrock)
│   │   ├── speak/        # Voice TTS (ElevenLabs)
│   │   ├── parse-file/   # PDF/DOCX extraction
│   │   ├── auth/         # Session auth
│   │   ├── jobs/         # Jobs CRUD
│   │   └── candidates/   # Candidates CRUD
│   ├── tool/             # Free public analysis page
│   ├── dashboard/        # Protected dashboard
│   ├── login/ signup/    # Auth pages
│   ├── blog/             # SEO blog
│   └── pricing/          # Plans page
├── components/           # Shared UI components
├── contexts/             # Locale + auth contexts
├── lib/
│   ├── bedrock.ts        # AWS Bedrock client + prompts
│   ├── dynamodb.ts       # DynamoDB operations
│   ├── i18n.ts           # Translations (AR/EN)
│   └── nameExtractor.ts  # Resume name extraction
└── types/                # TypeScript types

🎙 ElevenLabs Integration

After a resume analysis completes, users can click 🔊 Listen to Report to hear an AI-generated audio summary:

POST /api/speak
Body: { text: "Analysis result for John Doe: Match score 87 percent...", locale: "en" }
Response: audio/mpeg stream

The /api/speak route:

  1. Builds a natural-language summary from the analysis result
  2. Calls ElevenLabs' eleven_multilingual_v2 model
  3. Streams the audio back to the browser
  4. The client plays it via the Web Audio API

Supports both Arabic and English — same endpoint, same voice model.


📄 License

MIT — built by Morad Moqbel

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages