JunSoft
AI Interview Coach
AI Coach

AI Interview Coach

Mock Interview & Resume Review

View on App Store
Overview

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.

The Problem

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.

Screenshots

App preview

  • AI Interview Coach screenshot 1
  • AI Interview Coach screenshot 2
  • AI Interview Coach screenshot 3
  • AI Interview Coach screenshot 4
Key Features

What it does

01

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.

02

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.

03

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.

04

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).

05

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.

06

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.

07

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.

08

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.

Tech Stack

How it's built

iOS Core

Swift 6.0SwiftUISwiftData@ObservableiOS 17+

Speech & Audio

Speech (SFSpeechRecognizer)AVFoundationAVAudioEngine (tap buffer)AVSpeechSynthesizer

Commerce

StoreKit 2Free / Basic / Pro tiers

Backend

FastAPI (async)Uvicorn / GunicornPydantic 2PostgreSQL

Data & AI

SQLAlchemy 2.0 asyncasyncpgAzure OpenAI (AsyncAzureOpenAI)SSE streaming

Auth

JWT (HS256)Access / Refresh tokensApple Sign-Inbcrypt

Localization

5 languages (ko/en/ja/de/fr)Localizable.strings465 keys each

Architecture

Clean Architecture16 UseCasesRepository patternDIContainer

Testing

Swift Testing (@Test)pytest + pytest-asyncioViewInspectorXCUITest
Architecture

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. 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. 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. 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. 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. 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. 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. 7

    StoreKit 2 subscriptions: implements three tiers (Free / Basic / Pro) and tracks subscription health — trial eligibility, billing retry, and grace period — via Transaction.currentEntitlements.

By the Numbers

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