01 — The Problem
What this build solves.
01
Practice with no signal
Rehearsing an interview alone gives no read on clarity, tone, or what to change.
02
Loose feedback
A free-form chat reply is hard to act on. The scorer should return a fixed shape: clarity, feedback, character, skills, and sentiment.
03
Speech before scoring
A self-intro is spoken. The model needs a transcript before it can judge the content.
04
Tips vs live practice
The same conversation has to tell “give me tips” apart from “I’m ready to speak.”
02 — How It Works
Architecture at a glance.
CORS for an Angular client on port 4200. GET /, POST /self_intro/, POST /interact/
The self-intro path transcribes a local audio file, then passes the text into the prompt
Templates for intro scoring, intent classification, tips, and a practice conversation
Classify the query, then return chat tips or continue practice. Replies are parsed as JSON
| Layer | Technology | Role |
|---|---|---|
| API | FastAPI / Uvicorn | Routes and CORS |
| LLM | LangChain + OpenAI | Prompt chains and JSON-shaped replies |
| Speech | AssemblyAI | Intro audio to text |
| Schema | Pydantic | Request body for the query |
| Client | Angular submodule | UI pointer; not vendored in this repo |
03 — Highlights
What ships today.
POST /self_intro/ returns structured intro feedback
POST /interact/ splits tips from live practice
LangChain prompt chains with a string output parser
AssemblyAI speech-to-text on the intro path
Pydantic request body (query, 1000 character cap)
CORS opened for an Angular client on port 4200
04 — Status
Build status — API in place.
✓
Completed
Self-intro and interact routes
✓
Completed
Prompts for scoring, classification, tips, and conversation
✓
Completed
AssemblyAI transcription helper
○
Open
Angular UI is a git submodule and is not in the public tree
○
Open
Intro transcription still points at a local audio path