# sanjayd11/codesentry architecture

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

- Interactive diagram: https://gitdiagram.com/sanjayd11/codesentry
- Repository: https://github.com/sanjayd11/codesentry

## Overview

SentinelAI is a full-stack security-analysis platform. A user organizes source code into projects, uploads files or ZIP archives, starts a scan, reviews findings, optionally requests AI explanations or fixes, and downloads a PDF report. The backend also supports authentication, dashboards, chat, administration, and project history. The README documents the upload-to-scan-to-enrichment flow; sampled analyzer code confirms rule-based detection and ZIP discovery. Several service and controller implementations were not sampled, so uncertain internal calls are omitted.

Main entry points: [`frontend/src/api`](https://github.com/sanjayd11/codesentry/tree/main/frontend/src/api) (API Clients), [`src/main/java/com/sanjay/aisecurity/repository`](https://github.com/sanjayd11/codesentry/tree/main/src/main/java/com/sanjay/aisecurity/repository) (Repositories), [`src/main/java/com/sanjay/aisecurity/service/ScanServiceImpl.java`](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/ScanServiceImpl.java) (Scan Service), [`src/main/java/com/sanjay/aisecurity/service/AiEnrichmentServiceImpl.java`](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/AiEnrichmentServiceImpl.java) (AI Enrichment)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Frontend"]
  node_workspace["App Views"]
  node_upload_ui["Upload UI"]
  node_chat_ui["Security Chat<br/>[SecurityChat.jsx]"]
  node_report_ui["Reports UI<br/>[Reports.jsx]"]
  node_api_clients["API Clients"]
end

subgraph group_api["API Layer"]
  node_auth_controller["Auth API"]
  node_project_controller["Project API"]
  node_upload_controller["Upload API"]
  node_scan_controller["Scan API"]
  node_ai_controller["AI API"]
  node_report_controller["Report API"]
end

subgraph group_services["Backend Services"]
  node_auth_service["Authentication<br/>[AuthService.java]"]
  node_upload_service["Upload Service"]
  node_scan_service["Scan Service"]
  node_ai_service["AI Enrichment"]
  node_chat_service["Chat Service"]
  node_report_service["Report Service"]
end

subgraph group_analysis["Analysis Engine"]
  node_discovery["ZIP Discovery"]
  node_scanner_manager["Scanner Manager"]
  node_dynamic_rules["Dynamic Rules"]
  node_language_rules["Language Rules"]
end

subgraph group_state["Persistence"]
  node_repositories["Repositories"]
  node_entities["Domain Records"]
end

node_user(("User"))
node_database[("MySQL")]
node_llm{{"LLM Providers"}}

node_user -->|"uses"| node_workspace
node_user -->|"submits code"| node_upload_ui
node_upload_ui -->|"sends upload"| node_api_clients
node_workspace -->|"requests data"| node_api_clients
node_chat_ui -->|"sends prompts"| node_api_clients
node_report_ui -->|"requests reports"| node_api_clients
node_api_clients -->|"calls auth"| node_auth_controller
node_api_clients -->|"calls projects"| node_project_controller
node_api_clients -->|"calls upload"| node_upload_controller
node_api_clients -->|"starts scans"| node_scan_controller
node_api_clients -->|"requests enrichment"| node_ai_controller
node_api_clients -->|"requests reports"| node_report_controller
node_auth_controller -->|"delegates auth"| node_auth_service
node_auth_service -->|"persists accounts"| node_repositories
node_upload_controller -->|"delegates upload"| node_upload_service
node_upload_service -->|"stores file records"| node_repositories
node_scan_controller -->|"triggers scan"| node_scan_service
node_scan_service -->|"discovers ZIP files"| node_discovery
node_scan_service -->|"selects scanners"| node_scanner_manager
node_scanner_manager -->|"runs rules"| node_dynamic_rules
node_scanner_manager -->|"runs rules"| node_language_rules
node_scan_service -->|"stores findings"| node_repositories
node_ai_controller -->|"triggers enrichment"| node_ai_service
node_ai_service -->|"queries models"| node_llm
node_ai_service -->|"updates findings"| node_repositories
node_chat_ui -.->|"asks questions"| node_chat_service
node_report_controller -->|"requests PDF"| node_report_service
node_report_service -->|"reads findings"| node_repositories
node_repositories -->|"maps records"| node_entities
node_repositories -->|"reads and writes"| node_database

click node_workspace "https://github.com/sanjayd11/codesentry/tree/main/frontend/src/pages"
click node_upload_ui "https://github.com/sanjayd11/codesentry/blob/main/frontend/src/pages/scanner/SourceCodeScanner.jsx"
click node_chat_ui "https://github.com/sanjayd11/codesentry/blob/main/frontend/src/pages/chat/SecurityChat.jsx"
click node_report_ui "https://github.com/sanjayd11/codesentry/blob/main/frontend/src/pages/reports/Reports.jsx"
click node_api_clients "https://github.com/sanjayd11/codesentry/tree/main/frontend/src/api"
click node_auth_controller "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/controller/AuthController.java"
click node_project_controller "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/controller/ProjectController.java"
click node_upload_controller "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/controller/UploadController.java"
click node_scan_controller "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/controller/ScanController.java"
click node_ai_controller "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/controller/AiEnrichmentController.java"
click node_report_controller "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/controller/ReportController.java"
click node_auth_service "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/AuthService.java"
click node_upload_service "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/UploadServiceImpl.java"
click node_scan_service "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/ScanServiceImpl.java"
click node_ai_service "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/AiEnrichmentServiceImpl.java"
click node_chat_service "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/ChatbotServiceImpl.java"
click node_report_service "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/ReportServiceImpl.java"
click node_discovery "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/analyzer/pipeline/FileDiscoveryService.java"
click node_scanner_manager "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/analyzer/ScannerManager.java"
click node_dynamic_rules "https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/analyzer/DynamicRuleEngine.java"
click node_language_rules "https://github.com/sanjayd11/codesentry/tree/main/src/main/java/com/sanjay/aisecurity/analyzer"
click node_repositories "https://github.com/sanjayd11/codesentry/tree/main/src/main/java/com/sanjay/aisecurity/repository"
click node_entities "https://github.com/sanjayd11/codesentry/tree/main/src/main/java/com/sanjay/aisecurity/entity"

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_workspace,node_upload_ui,node_chat_ui,node_report_ui,node_api_clients,node_user toneBlue
class node_auth_controller,node_project_controller,node_upload_controller,node_scan_controller,node_ai_controller,node_report_controller,node_database toneAmber
class node_auth_service,node_upload_service,node_scan_service,node_ai_service,node_chat_service,node_report_service toneMint
class node_discovery,node_scanner_manager,node_dynamic_rules,node_language_rules toneRose
class node_repositories,node_entities,node_llm toneIndigo
```

## Components

### Frontend

- [App Views](https://github.com/sanjayd11/codesentry/tree/main/frontend/src/pages): `frontend/src/pages`
- [Upload UI](https://github.com/sanjayd11/codesentry/blob/main/frontend/src/pages/scanner/SourceCodeScanner.jsx): `frontend/src/pages/scanner/SourceCodeScanner.jsx`
- [Security Chat](https://github.com/sanjayd11/codesentry/blob/main/frontend/src/pages/chat/SecurityChat.jsx): `frontend/src/pages/chat/SecurityChat.jsx`
- [Reports UI](https://github.com/sanjayd11/codesentry/blob/main/frontend/src/pages/reports/Reports.jsx): `frontend/src/pages/reports/Reports.jsx`
- [API Clients](https://github.com/sanjayd11/codesentry/tree/main/frontend/src/api): `frontend/src/api`

### API Layer

- [Auth API](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/controller/AuthController.java): `src/main/java/com/sanjay/aisecurity/controller/AuthController.java`
- [Project API](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/controller/ProjectController.java): `src/main/java/com/sanjay/aisecurity/controller/ProjectController.java`
- [Upload API](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/controller/UploadController.java): `src/main/java/com/sanjay/aisecurity/controller/UploadController.java`
- [Scan API](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/controller/ScanController.java): `src/main/java/com/sanjay/aisecurity/controller/ScanController.java`
- [AI API](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/controller/AiEnrichmentController.java): `src/main/java/com/sanjay/aisecurity/controller/AiEnrichmentController.java`
- [Report API](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/controller/ReportController.java): `src/main/java/com/sanjay/aisecurity/controller/ReportController.java`

### Backend Services

- [Authentication](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/AuthService.java): `src/main/java/com/sanjay/aisecurity/service/AuthService.java`
- [Upload Service](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/UploadServiceImpl.java): `src/main/java/com/sanjay/aisecurity/service/UploadServiceImpl.java`
- [Scan Service](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/ScanServiceImpl.java): `src/main/java/com/sanjay/aisecurity/service/ScanServiceImpl.java`
- [AI Enrichment](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/AiEnrichmentServiceImpl.java): `src/main/java/com/sanjay/aisecurity/service/AiEnrichmentServiceImpl.java`
- [Chat Service](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/ChatbotServiceImpl.java): `src/main/java/com/sanjay/aisecurity/service/ChatbotServiceImpl.java`
- [Report Service](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/service/ReportServiceImpl.java): `src/main/java/com/sanjay/aisecurity/service/ReportServiceImpl.java`

### Analysis Engine

- [ZIP Discovery](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/analyzer/pipeline/FileDiscoveryService.java): `src/main/java/com/sanjay/aisecurity/analyzer/pipeline/FileDiscoveryService.java`
- [Scanner Manager](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/analyzer/ScannerManager.java): `src/main/java/com/sanjay/aisecurity/analyzer/ScannerManager.java`
- [Dynamic Rules](https://github.com/sanjayd11/codesentry/blob/main/src/main/java/com/sanjay/aisecurity/analyzer/DynamicRuleEngine.java): `src/main/java/com/sanjay/aisecurity/analyzer/DynamicRuleEngine.java`
- [Language Rules](https://github.com/sanjayd11/codesentry/tree/main/src/main/java/com/sanjay/aisecurity/analyzer): `src/main/java/com/sanjay/aisecurity/analyzer`

### Persistence

- [Repositories](https://github.com/sanjayd11/codesentry/tree/main/src/main/java/com/sanjay/aisecurity/repository): `src/main/java/com/sanjay/aisecurity/repository`
- [Domain Records](https://github.com/sanjayd11/codesentry/tree/main/src/main/java/com/sanjay/aisecurity/entity): `src/main/java/com/sanjay/aisecurity/entity`

### Other components

- **User**
- **MySQL**
- **LLM Providers**

## Connections

- User → App Views: uses
- User → Upload UI: submits code
- Upload UI → API Clients: sends upload
- App Views → API Clients: requests data
- Security Chat → API Clients: sends prompts
- Reports UI → API Clients: requests reports
- API Clients → Auth API: calls auth
- API Clients → Project API: calls projects
- API Clients → Upload API: calls upload
- API Clients → Scan API: starts scans
- API Clients → AI API: requests enrichment
- API Clients → Report API: requests reports
- Auth API → Authentication: delegates auth
- Authentication → Repositories: persists accounts
- Upload API → Upload Service: delegates upload
- Upload Service → Repositories: stores file records
- Scan API → Scan Service: triggers scan
- Scan Service → ZIP Discovery: discovers ZIP files
- Scan Service → Scanner Manager: selects scanners
- Scanner Manager → Dynamic Rules: runs rules
- Scanner Manager → Language Rules: runs rules
- Scan Service → Repositories: stores findings
- AI API → AI Enrichment: triggers enrichment
- AI Enrichment → LLM Providers: queries models
- AI Enrichment → Repositories: updates findings
- Security Chat → Chat Service: asks questions
- Report API → Report Service: requests PDF
- Report Service → Repositories: reads findings
- Repositories → Domain Records: maps records
- Repositories → MySQL: reads and writes
