# arbind0011/gen_ai_resumebuilder architecture

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

- Interactive diagram: https://gitdiagram.com/arbind0011/gen_ai_resumebuilder
- Repository: https://github.com/arbind0011/gen_ai_resumebuilder

## Overview

#### Purpose and Entry Points
This is a full-stack interview application with authentication, protected client views, interview execution, AI-backed processing, and persisted interview reports.

- Backend process entry: `Backend/server.js`; application composition: `Backend/src/app.js`.
- Frontend bootstrap and route assembly: `Frontend/src/main.jsx`, `Frontend/src/App.jsx`, `Frontend/src/app.route.jsx`.

#### Backend HTTP API Layer
The backend separates endpoint definitions from request orchestration.

- Authentication endpoints are defined in `Backend/src/routes/auth.routes.js` and handled by `Backend/src/controller/auth.controller.js`.
- Interview endpoints are defined in `Backend/src/routes/interview.routes.js` and handled by `Backend/src/controller/interview.controller.js`.
- `Backend/src/app.js` is the likely boundary where middleware and route groups are mounted.

Control flow is route → middleware → controller → model/service → HTTP response.

#### Identity and Session Protection
Authentication is a cross-cutting boundary on both server and client.

- Server-side authorization middleware: `Backend/src/middlewares/auth.middleware.js`.
- User and invalidated-token persistence: `Backend/src/models/user.model.js`, `Backend/src/models/blacklist.model.js`.
- Client authentication state and access control: `Frontend/src/Features/auth/auth.context.jsx`, `Frontend/src/Features/auth/components/Protected.jsx`, `Frontend/src/Features/auth/hooks/useAuth.js`.

The blacklist model indicates logout or token-revocation behavior is intended to be enforced server-side rather than relying solely on client token deletion.

#### Interview Workflow and AI Boundary
Interview processing is organized as a feature domain rather than scattered across generic UI/API code.

- Backend interview orchestration: `Backend/src/controller/interview.controller.js`.
- AI integration boundary: `Backend/src/services/ai.service.js`.
- Persisted output/report model: `Backend/src/models/interviewReport.model.js`.
- Client interview state and API access: `Frontend/src/Features/interview/interview.context.jsx`, `Frontend/src/Features/interview/hooks/useInterview.js`, `Frontend/src/Features/interview/services/interview.api.js`.

The controller should remain responsible for request validation and report lifecycle, while AI-provider-specific prompting or generation belongs behind `ai.service.js`.

#### File and Data Persistence Boundaries
The backend has distinct middleware and configuration boundaries for uploaded/request files and database access.

- File handling middleware: `Backend/src/middlewares/file.middleware.js`.
- Database configuration: `Backend/src/config/database.js`.
- Primary persisted entities: `Backend/src/models/user.model.js`, `Backend/src/models/interviewReport.model.js`, `Backend/src/models/blacklist.model.js`.

Database implementation and AI vendor are not identifiable from the supplied tree, but both are externally integrated behind dedicated backend modules.

#### Frontend Feature Structure
The frontend is organized by business capability: `auth` and `interview`, each containing pages, state, hooks, and API adapters.

- Auth screens and transport layer: `Frontend/src/Features/auth/pages/Login.jsx`, `Frontend/src/Features/auth/pages/Register.jsx`, `Frontend/src/Features/auth/services/auth.api.js`.
- Interview screens and transport layer: `Frontend/src/Features/interview/pages/Home.jsx`, `Frontend/src/Features/interview/pages/Interview.jsx`, `Frontend/src/Features/interview/services/interview.api.js`.
- Feature-level contexts provide shared state above individual pages: `Frontend/src/Features/auth/auth.context.jsx`, `Frontend/src/Features/interview/interview.context.jsx`.

The frontend is Vite-based, as indicated by `Frontend/vite.config.js`, and communicates with the backend only through feature-specific API service modules.

