# rohinbhatti03/ai_interviewer architecture

> Architecture diagram of the GitHub repository rohinbhatti03/ai_interviewer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rohinbhatti03/ai_interviewer
- Repository: https://github.com/rohinbhatti03/ai_interviewer

## Overview

This is an AI-powered technical interview practice app. A candidate configures an interview, optionally supplies a resume, answers generated oral or coding questions, receives per-answer evaluation and adaptive follow-ups, and gets a session report. The frontend context coordinates the session and calls the FastAPI service through a shared API client. The backend excerpt documents resume-aware questions, transcription, scoring, reporting, and spoken interviewer audio. Backend implementation details and some UI wiring are unsampled, so those links are limited to documented API capabilities.

Main entry points: [`back-end/main.py`](https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py) (FastAPI service), [`front-end/app/page.tsx`](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/app/page.tsx) (Interview app), [`front-end/lib/api.ts`](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/lib/api.ts) (API client), [`front-end/components/interview-room.tsx`](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/interview-room.tsx) (Interview room)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Interview experience"]
  node_page["Interview app<br/>[page.tsx]"]
  node_landing["Landing<br/>[landing.tsx]"]
  node_setup["Interview setup"]
  node_resume["Resume upload<br/>[resume-upload.tsx]"]
  node_room["Interview room<br/>[interview-room.tsx]"]
  node_editor["Code editor<br/>[code-editor.tsx]"]
  node_recorder["Audio recorder<br/>[audio-recorder.tsx]"]
  node_reportui["Report view"]
end

subgraph group_coordination["Session coordination"]
  node_context["Interview state"]
  node_client["API client<br/>[api.ts]"]
  node_types["API types<br/>[types.ts]"]
end

subgraph group_service["Interview service"]
  node_backend["FastAPI service<br/>[main.py]"]
  node_resumeparse["Resume parsing<br/>[main.py]"]
  node_questions["Question generation<br/>[main.py]"]
  node_followup["Follow-up decision<br/>[main.py]"]
  node_evaluation["Answer evaluation<br/>[main.py]"]
  node_sessionreport["Session report<br/>[main.py]"]
  node_speech["Speech services<br/>[main.py]"]
end

subgraph group_integrations["AI integrations"]
  node_llm{{"Groq language model"}}
  node_speechsvc{{"Speech models"}}
end

node_candidate(("Candidate"))

node_candidate -->|"uses"| node_page
node_page -->|"renders provider"| node_context
node_page -->|"renders"| node_landing
node_page -->|"renders"| node_setup
node_page -->|"renders"| node_room
node_page -->|"renders"| node_reportui
node_setup -->|"offers upload"| node_resume
node_room -->|"embeds"| node_editor
node_room -.->|"offers recording"| node_recorder
node_context -->|"requests interview APIs"| node_client
node_resume -->|"parses resume"| node_client
node_recorder -.->|"transcribes audio"| node_client
node_client -->|"HTTP requests"| node_backend
node_backend -->|"dispatches"| node_resumeparse
node_backend -->|"dispatches"| node_questions
node_backend -->|"dispatches"| node_followup
node_backend -->|"dispatches"| node_evaluation
node_backend -->|"dispatches"| node_sessionreport
node_backend -->|"dispatches"| node_speech
node_resumeparse -->|"extracts summary"| node_llm
node_questions -->|"generates questions"| node_llm
node_followup -->|"decides next step"| node_llm
node_evaluation -->|"scores answer"| node_llm
node_sessionreport -->|"summarizes session"| node_llm
node_speech -->|"transcribes or synthesizes"| node_speechsvc

click node_page "https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/app/page.tsx"
click node_landing "https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/landing.tsx"
click node_setup "https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/interview-setup.tsx"
click node_resume "https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/resume-upload.tsx"
click node_room "https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/interview-room.tsx"
click node_editor "https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/code-editor.tsx"
click node_recorder "https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/audio-recorder.tsx"
click node_reportui "https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/interview-report.tsx"
click node_context "https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/lib/interview-context.tsx"
click node_client "https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/lib/api.ts"
click node_types "https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/lib/types.ts"
click node_backend "https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py"
click node_resumeparse "https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py"
click node_questions "https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py"
click node_followup "https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py"
click node_evaluation "https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py"
click node_sessionreport "https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py"
click node_speech "https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_page,node_landing,node_setup,node_resume,node_room,node_editor,node_recorder,node_reportui toneBlue
class node_context,node_client,node_types toneAmber
class node_backend,node_resumeparse,node_questions,node_followup,node_evaluation,node_sessionreport,node_speech toneMint
class node_llm,node_speechsvc toneRose
class node_candidate toneIndigo
```

## Components

### Interview experience

- [Interview app](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/app/page.tsx): `front-end/app/page.tsx`
- [Landing](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/landing.tsx): `front-end/components/landing.tsx`
- [Interview setup](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/interview-setup.tsx): `front-end/components/interview-setup.tsx`
- [Resume upload](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/resume-upload.tsx): `front-end/components/resume-upload.tsx`
- [Interview room](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/interview-room.tsx): `front-end/components/interview-room.tsx`
- [Code editor](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/code-editor.tsx): `front-end/components/code-editor.tsx`
- [Audio recorder](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/audio-recorder.tsx): `front-end/components/audio-recorder.tsx`
- [Report view](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/components/interview-report.tsx): `front-end/components/interview-report.tsx`

### Session coordination

- [Interview state](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/lib/interview-context.tsx): `front-end/lib/interview-context.tsx`
- [API client](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/lib/api.ts): `front-end/lib/api.ts`
- [API types](https://github.com/rohinbhatti03/ai_interviewer/blob/main/front-end/lib/types.ts): `front-end/lib/types.ts`

### Interview service

- [FastAPI service](https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py): `back-end/main.py`
- [Resume parsing](https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py): `back-end/main.py`
- [Question generation](https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py): `back-end/main.py`
- [Follow-up decision](https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py): `back-end/main.py`
- [Answer evaluation](https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py): `back-end/main.py`
- [Session report](https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py): `back-end/main.py`
- [Speech services](https://github.com/rohinbhatti03/ai_interviewer/blob/main/back-end/main.py): `back-end/main.py`

### AI integrations

- **Groq language model**
- **Speech models**

### Other components

- **Candidate**

## Connections

- Candidate → Interview app: uses
- Interview app → Interview state: renders provider
- Interview app → Landing: renders
- Interview app → Interview setup: renders
- Interview app → Interview room: renders
- Interview app → Report view: renders
- Interview setup → Resume upload: offers upload
- Interview room → Code editor: embeds
- Interview room → Audio recorder: offers recording
- Interview state → API client: requests interview APIs
- Resume upload → API client: parses resume
- Audio recorder → API client: transcribes audio
- API client → FastAPI service: HTTP requests
- FastAPI service → Resume parsing: dispatches
- FastAPI service → Question generation: dispatches
- FastAPI service → Follow-up decision: dispatches
- FastAPI service → Answer evaluation: dispatches
- FastAPI service → Session report: dispatches
- FastAPI service → Speech services: dispatches
- Resume parsing → Groq language model: extracts summary
- Question generation → Groq language model: generates questions
- Follow-up decision → Groq language model: decides next step
- Answer evaluation → Groq language model: scores answer
- Session report → Groq language model: summarizes session
- Speech services → Speech models: transcribes or synthesizes
