githubinferredactive
ai-interview
provenance:github:codexsys-7/ai-interview
πͺπ€π¬ InterVue Labs | AI-powered interview simulator with LLMs, RAG, memory & voice interaction
README
# 1. InterVue Labs β Initial MVP Cleanup & Code Refactor Summary
This update finalizes the Initial MVP for the InterVue Labs AI Interview Simulator.
We performed a complete cleanup, structural re-organization, and bug-fix pass to prepare the project for public testing and future feature releases.
## ArchitectureποΈ
### **High level System Architecture**
````mermaid
graph TB
subgraph "Frontend - React"
UI[User Interface]
Audio[Audio System]
State[State Management]
end
subgraph "Backend - FastAPI"
API[API Layer]
Orchestrator[Interview Orchestrator]
Services[Intelligence Services]
end
subgraph "AI Services - OpenAI"
GPT[GPT-4o-mini]
TTS[Text-to-Speech]
Embeddings[Embeddings API]
end
subgraph "Data Layer"
DB[(PostgreSQL)]
Cache[Audio Cache]
QB[Question Bank]
end
UI -->|HTTP/JSON| API
API -->|Coordinates| Orchestrator
Orchestrator -->|Uses| Services
Services -->|Calls| GPT
Services -->|Generates| TTS
Services -->|Creates| Embeddings
Services -->|Reads/Writes| DB
TTS -->|Saves| Cache
Services -->|Selects| QB
Cache -->|Serves| UI
style UI fill:#3b82f6,color:#fff
style Orchestrator fill:#8b5cf6,color:#fff
style GPT fill:#10b981,color:#fff
style DB fill:#f59e0b,color:#fff
````
---
### **Interview Flow - Complete Journey**
````mermaid
graph TD
Start([π€ You Start Interview]) --> Q1[π€ AI Asks Question via Voice]
Q1 --> A1[π£οΈ You Answer Out Loud]
A1 --> Process{π§ AI Analyzes Your Answer}
Process --> Store[πΎ Saves Your AnswerRemembers Everything]
Store --> Think{π€ AI Thinks...}
Think -->|Your Answer Was Great| Response1[β
AI: 'Excellent example!'Moves to Next Question]
Think -->|Your Answer Was Vague| Response2[β AI: 'Can you give more detail?'Asks Follow-up]
Think -->|You Contradicted Earlier Answer| Response3[π€¨ AI: 'Earlier you said X, now Y?'Asks for Clarification]
Think -->|You Mentioned Topic 3 Times| Response4[π― AI: 'You love Python!'Asks Deep Technical Question]
Response1 --> Generate[π€ AI Creates Next QuestionBased on Your Conversation]
Response2 --> Generate
Response3 --> Generate
Response4 --> Generate
Generate --> Voice[π Converts to Natural Voice]
Voice --> Visual[π΅ Glowing Orb AppearsShows AI is Speaking]
Visual --> Next[π’ You Hear Next Question]
Next --> A1
style Start fill:#e0f2fe,stroke:#0284c7,stroke-width:3px
style Process fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
style Think fill:#f3e8ff,stroke:#a855f7,stroke-width:2px
style Generate fill:#dcfce7,stroke:#16a34a,stroke-width:2px
style Visual fill:#dbeafe,stroke:#3b82f6,stroke-width:2px
````
---
### **Project Structure**
````mermaid
graph TD
A["π¦ InterVue Labs"]
A --> B["π backend/"]
B --> C["π api.py"]
C --> D["π db.py"]
D --> E["π models.py"]
E --> F["π services/<br/>ββββββββ"]
F --> F1["π§ orchestrator"]
F1 --> F2["β question_generator"]
F2 --> F3["π― decision_engine"]
F3 --> F4["π conversation_context"]
F4 --> F5["π contradiction_detector"]
F5 --> F6["π’ embedding_service"]
F6 --> F7["β‘ realtime_response"]
F7 --> F8["π¬ personality"]
F8 --> F9["π tts_service"]
F9 --> F10["π question_selector"]
F10 --> F11["π job_introduction"]
F11 --> G["π prompts/"]
G --> H["π data/"]
H --> I["π audio_cache/"]
I --> J["π tests/"]
A --> K["π frontend/"]
K --> L["π src/"]
L --> M["π pages/"]
M --> M1["π Interview.jsx"]
M1 --> M2["π Dashboard.jsx"]
M2 --> M3["π Results.jsx"]
M3 --> N["π components/Interview/"]
N --> N1["π΅ GlowingOrb"]
N1 --> N2["π ConversationIndicator"]
N2 --> N3["π¬ AIResponseDisplay"]
N3 --> N4["β QuestionDisplay"]
N4 --> N5["π€ AnswerInput"]
N5 --> O["π¨ index.css"]
classDef root fill:#dbeafe,stroke:#3b82f6,stroke-width:3px
classDef important fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
class A root
class F,F1,F2,F9,M1,N1,N2 important
````
---
### β
Dual-Mode ATS Scoring (Core Feature)
#### πΉ Mode A β Resume Only
Evaluates **general ATS readiness**:
- Searchability (contact info, links)
- ATS essentials (sections, bullets)
- Content quality (skills, metrics)
- Recruiter best practices
#### πΉ Mode B β Resume + Job Description
Evaluates **job match + readiness**:
- Hard skill overlap (Jobscan-style)
- Responsibility alignment (Enhancv-style)
- Seniority match
- Missing keyword detection
β‘οΈ ATS scores are **deterministic**, repeatable, and not random.
---
### π οΈ Tech Stack
**Backend:**
- Python 3.11+
- FastAPI
- PostgreSQL (Supabase)
- OpenAI GPT-4o-mini
- OpenAI TTS
- Sentence Transformers
**Frontend:**
- React 18
- Vite
- Tailwind CSS
- Lucide Icons
**AI Services:**
- Semantic embeddings (1536 dimensions)
- Pattern detection
- Contradiction analysis
- Natural language generation
**Database:**
- PostgreSQL (Supabase)
---
### π Important Backend Files
| File | Description |
|----|----|
| `api.py` | All API endpoints |
| `ats.py` | Deterministic ATS scoring logic |
| `models.py` | Database models |
| `db.py` | Database initialization |
| `ParseOut` | Strict response schema |
---
### βΆοΈ Running the Project Locally
**Backend**
- cd backend
- python -m venv venv
- .\\venv\\Scripts\\activate.bat
- pip install -r requirements.txt
- uvicorn api:app --reload
**Frontend**
- cd frontend
- npm install
- npm run dev
---
## π Features Overview
#### π Authentication (New)
- Secure **Signup & Login** flow
- Password hashing using **bcrypt**
- JWT-based authentication
- Protected routes for authenticated users only
- Logout functionality with session cleanup
- Navbar displays **βLogged in as <User Name>β**
#### π₯ PDF Download (New)
- One-click **Download Feedback as PDF**
- Client-side PDF generation using jsPDF
- Includes:
- Interview metadata
- Overall score
- Strengths & improvements
- Question-level breakdown
- No backend dependency for downloads
---
## π§ Routing & Access Control
| Route | Access | Description |
|-----|------|------------|
| `/` | Public Gate | Redirects to login or home |
| `/login` | Public | Login page |
| `/signup` | Public | Signup page |
| `/home` | Protected | Main dashboard |
| `/resume-analysis` | Protected | Resume insights |
| `/interview` | Protected | Interview session |
| `/feedback` | Protected | Feedback & PDF download |
Navbar and footer are rendered **only on protected routes** via a shared layout.
---
## π Authentication System (Signup, Login, Logout)
#### 1. Signup Functionality
We implemented a complete user registration system using FastAPI on the backend and React on the frontend.
What was added:
- A dedicated Signup page with a clean, modern UI matching the appβs blue/white theme.
- Form fields for Full Name, Email, and Password.
- Client-side validation and loading states.
- Backend endpoint /api/auth/signup.
#### Backend logic:
- Validates password length (minimum 8 characters).
- Enforces bcryptβs 72-byte password limit to prevent runtime crashes.
- Hashes passwords securely using passlib + bcrypt.
- Generates a unique user ID using UUID.
- Stores user credentials safely in the database.
- Issues a JWT token upon successful signup.
##### Why this matters:
- Prevents plain-text password storage.
- Makes the platform safe for real users.
- Lays the foundation for user-specific interview history and analytics.
#### 2. Login Functionality
We added a secure login flow for returning users.
What was added:
- A Login page visually aligned with Signup.
- Backend endpoint /api/auth/login.
- JWT-based authentication.
##### Backend logic:
- Verifies user email.
- Compares entered password with the stored bcrypt hash.
- Issu
[truncatedβ¦]PUBLIC HISTORY
First discoveredMar 27, 2026
IDENTITY
inferred
Identity inferred from code signals. No PROVENANCE.yml found.
Is this yours? Claim it βMETADATA
platformgithub
first seenNov 13, 2025
last updatedMar 26, 2026
last crawled21 days ago
versionβ
README BADGE
Add to your README:
