⚠️ 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.
- 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
- Kanban pipeline view
- Side-by-side candidate comparison
- Referral system
- Blog with SEO-optimized articles
- Pricing page + subscription management
| 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 |
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
- Node.js 18+
- AWS account with Bedrock access (Claude 3 enabled in
us-east-2) - ElevenLabs account (free tier works)
git clone https://github.com/MoradMoqbel/kafaah.git
cd kafaah
npm installCopy .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_keynpm run devsrc/
├── 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
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:
- Builds a natural-language summary from the analysis result
- Calls ElevenLabs'
eleven_multilingual_v2model - Streams the audio back to the browser
- The client plays it via the Web Audio API
Supports both Arabic and English — same endpoint, same voice model.
MIT — built by Morad Moqbel