Main entry points: [`Frontend/src/App.jsx`](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/App.jsx) (App and routes), [`Backend/src/routes/interview.routes.js`](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/routes/interview.routes.js) (Interview routes), [`Backend/src/app.js`](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/app.js) (API application), [`Backend/src/controller/auth.controller.js`](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/controller/auth.controller.js) (Auth controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Frontend"]
  node_client_bootstrap["Client bootstrap<br/>React entry<br/>[main.jsx]"]
  node_client_app["App and routes<br/>route assembly<br/>[App.jsx]"]
  node_auth_state["Auth state<br/>feature context<br/>[auth.context.jsx]"]
  node_auth_guard["Protected views<br/>route guard<br/>[Protected.jsx]"]
  node_auth_screens["Login and register<br/>auth pages<br/>[Login.jsx]"]
  node_auth_api["Auth API client<br/>API adapter<br/>[auth.api.js]"]
  node_interview_state["Interview state<br/>feature context"]
  node_interview_screens["Interview screens<br/>feature pages<br/>[Interview.jsx]"]
  node_interview_api["Interview API client<br/>API adapter<br/>[interview.api.js]"]
end

subgraph group_backend["Backend"]
  node_server_entry["Server process<br/>Node entry<br/>[server.js]"]
  node_api_app["API application<br/>HTTP composition<br/>[app.js]"]
  node_auth_routes["Auth routes<br/>route definitions<br/>[auth.routes.js]"]
  node_interview_routes["Interview routes<br/>route definitions"]
  node_auth_middleware["Authorization middleware<br/>auth middleware<br/>[auth.middleware.js]"]
  node_auth_controller["Auth controller<br/>request controller<br/>[auth.controller.js]"]
  node_interview_controller["Interview controller<br/>workflow controller"]
  node_file_middleware["File middleware<br/>upload handling<br/>[file.middleware.js]"]
  node_ai_service{{"AI service<br/>AI integration<br/>[ai.service.js]"}}
  node_database[("Database<br/>persistence<br/>[database.js]")]
  node_user_model["User model<br/>persisted entity<br/>[user.model.js]"]
  node_blacklist_model["Token blacklist<br/>persisted entity<br/>[blacklist.model.js]"]
  node_report_model["Interview report<br/>persisted entity"]
end

node_client_bootstrap -->|"starts"| node_client_app
node_client_app -->|"protects routes with"| node_auth_guard
node_client_app -->|"routes to"| node_auth_screens
node_client_app -->|"routes to"| node_interview_screens
node_auth_screens -->|"updates"| node_auth_state
node_auth_state -->|"uses"| node_auth_api
node_auth_guard -->|"reads"| node_auth_state
node_interview_screens -->|"uses"| node_interview_state
node_interview_state -->|"uses"| node_interview_api
node_auth_api -->|"HTTP requests"| node_auth_routes
node_interview_api -->|"HTTP requests"| node_interview_routes
node_server_entry -->|"runs"| node_api_app
node_api_app -->|"mounts"| node_auth_routes
node_api_app -->|"mounts"| node_interview_routes
node_auth_routes -->|"dispatches to"| node_auth_controller
node_interview_routes -->|"authorizes with"| node_auth_middleware
node_auth_middleware -->|"permits"| node_interview_controller
node_interview_routes -->|"handles files with"| node_file_middleware
node_auth_controller -->|"manages"| node_user_model
node_auth_controller -->|"revokes via"| node_blacklist_model
node_interview_controller -->|"generates through"| node_ai_service
node_interview_controller -->|"persists"| node_report_model
node_user_model -->|"stores in"| node_database
node_blacklist_model -->|"stores in"| node_database
node_report_model -->|"stores in"| node_database

click node_client_bootstrap "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/main.jsx"
click node_client_app "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/App.jsx"
click node_auth_state "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/auth/auth.context.jsx"
click node_auth_guard "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/auth/components/Protected.jsx"
click node_auth_screens "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/auth/pages/Login.jsx"
click node_auth_api "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/auth/services/auth.api.js"
click node_interview_state "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/interview/interview.context.jsx"
click node_interview_screens "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/interview/pages/Interview.jsx"
click node_interview_api "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/interview/services/interview.api.js"
click node_server_entry "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/server.js"
click node_api_app "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/app.js"
click node_auth_routes "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/routes/auth.routes.js"
click node_interview_routes "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/routes/interview.routes.js"
click node_auth_middleware "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/middlewares/auth.middleware.js"
click node_auth_controller "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/controller/auth.controller.js"
click node_interview_controller "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/controller/interview.controller.js"
click node_file_middleware "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/middlewares/file.middleware.js"
click node_ai_service "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/services/ai.service.js"
click node_database "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/config/database.js"
click node_user_model "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/models/user.model.js"
click node_blacklist_model "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/models/blacklist.model.js"
click node_report_model "https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/models/interviewReport.model.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_client_bootstrap,node_client_app,node_auth_state,node_auth_guard,node_auth_screens,node_auth_api,node_interview_state,node_interview_screens,node_interview_api toneBlue
class node_server_entry,node_api_app,node_auth_routes,node_interview_routes,node_auth_middleware,node_auth_controller,node_interview_controller,node_file_middleware,node_ai_service,node_database,node_user_model,node_blacklist_model,node_report_model toneAmber
```

## Components

### Frontend

Vite client organized by auth and interview features.

- [Client bootstrap](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/main.jsx): React entry · `Frontend/src/main.jsx`
- [App and routes](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/App.jsx): route assembly · `Frontend/src/App.jsx`
- [Auth state](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/auth/auth.context.jsx): feature context · `Frontend/src/Features/auth/auth.context.jsx`
- [Protected views](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/auth/components/Protected.jsx): route guard · `Frontend/src/Features/auth/components/Protected.jsx`
- [Login and register](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/auth/pages/Login.jsx): auth pages · `Frontend/src/Features/auth/pages/Login.jsx`
- [Auth API client](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/auth/services/auth.api.js): API adapter · `Frontend/src/Features/auth/services/auth.api.js`
- [Interview state](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/interview/interview.context.jsx): feature context · `Frontend/src/Features/interview/interview.context.jsx`
- [Interview screens](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/interview/pages/Interview.jsx): feature pages · `Frontend/src/Features/interview/pages/Interview.jsx`
- [Interview API client](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Frontend/src/Features/interview/services/interview.api.js): API adapter · `Frontend/src/Features/interview/services/interview.api.js`

### Backend

HTTP API, domain orchestration, and persistence boundaries.

- [Server process](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/server.js): Node entry · `Backend/server.js`
- [API application](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/app.js): HTTP composition · Mounts middleware and route groups. · `Backend/src/app.js`
- [Auth routes](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/routes/auth.routes.js): route definitions · `Backend/src/routes/auth.routes.js`
- [Interview routes](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/routes/interview.routes.js): route definitions · `Backend/src/routes/interview.routes.js`
- [Authorization middleware](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/middlewares/auth.middleware.js): auth middleware · Enforces server-side session protection. · `Backend/src/middlewares/auth.middleware.js`
- [Auth controller](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/controller/auth.controller.js): request controller · `Backend/src/controller/auth.controller.js`
- [Interview controller](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/controller/interview.controller.js): workflow controller · Validates requests and manages report lifecycle. · `Backend/src/controller/interview.controller.js`
- [File middleware](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/middlewares/file.middleware.js): upload handling · `Backend/src/middlewares/file.middleware.js`
- [AI service](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/services/ai.service.js): AI integration · Isolates provider-specific generation and prompting. · `Backend/src/services/ai.service.js`
- [Database](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/config/database.js): persistence · Stores users, revoked tokens, and interview reports. · `Backend/src/config/database.js`
- [User model](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/models/user.model.js): persisted entity · `Backend/src/models/user.model.js`
- [Token blacklist](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/models/blacklist.model.js): persisted entity · Supports logout and token revocation. · `Backend/src/models/blacklist.model.js`
- [Interview report](https://github.com/arbind0011/gen_ai_resumebuilder/blob/main/Backend/src/models/interviewReport.model.js): persisted entity · `Backend/src/models/interviewReport.model.js`

## Connections

- Client bootstrap → App and routes: starts
- App and routes → Protected views: protects routes with
- App and routes → Login and register: routes to
- App and routes → Interview screens: routes to
- Login and register → Auth state: updates
- Auth state → Auth API client: uses
- Protected views → Auth state: reads
- Interview screens → Interview state: uses
- Interview state → Interview API client: uses
- Auth API client → Auth routes: HTTP requests
- Interview API client → Interview routes: HTTP requests
- Server process → API application: runs
- API application → Auth routes: mounts
- API application → Interview routes: mounts
- Auth routes → Auth controller: dispatches to
- Interview routes → Authorization middleware: authorizes with
- Authorization middleware → Interview controller: permits
- Interview routes → File middleware: handles files with
- Auth controller → User model: manages
- Auth controller → Token blacklist: revokes via
- Interview controller → AI service: generates through
- Interview controller → Interview report: persists
- User model → Database: stores in
- Token blacklist → Database: stores in
- Interview report → Database: stores in
