Case study
Vaktora
AI-powered interview preparation platform
- Role
- Full Stack Developer
- Status
- Live on Google Play
- Year
- 2026
- Organization
- Kaziva
01
Overview
Vaktora turns interview preparation from guesswork into a guided routine. A candidate picks the role they are targeting, faces questions tailored to it (including questions drawn from their own resume), answers out loud, and receives an AI evaluation with a score, strengths and specific fixes. Every session becomes a report they can review, and their skill profile updates over time.
Vaktora is the first product of Kaziva, a software products company I am building.
- 200+
- concurrent live sessions
- <100ms
- event delivery latency
- 40%
- faster evaluation pipeline
- 35%
- faster API responses
- 5,000+
- real-time events per session
- <10 min
- deploys, down from 45 min
02
Problem
Interview practice usually means rehearsing generic question lists with no feedback on how you actually speak and no way to measure improvement. On the other side, interviewers and institutions running live sessions need infrastructure that stays responsive with hundreds of people connected at once and evaluations that do not stall the experience.
03
Product
- Role- and job-based mock interviews across categories such as HR & Behavioral, Communication, Resume & Experience and Problem Solving
- Resume-based questions generated from the candidate's own experience
- Spoken-answer practice with recording, transcript and playback
- AI feedback and scored reports: an overall grade, written feedback and per-category scores such as communication, confidence, grammar and relevance
- Beginner, Intermediate and Advanced difficulty levels for every category
- Live interview sessions with Admin, Interviewer and Candidate roles, real-time feedback streams and proctoring signals
04
My role
- Owned the product across the stack: React Native client, Node.js REST services, MongoDB data model, authentication, real-time layer, AI evaluation pipeline and deployment
- Designed the event-driven backend (Socket.IO, Redis, BullMQ) that runs live sessions and asynchronous evaluation
- Built and compared two evaluation paths (local models and OpenAI) and the routing between them
- Set up Docker packaging and CI/CD for four services, and shipped the Android app to Google Play
05
Architecture
Client
React Native app
Android app on Google Play. Records answers, streams session events, renders reports.
API & real-time
Node.js REST services
Interview, question, report and user APIs. JWT authentication with Admin, Interviewer and Candidate roles.
Socket.IO gateway
Live sessions, feedback streams, proctoring signals and push events. 5,000+ events per session.
Async & data
BullMQ workers
Evaluation jobs run off the request path so the API and live sessions stay responsive.
Redis
Session-state cache and queue backend. Caching cut API response times by 35%.
MongoDB
Sessions, answers, reports and users. Compound indexes and tuned query plans cut retrieval time by 25%.
AI layer
Whisper
Speech-to-text for recorded answers.
Kimi (local)
First-pass answer evaluation on a locally hosted open-weight model.
OpenAI API
Fallback evaluation path when the local model fails or times out.
Delivery
Docker + CI/CD
Four containerized services. Deployments went from 45 minutes to under 10.
06
AI workflow
01
Candidate answers
The app records a spoken answer to a role-specific question and uploads it with the session context.
02
Interview engine
The backend validates the session, stores the answer and enqueues an evaluation job on BullMQ.
03
Transcription
Whisper converts the recording to text so the evaluator works from a transcript.
04
LLM evaluation
A local Kimi model evaluates the answer first. If it fails or times out, the job is routed to OpenAI.
05
Scoring
The evaluation is turned into an overall score, a grade and per-category scores for the report.
06
Personalized feedback
Strengths and specific fixes are written back to the report and pushed to the app over Socket.IO.
07
Technical implementation
- REST API surface for interviews, questions, sessions, reports and user management, secured with JWT and role-based access control
- Socket.IO event model for live sessions: session lifecycle, code execution results, proctoring signals and live feedback streams
- Evaluation pipeline built on BullMQ workers with Redis as the queue and cache backend
- Model routing layer: local Kimi and Whisper as the primary path, OpenAI API as the fallback, with the evaluation contract kept identical across both
- MongoDB schemas refactored with compound indexes for session and report queries
- Docker images for each service and a CI/CD pipeline that deploys all four with no manual steps
08
Key engineering challenges & solutions
- 01
Evaluation latency was blocking the API
- Challenge
- Running LLM evaluation inside the request path tied up the API and made live sessions feel slow whenever a model call took longer than expected.
- Solution
- Moved evaluation into BullMQ workers backed by Redis. The API acknowledges immediately and results stream back when ready, cutting evaluation pipeline response time by 40%.
- 02
Real-time scale for live sessions
- Challenge
- Live sessions produce thousands of events (code execution results, proctoring signals, feedback) and hundreds of sessions can be active at once.
- Solution
- Designed an event-driven Socket.IO architecture handling 5,000+ events per session across 200+ concurrent sessions, with sub-100ms event delivery.
- 03
Depending on one hosted model
- Challenge
- A single hosted model meant every evaluation was a paid, network-dependent call, and any outage stopped scoring entirely.
- Solution
- Introduced a two-path evaluation: locally hosted Kimi for scoring and Whisper for transcription, with automatic fallback to OpenAI when the local path fails. Compared outputs from both paths to keep scoring consistent.
- 04
Slow reads on session and report data
- Challenge
- As sessions accumulated, report and session queries slowed down and repeated reads hit the database for data that rarely changed.
- Solution
- Cached session state and frequently accessed interview data in Redis (35% faster API responses) and rebuilt MongoDB indexes and query plans (25% faster document retrieval).
- 05
Manual, error-prone deployments
- Challenge
- Deploying four services by hand took around 45 minutes and was easy to get wrong.
- Solution
- Containerized every service with Docker and automated the release through CI/CD, bringing deployment time under 10 minutes.
09
Quality & evaluation
- Compared evaluations from the local Kimi path and the OpenAI path on the same answers to keep scores and feedback consistent regardless of which path served the request
- Kept the evaluation contract (score, grade, category scores, feedback) identical across both paths so the app never has to know which model produced a result
- Made evaluation asynchronous and retryable through BullMQ so a failed model call degrades to a fallback rather than a lost result
10
Screenshots
11
Technology stack
- React Native
- Node.js
- REST APIs
- Socket.IO
- MongoDB
- Redis
- BullMQ
- JWT & RBAC
- OpenAI API
- Kimi (local LLM)
- Whisper
- Docker
- CI/CD
12
Outcome
Vaktora is live on Google Play and serves as the flagship product of Kaziva. The backend sustains 200+ concurrent live sessions with sub-100ms event delivery, the evaluation pipeline responds 40% faster than the original synchronous design, and releases across four services now take under 10 minutes.
13




