# prabhas-koppireddy/interviewprepai architecture

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

- Interactive diagram: https://gitdiagram.com/prabhas-koppireddy/interviewprepai
- Repository: https://github.com/prabhas-koppireddy/interviewprepai

## Overview

This is an interview-preparation web app: users sign in, create role- and topic-focused interview sessions, generate questions and answers, then review and manage session questions. The backend also generates explanations and supports question notes and pinning. The graph follows the sampled routing and controller code; frontend-to-API wiring is not shown because the relevant page and API-client implementations were not sampled, and the README is empty.

Main entry points: [`backend/server.js`](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/server.js) (HTTP server), [`frontend/interview-prep-ai/src/App.jsx`](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/App.jsx) (App router), [`backend/controllers/aiController.js`](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/controllers/aiController.js) (AI generation), [`backend/middlewares/authMiddleware.js`](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/middlewares/authMiddleware.js) (JWT route guard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_app["App router<br/>[App.jsx]"]
  node_landing["Landing page<br/>[LandingPage.jsx]"]
  node_authpages["Login and signup"]
  node_dashboard["Session dashboard<br/>[Dashboard.jsx]"]
  node_createform["Session creation"]
  node_prep["Interview prep<br/>[InterviewPrep.jsx]"]
  node_response["AI response display"]
  node_usercontext["User context<br/>[userContext.jsx]"]
end

subgraph group_api["Backend API"]
  node_server["HTTP server<br/>[server.js]"]
  node_authroutes["Auth routes<br/>[authRoutes.js]"]
  node_sessionroutes["Session routes<br/>[sessionRoutes.js]"]
  node_questionroutes["Question routes<br/>[questionRoutes.js]"]
  node_auth["Authentication<br/>[authController.js]"]
  node_guard["JWT route guard<br/>[authMiddleware.js]"]
end

subgraph group_domain["Interview domain"]
  node_sessions["Session management"]
  node_questions["Question management"]
  node_ai["AI generation<br/>[aiController.js]"]
  node_prompts["Prompt templates<br/>[prompts.js]"]
end

subgraph group_persistence["Persistence"]
  node_dbconnect["Database connection<br/>[db.js]"]
  node_users[("User records<br/>[User.js]")]
  node_sessionmodel[("Session records<br/>[Session.js]")]
  node_questionmodel[("Question records<br/>[Question.js]")]
end

node_user(("User"))
node_gemini{{"Google Gemini"}}
node_openai{{"OpenAI-compatible API"}}

node_user -->|"uses"| node_app
node_app -->|"routes to"| node_landing
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_prep
node_app -->|"wraps"| node_usercontext
node_server -->|"mounts"| node_authroutes
node_server -->|"mounts"| node_sessionroutes
node_server -->|"mounts"| node_questionroutes
node_server -->|"dispatches"| node_ai
node_server -->|"connects"| node_dbconnect
node_authroutes -->|"dispatches"| node_auth
node_authroutes -->|"guards profile"| node_guard
node_sessionroutes -->|"guards"| node_guard
node_sessionroutes -->|"dispatches"| node_sessions
node_questionroutes -->|"guards"| node_guard
node_questionroutes -->|"dispatches"| node_questions
node_auth -->|"reads/writes"| node_users
node_guard -->|"reads"| node_users
node_sessions -->|"reads/writes"| node_sessionmodel
node_sessions -->|"creates/deletes"| node_questionmodel
node_questions -->|"reads/writes"| node_sessionmodel
node_questions -->|"reads/writes"| node_questionmodel
node_ai -->|"builds prompts"| node_prompts
node_ai -.->|"generates content"| node_gemini
node_ai -.->|"generates content"| node_openai
node_response -->|"renders content"| node_prep

click node_app "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/App.jsx"
click node_landing "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/pages/LandingPage.jsx"
click node_authpages "https://github.com/prabhas-koppireddy/interviewprepai/tree/main/frontend/interview-prep-ai/src/pages/Auth"
click node_dashboard "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/pages/Home/Dashboard.jsx"
click node_createform "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/pages/Home/CreateSessionForm.jsx"
click node_prep "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/pages/InterviewPrep/InterviewPrep.jsx"
click node_response "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/pages/InterviewPrep/components/AIResponsePreview.jsx"
click node_usercontext "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/context/userContext.jsx"
click node_server "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/server.js"
click node_authroutes "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/routes/authRoutes.js"
click node_sessionroutes "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/routes/sessionRoutes.js"
click node_questionroutes "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/routes/questionRoutes.js"
click node_auth "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/controllers/authController.js"
click node_guard "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/middlewares/authMiddleware.js"
click node_sessions "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/controllers/sessionController.js"
click node_questions "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/controllers/questionController.js"
click node_ai "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/controllers/aiController.js"
click node_prompts "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/utils/prompts.js"
click node_dbconnect "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/config/db.js"
click node_users "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/models/User.js"
click node_sessionmodel "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/models/Session.js"
click node_questionmodel "https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/models/Question.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_landing,node_authpages,node_dashboard,node_createform,node_prep,node_response,node_usercontext,node_user toneBlue
class node_server,node_authroutes,node_sessionroutes,node_questionroutes,node_auth,node_guard toneAmber
class node_sessions,node_questions,node_ai,node_prompts,node_openai toneMint
class node_dbconnect,node_users,node_sessionmodel,node_questionmodel toneRose
class node_gemini toneIndigo
```

## Components

### Web application

- [App router](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/App.jsx): `frontend/interview-prep-ai/src/App.jsx`
- [Landing page](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/pages/LandingPage.jsx): `frontend/interview-prep-ai/src/pages/LandingPage.jsx`
- [Login and signup](https://github.com/prabhas-koppireddy/interviewprepai/tree/main/frontend/interview-prep-ai/src/pages/Auth): `frontend/interview-prep-ai/src/pages/Auth`
- [Session dashboard](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/pages/Home/Dashboard.jsx): `frontend/interview-prep-ai/src/pages/Home/Dashboard.jsx`
- [Session creation](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/pages/Home/CreateSessionForm.jsx): `frontend/interview-prep-ai/src/pages/Home/CreateSessionForm.jsx`
- [Interview prep](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/pages/InterviewPrep/InterviewPrep.jsx): `frontend/interview-prep-ai/src/pages/InterviewPrep/InterviewPrep.jsx`
- [AI response display](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/pages/InterviewPrep/components/AIResponsePreview.jsx): `frontend/interview-prep-ai/src/pages/InterviewPrep/components/AIResponsePreview.jsx`
- [User context](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/frontend/interview-prep-ai/src/context/userContext.jsx): `frontend/interview-prep-ai/src/context/userContext.jsx`

### Backend API

- [HTTP server](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/server.js): `backend/server.js`
- [Auth routes](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/routes/authRoutes.js): `backend/routes/authRoutes.js`
- [Session routes](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/routes/sessionRoutes.js): `backend/routes/sessionRoutes.js`
- [Question routes](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/routes/questionRoutes.js): `backend/routes/questionRoutes.js`
- [Authentication](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/controllers/authController.js): `backend/controllers/authController.js`
- [JWT route guard](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/middlewares/authMiddleware.js): `backend/middlewares/authMiddleware.js`

### Interview domain

- [Session management](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/controllers/sessionController.js): `backend/controllers/sessionController.js`
- [Question management](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/controllers/questionController.js): `backend/controllers/questionController.js`
- [AI generation](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/controllers/aiController.js): `backend/controllers/aiController.js`
- [Prompt templates](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/utils/prompts.js): `backend/utils/prompts.js`

### Persistence

- [Database connection](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/config/db.js): `backend/config/db.js`
- [User records](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/models/User.js): `backend/models/User.js`
- [Session records](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/models/Session.js): `backend/models/Session.js`
- [Question records](https://github.com/prabhas-koppireddy/interviewprepai/blob/main/backend/models/Question.js): `backend/models/Question.js`

### Other components

- **User**
- **Google Gemini**
- **OpenAI-compatible API**

## Connections

- User → App router: uses
- App router → Landing page: routes to
- App router → Session dashboard: routes to
- App router → Interview prep: routes to
- App router → User context: wraps
- HTTP server → Auth routes: mounts
- HTTP server → Session routes: mounts
- HTTP server → Question routes: mounts
- HTTP server → AI generation: dispatches
- HTTP server → Database connection: connects
- Auth routes → Authentication: dispatches
- Auth routes → JWT route guard: guards profile
- Session routes → JWT route guard: guards
- Session routes → Session management: dispatches
- Question routes → JWT route guard: guards
- Question routes → Question management: dispatches
- Authentication → User records: reads/writes
- JWT route guard → User records: reads
- Session management → Session records: reads/writes
- Session management → Question records: creates/deletes
- Question management → Session records: reads/writes
- Question management → Question records: reads/writes
- AI generation → Prompt templates: builds prompts
- AI generation → Google Gemini: generates content
- AI generation → OpenAI-compatible API: generates content
- AI response display → Interview prep: renders content
