# 4r1n0930/impression architecture

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

- Interactive diagram: https://gitdiagram.com/4r1n0930/impression
- Repository: https://github.com/4r1n0930/impression

## Overview

This is a browser-based AI-assisted interview platform. Interviewers and candidates join configured rooms; live audio is transcribed, interviewer speech is classified as a question, and candidate answers are evaluated while follow-up suggestions are generated. The UI also exposes account, room setup, and feedback/reporting stages. The graph reflects documented routes and sampled runtime calls; several frontend-to-backend interactions and unsampled subsystems are not shown where their wiring is unverified.

Main entry points: [`frontend/src/App.tsx`](https://github.com/4r1n0930/impression/blob/main/frontend/src/App.tsx) (Route application), [`backend/src/controller/InterviewController.js`](https://github.com/4r1n0930/impression/blob/main/backend/src/controller/InterviewController.js) (Interview orchestration), [`frontend/src/pages/InterviewRoom.tsx`](https://github.com/4r1n0930/impression/blob/main/frontend/src/pages/InterviewRoom.tsx) (Interviewer room), [`backend/server.js`](https://github.com/4r1n0930/impression/blob/main/backend/server.js) (HTTP and socket server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_app["Route application<br/>[App.tsx]"]
  node_dashboard["Dashboard<br/>[Dashboard.tsx]"]
  node_roomconfig["Room setup<br/>[RoomConfig.tsx]"]
  node_interviewroom["Interviewer room<br/>[InterviewRoom.tsx]"]
  node_interviewee["Candidate room<br/>[Interviewee.tsx]"]
  node_feedbackui["Feedback report<br/>[Feedback.tsx]"]
  node_authui["Authentication UI<br/>[AuthOverlay.tsx]"]
end

subgraph group_realtime["Live interview"]
  node_audio["Audio capture<br/>[AudioCapture.ts]"]
  node_socket["Socket client<br/>[socket.ts]"]
  node_server["HTTP and socket server<br/>[server.js]"]
  node_deepgram["Speech transcription<br/>[deepgramService.js]"]
  node_transcripts["Transcript buffering"]
  node_livekit["LiveKit service<br/>[livekitService.js]"]
end

subgraph group_intelligence["Interview intelligence"]
  node_interviewcontroller["Interview orchestration"]
  node_questionagent["Question classification<br/>[QuestionAgent.js]"]
  node_evaluationagent["Answer evaluation<br/>[EvaluationAgent.js]"]
  node_nextagent["Follow-up suggestions"]
  node_feedbackagent["Overall assessment<br/>[FeedbackAgent.js]"]
  node_interviewroutes["Interview endpoints<br/>[interviewRoutes.js]"]
end

subgraph group_accounts["Accounts and rooms"]
  node_authroutes["Auth endpoints<br/>[authRoutes.js]"]
  node_userstore[("User records<br/>[User.js]")]
  node_roomroutes["Room endpoints<br/>[roomRoutes.js]"]
  node_roomcontroller["Room management<br/>[RoomController.js]"]
  node_roomservice["Room service<br/>[RoomService.js]"]
  node_roomstore[("Room records<br/>[Room.js]")]
  node_tokenroutes["Meeting token API<br/>[apiRoutes.js]"]
end

node_user(("Participant"))

node_user -->|"uses"| node_app
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_roomconfig
node_app -->|"routes to"| node_interviewroom
node_app -->|"routes to"| node_interviewee
node_app -->|"routes to"| node_feedbackui
node_app -.->|"uses"| node_authui
node_interviewroom -->|"captures audio"| node_audio
node_interviewee -->|"captures audio"| node_audio
node_audio -.->|"emits PCM"| node_socket
node_socket -.->|"connects"| node_server
node_server -->|"opens connection"| node_deepgram
node_server -->|"forwards transcripts"| node_transcripts
node_transcripts -->|"dispatches speech"| node_interviewcontroller
node_interviewcontroller -->|"classifies speech"| node_questionagent
node_interviewcontroller -->|"evaluates answer"| node_evaluationagent
node_interviewcontroller -->|"generates suggestions"| node_nextagent
node_interviewroutes -->|"reads evaluations"| node_interviewcontroller
node_interviewroutes -->|"builds assessment"| node_feedbackagent
node_authroutes -->|"reads and updates"| node_userstore
node_roomroutes -->|"routes requests"| node_roomcontroller
node_roomcontroller -->|"creates room"| node_roomservice
node_roomcontroller -->|"reads room"| node_roomstore
node_roomservice -->|"persists room"| node_roomstore
node_interviewroom -->|"requests token"| node_tokenroutes
node_tokenroutes -->|"validates room"| node_roomstore
node_tokenroutes -->|"generates token"| node_livekit

click node_app "https://github.com/4r1n0930/impression/blob/main/frontend/src/App.tsx"
click node_dashboard "https://github.com/4r1n0930/impression/blob/main/frontend/src/pages/Dashboard.tsx"
click node_roomconfig "https://github.com/4r1n0930/impression/blob/main/frontend/src/pages/RoomConfig.tsx"
click node_interviewroom "https://github.com/4r1n0930/impression/blob/main/frontend/src/pages/InterviewRoom.tsx"
click node_interviewee "https://github.com/4r1n0930/impression/blob/main/frontend/src/pages/Interviewee.tsx"
click node_feedbackui "https://github.com/4r1n0930/impression/blob/main/frontend/src/pages/Feedback.tsx"
click node_authui "https://github.com/4r1n0930/impression/blob/main/frontend/src/components/auth/AuthOverlay.tsx"
click node_audio "https://github.com/4r1n0930/impression/blob/main/frontend/src/audio/AudioCapture.ts"
click node_socket "https://github.com/4r1n0930/impression/blob/main/frontend/src/socket.ts"
click node_server "https://github.com/4r1n0930/impression/blob/main/backend/server.js"
click node_deepgram "https://github.com/4r1n0930/impression/blob/main/backend/src/services/deepgramService.js"
click node_transcripts "https://github.com/4r1n0930/impression/blob/main/backend/src/services/transcriptService.js"
click node_interviewcontroller "https://github.com/4r1n0930/impression/blob/main/backend/src/controller/InterviewController.js"
click node_questionagent "https://github.com/4r1n0930/impression/blob/main/backend/src/agents/QuestionAgent.js"
click node_evaluationagent "https://github.com/4r1n0930/impression/blob/main/backend/src/agents/EvaluationAgent.js"
click node_nextagent "https://github.com/4r1n0930/impression/blob/main/backend/src/agents/NextQuestionAgent.js"
click node_feedbackagent "https://github.com/4r1n0930/impression/blob/main/backend/src/agents/FeedbackAgent.js"
click node_interviewroutes "https://github.com/4r1n0930/impression/blob/main/backend/src/routes/interviewRoutes.js"
click node_authroutes "https://github.com/4r1n0930/impression/blob/main/backend/src/routes/authRoutes.js"
click node_userstore "https://github.com/4r1n0930/impression/blob/main/backend/src/models/User.js"
click node_roomroutes "https://github.com/4r1n0930/impression/blob/main/backend/src/routes/roomRoutes.js"
click node_roomcontroller "https://github.com/4r1n0930/impression/blob/main/backend/src/controller/RoomController.js"
click node_roomservice "https://github.com/4r1n0930/impression/blob/main/backend/src/services/RoomService.js"
click node_roomstore "https://github.com/4r1n0930/impression/blob/main/backend/src/models/Room.js"
click node_tokenroutes "https://github.com/4r1n0930/impression/blob/main/backend/src/routes/apiRoutes.js"
click node_livekit "https://github.com/4r1n0930/impression/blob/main/backend/src/services/livekitService.js"

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_app,node_dashboard,node_roomconfig,node_interviewroom,node_interviewee,node_feedbackui,node_authui toneBlue
class node_audio,node_socket,node_server,node_deepgram,node_transcripts,node_livekit toneAmber
class node_interviewcontroller,node_questionagent,node_evaluationagent,node_nextagent,node_feedbackagent,node_interviewroutes toneMint
class node_authroutes,node_userstore,node_roomroutes,node_roomcontroller,node_roomservice,node_roomstore,node_tokenroutes toneRose
class node_user toneIndigo
```

## Components

### Web application

- [Route application](https://github.com/4r1n0930/impression/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Dashboard](https://github.com/4r1n0930/impression/blob/main/frontend/src/pages/Dashboard.tsx): `frontend/src/pages/Dashboard.tsx`
- [Room setup](https://github.com/4r1n0930/impression/blob/main/frontend/src/pages/RoomConfig.tsx): `frontend/src/pages/RoomConfig.tsx`
- [Interviewer room](https://github.com/4r1n0930/impression/blob/main/frontend/src/pages/InterviewRoom.tsx): `frontend/src/pages/InterviewRoom.tsx`
- [Candidate room](https://github.com/4r1n0930/impression/blob/main/frontend/src/pages/Interviewee.tsx): `frontend/src/pages/Interviewee.tsx`
- [Feedback report](https://github.com/4r1n0930/impression/blob/main/frontend/src/pages/Feedback.tsx): `frontend/src/pages/Feedback.tsx`
- [Authentication UI](https://github.com/4r1n0930/impression/blob/main/frontend/src/components/auth/AuthOverlay.tsx): `frontend/src/components/auth/AuthOverlay.tsx`

### Live interview

- [Audio capture](https://github.com/4r1n0930/impression/blob/main/frontend/src/audio/AudioCapture.ts): `frontend/src/audio/AudioCapture.ts`
- [Socket client](https://github.com/4r1n0930/impression/blob/main/frontend/src/socket.ts): `frontend/src/socket.ts`
- [HTTP and socket server](https://github.com/4r1n0930/impression/blob/main/backend/server.js): `backend/server.js`
- [Speech transcription](https://github.com/4r1n0930/impression/blob/main/backend/src/services/deepgramService.js): `backend/src/services/deepgramService.js`
- [Transcript buffering](https://github.com/4r1n0930/impression/blob/main/backend/src/services/transcriptService.js): `backend/src/services/transcriptService.js`
- [LiveKit service](https://github.com/4r1n0930/impression/blob/main/backend/src/services/livekitService.js): `backend/src/services/livekitService.js`

### Interview intelligence

- [Interview orchestration](https://github.com/4r1n0930/impression/blob/main/backend/src/controller/InterviewController.js): `backend/src/controller/InterviewController.js`
- [Question classification](https://github.com/4r1n0930/impression/blob/main/backend/src/agents/QuestionAgent.js): `backend/src/agents/QuestionAgent.js`
- [Answer evaluation](https://github.com/4r1n0930/impression/blob/main/backend/src/agents/EvaluationAgent.js): `backend/src/agents/EvaluationAgent.js`
- [Follow-up suggestions](https://github.com/4r1n0930/impression/blob/main/backend/src/agents/NextQuestionAgent.js): `backend/src/agents/NextQuestionAgent.js`
- [Overall assessment](https://github.com/4r1n0930/impression/blob/main/backend/src/agents/FeedbackAgent.js): `backend/src/agents/FeedbackAgent.js`
- [Interview endpoints](https://github.com/4r1n0930/impression/blob/main/backend/src/routes/interviewRoutes.js): `backend/src/routes/interviewRoutes.js`

### Accounts and rooms

- [Auth endpoints](https://github.com/4r1n0930/impression/blob/main/backend/src/routes/authRoutes.js): `backend/src/routes/authRoutes.js`
- [User records](https://github.com/4r1n0930/impression/blob/main/backend/src/models/User.js): `backend/src/models/User.js`
- [Room endpoints](https://github.com/4r1n0930/impression/blob/main/backend/src/routes/roomRoutes.js): `backend/src/routes/roomRoutes.js`
- [Room management](https://github.com/4r1n0930/impression/blob/main/backend/src/controller/RoomController.js): `backend/src/controller/RoomController.js`
- [Room service](https://github.com/4r1n0930/impression/blob/main/backend/src/services/RoomService.js): `backend/src/services/RoomService.js`
- [Room records](https://github.com/4r1n0930/impression/blob/main/backend/src/models/Room.js): `backend/src/models/Room.js`
- [Meeting token API](https://github.com/4r1n0930/impression/blob/main/backend/src/routes/apiRoutes.js): `backend/src/routes/apiRoutes.js`

### Other components

- **Participant**

## Connections

- Participant → Route application: uses (evidence: `frontend/src/App.tsx`)
- Route application → Dashboard: routes to (evidence: `frontend/src/App.tsx`)
- Route application → Room setup: routes to (evidence: `frontend/src/App.tsx`)
- Route application → Interviewer room: routes to (evidence: `frontend/src/App.tsx`)
- Route application → Candidate room: routes to (evidence: `frontend/src/App.tsx`)
- Route application → Feedback report: routes to (evidence: `frontend/src/App.tsx`)
- Route application → Authentication UI: uses
- Interviewer room → Audio capture: captures audio (evidence: `frontend/src/pages/InterviewRoom.tsx`)
- Candidate room → Audio capture: captures audio (evidence: `frontend/src/pages/Interviewee.tsx`)
- Audio capture → Socket client: emits PCM
- Socket client → HTTP and socket server: connects
- HTTP and socket server → Speech transcription: opens connection (evidence: `backend/server.js`)
- HTTP and socket server → Transcript buffering: forwards transcripts (evidence: `backend/server.js`)
- Transcript buffering → Interview orchestration: dispatches speech (evidence: `backend/src/services/transcriptService.js`)
- Interview orchestration → Question classification: classifies speech (evidence: `backend/src/controller/InterviewController.js`)
- Interview orchestration → Answer evaluation: evaluates answer (evidence: `backend/src/controller/InterviewController.js`)
- Interview orchestration → Follow-up suggestions: generates suggestions (evidence: `backend/src/controller/InterviewController.js`)
- Interview endpoints → Interview orchestration: reads evaluations (evidence: `backend/src/routes/interviewRoutes.js`)
- Interview endpoints → Overall assessment: builds assessment (evidence: `backend/src/routes/interviewRoutes.js`)
- Auth endpoints → User records: reads and updates (evidence: `backend/src/routes/authRoutes.js`)
- Room endpoints → Room management: routes requests (evidence: `backend/src/routes/roomRoutes.js`)
- Room management → Room service: creates room (evidence: `backend/src/controller/RoomController.js`)
- Room management → Room records: reads room (evidence: `backend/src/controller/RoomController.js`)
- Room service → Room records: persists room (evidence: `backend/src/services/RoomService.js`)
- Interviewer room → Meeting token API: requests token (evidence: `frontend/src/pages/InterviewRoom.tsx`)
- Meeting token API → Room records: validates room (evidence: `backend/src/routes/apiRoutes.js`)
- Meeting token API → LiveKit service: generates token (evidence: `backend/src/routes/apiRoutes.js`)
