
AI Interview Coach
Mock Interview & Resume Review
Proba is an iOS interview-prep coach that unifies voice-based AI mock interviews and resume review into one pipeline. As you speak, SFSpeechRecognizer transcribes in real time while audio buffers from an AVAudioEngine tap drive on-device quantitative analysis of pace, filler words, and confidence. In parallel, a FastAPI + Azure OpenAI backend evaluates answer content, analyzes resumes to auto-generate likely questions, and tailors preparation to company-specific interview patterns.
Practicing alone makes it hard to objectively spot weaknesses in interview answers, and resumes often stay disconnected from the questions that actually get asked. Proba quantifies spoken answers on-device (WPM, filler words, silence, confidence score) and derives likely questions from your resume, closing that gap in the prep process.
App preview
What it does
Voice-Based AI Mock Interview
SFSpeechRecognizer paired with AVAudioEngine transcribes answers in real time with partial results, while the backend AI generates role-tailored questions and plays the interviewer. The recognition language follows the device locale automatically.
Four-Type Follow-Up Questions
Based on answer quality, it follows up with four question types — clarification, deeper exploration, challenge/pressure, and situational variation — reproducing the escalating flow of a real interview.
On-Device Speech Delivery Analysis
From the AVAudioEngine tap buffer it measures RMS-based decibels, speaking pace (WPM), 14 Korean and 11 English filler-word patterns, and silent gaps (−40 dB / 0.5 s threshold) in real time — all processed on the device with no network.
Confidence Score & Rule-Based Coaching
A weighted rubric — pace (30 pts, optimal 120–160 WPM), fillers (30), silence ratio (20), answer length (20) — yields a 0–100 confidence score, and an on-device coach surfaces per-category tips across three severity levels (good / needs-work / critical).
Resume Analysis & Streaming Cover Letter
The backend AI scores resumes with category feedback, keyword matching, and line-level suggestions, then drafts cover letters via SSE streaming (consumed as an AsyncThrowingStream) so text arrives line by line, easing the writing burden.
Resume-to-Interview Pipeline
It auto-generates predicted interview questions from the analyzed resume, sorted by likelihood (high/medium/low), and derives consistency warnings from the resume content itself — keeping the prep flow continuous.
Company DNA Mode & Job-Posting Parsing
It provides predicted questions reflecting company-specific interview stages, formats, evaluation criteria, and culture keywords, and parses job-posting URLs — recognizing major boards (Saramin, JobKorea, Wanted, LinkedIn, Incruit, Catch) to generate role-tailored questions.
Gamification Dashboard
A 0–100 readiness score (weighting practice volume, average score, streak, and time) with five levels, streaks, and 10 badge types is visualized in a dashboard to encourage consistent practice.
How it's built
iOS Core
Speech & Audio
Commerce
Backend
Data & AI
Auth
Localization
Architecture
Testing
The iOS app follows Clean Architecture split into Domain / Data / Features (Presentation) / Infrastructure / Core, while the Python backend is an async FastAPI server that owns all LLM calls and persistence. The Domain layer is pure struct entities and UseCases depending only on Foundation, assembled by a DIContainer. Responsibilities are split: speech analysis runs on-device, content evaluation runs on the server LLM.
- 1
UseCase + Repository pattern: 16 UseCases encapsulate domain rules across interview, resume, company, and gamification flows, with data access abstracted behind Repository protocols to keep layers loosely coupled.
- 2
On-device speech-evaluation pipeline: each AVAudioEngine tap buffer is dual-routed to SFSpeechRecognizer and a SpeechAnalyzer, measuring RMS decibels, WPM, fillers, and silence in real time with no network, while AnalyzeSpeechUseCase derives a confidence score from a weighted rubric.
- 3
Server-side AI evaluation pipeline: the FastAPI backend's AsyncAzureOpenAI client handles question generation, answer feedback, and resume analysis, producing structured JSON responses with per-task temperatures and five-language system prompts.
- 4
Streaming cover-letter generation: cover letters stream chunk-by-chunk over Server-Sent Events, consumed on the client as an AsyncThrowingStream, with the full text persisted in a separate session once the stream completes.
- 5
Fully async data layer: PostgreSQL is accessed via asyncpg and SQLAlchemy 2.0 async (AsyncSession, typed Mapped ORM), with every route handler being async def. Authentication uses JWT (HS256) access/refresh tokens plus Apple Sign-In.
- 6
Five-language parity localization: ko/en/ja/de/fr Localizable.strings are kept fully consistent at 465 keys per language, and backend system prompts branch across the same language set.
- 7
StoreKit 2 subscriptions: implements three tiers (Free / Basic / Pro) and tracks subscription health — trial eligibility, billing retry, and grace period — via Transaction.currentEntitlements.
5 (ko/en/ja/de/fr)
Supported Languages
465 / lang
Localization Keys
511 + 176
Tests
16
Use Cases
120
Swift Files
3 (Free/Basic/Pro)
Subscription Tiers



