This release introduces 6 new features and 6 improvements including OCR-based CV processing for scanned documents, live voice interviews powered by OpenAI Realtime, full Arabic (RTL) localization, candidate search and filtering, bulk candidate deletion, and real-time job tracking via Server-Sent Events.
Parse Scanned CVs and Image-Based PDFs with Full Edit Support
The CV processing pipeline now includes OCR (Optical Character Recognition) to handle scanned documents and image-based PDFs that previously could not be parsed. A multi-strategy extraction approach ensures maximum compatibility across all CV formats.
Multi-Strategy Extraction Pipeline:
| Strategy | Use Case |
|---|---|
| pdf-parse | Standard text-based PDFs (fastest) |
| PDF.js | Complex layouts and formatting |
| Binary extraction | Direct text parsing from PDF structure |
| Tesseract OCR | Scanned/image-based PDFs (fallback) |
How It Works:
1. CV is uploaded and stored in S3
2. The system attempts text extraction using pdf-parse, then PDF.js, then binary extraction
3. If all text-based methods fail, the first page is converted to an image and processed with Tesseract OCR
4. Extracted text is parsed into structured candidate data using AI (Claude)
5. Candidate profile is created with all extracted fields available for review and editing
Editable Extracted Fields:
Supported Formats: PDF (text-based and scanned/image), DOCX
Live Voice Interviews Powered by OpenAI Realtime
Interviews are now powered by OpenAI's Realtime model (`gpt-realtime-1.5`), enabling natural, low-latency voice conversations. This replaces the previous multi-component pipeline (separate VAD + STT + LLM + TTS) with a single unified speech-to-speech model.
Key Capabilities:
Interview Modes:
1. Candidate Mode (default): AI acts as the interviewer, the human is the candidate
2. Interviewer Practice Mode: AI acts as a realistic candidate with a full persona — experience level, salary expectations, communication style, strengths, and weaknesses — so recruiters can practice interviewing skills
Optional Avatar Integration:
Interview Flow:
1. Parse interview metadata and generate mode-specific prompts
2. Connect to LiveKit room and wait for participant
3. Create interview agent with instructions and semantic VAD
4. Initialize avatar session (if configured)
5. Start real-time transcript capture with speaker identification
6. Deliver interview greeting and begin conversation
Collect Candidate Salary Expectations During Interviews
A new salary expectation question has been added as Step 5 in the 6-step AI interview flow. The question is asked conversationally after job-specific questions and before the closing, ensuring a natural flow.
Interview Structure:
1. Warm Welcome & Greeting
2. Get to Know the Candidate
3. Understand Their Interest
4. Job-Specific Questions
5. Salary Expectations (new)
6. Warm Closing & Next Steps
How It Works:
Individual and Bulk Delete for Candidate Applications
Recruiters can now delete candidate applications individually or in bulk, with proper cascade cleanup and confirmation safeguards.
Individual Deletion:
Bulk Deletion:
Safety Features:

Job applicants table in delete mode with multi-select checkboxes and "Delete Selected" action
Full Arabic Localization with Right-to-Left Layout
The entire application now supports Arabic with complete right-to-left (RTL) layout, covering all UI elements, navigation, forms, and content areas.
Scope:
Supported Locales:
| Locale | Direction | Font |
|---|---|---|
| English (en) | LTR | Geist Sans |
| Arabic (ar) | RTL | Noto Sans Arabic |
Technical Implementation:

Application interface in Arabic with full RTL layout, Arabic navigation, and properly mirrored UI elements
Find Candidates by Name, Location, and Language with Status Filtering
The job applicants tab now includes a real-time search bar and status filter dropdown, making it easy to find specific candidates in large applicant pools.
Search Capabilities:
Status Filter:
Filter applicants by any of 13 statuses:
Smart Sorting:
Quick Stats Grid:
A statistics bar displays counts for key statuses at a glance — Total, Pending, Shortlisted, Interviewed, Review Done, and Awaiting Evaluation.

Job applicants tab with search bar, status filter dropdown, and quick stats grid
Instant Updates Replace Polling Across the Application
All job tracking components have been upgraded from periodic polling (2–10 second intervals) to Server-Sent Events (SSE), delivering instant updates when job states change.
Components Upgraded:
| Component | Before | After |
|---|---|---|
| Upload Center | 2s polling | Instant SSE push |
| Candidate Scan Progress | 5s polling | Real-time progress |
| Upload History Dialog | 10s polling | Live status updates |
| Job Applicants List | 10s polling | Instant refresh on change |
| Notifications | Polling | Real-time toast alerts |
How It Works:
Connection Management:
Benefits:
Manually Adjust AI-Generated Scores and Evaluations
AI-generated candidate evaluations can now be edited by the job owner, allowing manual adjustments to scores, grades, and recommendations with a full audit trail.
Editable Fields in AI Interview Summary:
Editable Fields in AI Review Summary:
How It Works:
1. Click the "Edit" button to open the edit modal
2. Adjust scores using sliders, modify text in textareas, select grades from dropdowns
3. Click "Save Changes" to submit updates via PATCH API
4. Changes are logged with full audit trail (before/after values, timestamp, user)
Authorization: Only the job owner can edit AI evaluations. All changes are logged with `createAuditLog()` for compliance.

Edit modal for AI Review Summary showing score slider, recommendation text, and editable strengths/concerns
Claude 4.5 Sonnet for Higher-Quality Interview Questions
Interview question generation has been upgraded from the previous model to Claude 4.5 Sonnet via OpenRouter, producing more context-aware and structured interview questions.
What Changed:
Updated Question Schema:
Each generated question includes:
Benefits:
Dynamic Version Number in the UI
The application version is now displayed dynamically in the UI, pulled from the latest release notes metadata. A REST API endpoint (`GET /api/version`) provides the current version for any client.
How It Works:
Move the Upload Widget to Prevent UI Overlap
The Upload Center widget is now draggable, allowing users to reposition it anywhere on the screen. This resolves the issue where the widget would cover the "Create Job" or "Publish Job" buttons.
How It Works:
Drag Handle:
Automatic Failure Detection Prevents Stuck Jobs
An `onFailure` handler has been added to the base Inngest job configuration, ensuring that jobs are automatically marked as failed in the database when all retry attempts are exhausted.
Problem Solved:
Without this handler, jobs could remain in a perpetual "processing" state if all retries failed silently, leaving users with no feedback and no way to identify the issue.
How It Works:
1. Each Inngest job is configured with a retry count (default: 3 attempts)
2. If all retries are exhausted, the `onFailure` handler fires automatically
3. The handler updates the `JobTracking` table with status `'failed'` and an error message
4. A real-time broadcast notifies the user via SSE so the failure appears immediately in the UI
5. Fallback broadcasts ensure notifications are sent even if the database update fails
Benefits:
Released on April 03, 2026
View all releases