# cmreddyg85/statgen architecture

> Architecture diagram of the GitHub repository cmreddyg85/statgen, 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/cmreddyg85/statgen
- Repository: https://github.com/cmreddyg85/statgen

## Overview

Secure Business Portal is a role-based internal administration and student-record application. Admins and users sign in through the portal; authenticated requests reach the Express API, where server-side sessions and roles govern user administration, student ownership, and record operations. The student workflow covers CRM management, per-student record creation and review, and controlled release of finalized statements. SBI statement extraction, transaction generation, and saved reports form a separate capability; the other named modules have record-generation structure but placeholder payloads. The graph reflects documented architecture and sampled calls; unsampled route and persistence wiring is kept conservative.

Main entry points: [`frontend/src/lib/api.ts`](https://github.com/cmreddyg85/statgen/blob/main/frontend/src/lib/api.ts) (API client), [`backend/src/app.ts`](https://github.com/cmreddyg85/statgen/blob/main/backend/src/app.ts) (Express API), [`backend/src/db/pool.ts`](https://github.com/cmreddyg85/statgen/blob/main/backend/src/db/pool.ts) (PostgreSQL), [`backend/src/sbi/sbi.routes.ts`](https://github.com/cmreddyg85/statgen/blob/main/backend/src/sbi/sbi.routes.ts) (SBI endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web portal"]
  node_portal["Portal pages"]
  node_login_ui["Login form<br/>[LoginForm.tsx]"]
  node_api_client["API client<br/>[api.ts]"]
  node_session_ui["Session context"]
  node_users_ui["User management<br/>[UsersClient.tsx]"]
  node_students_ui["Student CRM<br/>[StudentsClient.tsx]"]
  node_generation_ui["Record generation<br/>[page.tsx]"]
  node_sbi_ui["SBI reports"]
end

subgraph group_api["API and access"]
  node_api_app["Express API<br/>[app.ts]"]
  node_auth_routes["Auth routes<br/>[auth.routes.ts]"]
  node_auth_service["Authentication<br/>[auth.service.ts]"]
  node_session_service["Session policy<br/>[session.service.ts]"]
  node_users_routes["User routes<br/>[users.routes.ts]"]
  node_student_routes["Student routes<br/>[students.routes.ts]"]
end

subgraph group_domain["Business workflows"]
  node_user_service["User service<br/>[user.service.ts]"]
  node_student_service["Student service<br/>[student.service.ts]"]
  node_record_service["Record service"]
  node_sbi_routes["SBI endpoints<br/>[sbi.routes.ts]"]
  node_sbi_extract["Statement extraction<br/>[extract.js]"]
  node_sbi_generate["Transaction generation<br/>[generate.js]"]
  node_report_service["Report service"]
  node_audit_service["Audit service<br/>[audit.service.ts]"]
end

subgraph group_state["Persistence"]
  node_user_repo["User repository<br/>[user.repository.ts]"]
  node_student_repo["Student repository"]
  node_record_repo["Record repository"]
  node_report_repo["Report repository"]
  node_database[("PostgreSQL<br/>[pool.ts]")]
end

node_admin(("Admin"))
node_user(("User"))

node_admin -->|"signs in"| node_login_ui
node_user -->|"signs in"| node_login_ui
node_admin -->|"uses"| node_portal
node_user -->|"uses"| node_portal
node_login_ui -->|"submits credentials"| node_api_client
node_portal -->|"requests data"| node_api_client
node_api_client -->|"same-origin API"| node_api_app
node_api_app -->|"dispatches"| node_auth_routes
node_api_app -->|"dispatches"| node_users_routes
node_api_app -->|"dispatches"| node_student_routes
node_api_app -->|"dispatches"| node_sbi_routes
node_auth_routes -->|"authenticates"| node_auth_service
node_auth_service -->|"creates session"| node_session_service
node_auth_service -->|"looks up account"| node_user_repo
node_session_service -->|"reads and writes"| node_database
node_session_ui -->|"checks session"| node_api_client
node_users_ui -->|"manages accounts"| node_api_client
node_users_routes -->|"handles requests"| node_user_service
node_users_routes -->|"loads activity"| node_audit_service
node_user_service -->|"accesses users"| node_user_repo
node_students_ui -->|"manages students"| node_api_client
node_generation_ui -->|"submits record"| node_api_client
node_student_routes -->|"handles students"| node_student_service
node_student_routes -->|"handles records"| node_record_service
node_student_service -->|"accesses students"| node_student_repo
node_record_service -->|"reads and writes"| node_record_repo
node_sbi_ui -->|"manages reports"| node_api_client
node_sbi_routes -->|"extracts statement"| node_sbi_extract
node_sbi_routes -->|"generates transactions"| node_sbi_generate
node_sbi_routes -->|"manages reports"| node_report_service
node_report_service -->|"reads and writes"| node_report_repo
node_user_repo -->|"queries"| node_database
node_student_repo -->|"queries"| node_database
node_record_repo -->|"queries"| node_database
node_report_repo -->|"queries"| node_database

click node_portal "https://github.com/cmreddyg85/statgen/tree/main/frontend/src/app/(portal)"
click node_login_ui "https://github.com/cmreddyg85/statgen/blob/main/frontend/src/app/login/LoginForm.tsx"
click node_api_client "https://github.com/cmreddyg85/statgen/blob/main/frontend/src/lib/api.ts"
click node_session_ui "https://github.com/cmreddyg85/statgen/blob/main/frontend/src/lib/session-context.tsx"
click node_api_app "https://github.com/cmreddyg85/statgen/blob/main/backend/src/app.ts"
click node_auth_routes "https://github.com/cmreddyg85/statgen/blob/main/backend/src/routes/auth.routes.ts"
click node_auth_service "https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/auth.service.ts"
click node_session_service "https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/session.service.ts"
click node_users_ui "https://github.com/cmreddyg85/statgen/blob/main/frontend/src/app/(portal)/users/UsersClient.tsx"
click node_users_routes "https://github.com/cmreddyg85/statgen/blob/main/backend/src/routes/users.routes.ts"
click node_user_service "https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/user.service.ts"
click node_students_ui "https://github.com/cmreddyg85/statgen/blob/main/frontend/src/app/(portal)/students/StudentsClient.tsx"
click node_student_routes "https://github.com/cmreddyg85/statgen/blob/main/backend/src/routes/students.routes.ts"
click node_student_service "https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/student.service.ts"
click node_record_service "https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/student-record.service.ts"
click node_generation_ui "https://github.com/cmreddyg85/statgen/blob/main/frontend/src/app/(portal)/students/%5Bid%5D/generate/page.tsx"
click node_sbi_ui "https://github.com/cmreddyg85/statgen/blob/main/frontend/src/app/(portal)/sbi/SbiReportsClient.tsx"
click node_sbi_routes "https://github.com/cmreddyg85/statgen/blob/main/backend/src/sbi/sbi.routes.ts"
click node_sbi_extract "https://github.com/cmreddyg85/statgen/blob/main/backend/src/sbi/extract.js"
click node_sbi_generate "https://github.com/cmreddyg85/statgen/blob/main/backend/src/sbi/generate.js"
click node_report_service "https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/sbi-report.service.ts"
click node_audit_service "https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/audit.service.ts"
click node_user_repo "https://github.com/cmreddyg85/statgen/blob/main/backend/src/repositories/user.repository.ts"
click node_student_repo "https://github.com/cmreddyg85/statgen/blob/main/backend/src/repositories/student.repository.ts"
click node_record_repo "https://github.com/cmreddyg85/statgen/blob/main/backend/src/repositories/student-record.repository.ts"
click node_report_repo "https://github.com/cmreddyg85/statgen/blob/main/backend/src/repositories/sbi-report.repository.ts"
click node_database "https://github.com/cmreddyg85/statgen/blob/main/backend/src/db/pool.ts"

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_portal,node_login_ui,node_api_client,node_session_ui,node_users_ui,node_students_ui,node_generation_ui,node_sbi_ui,node_user toneBlue
class node_api_app,node_auth_routes,node_auth_service,node_session_service,node_users_routes,node_student_routes toneAmber
class node_user_service,node_student_service,node_record_service,node_sbi_routes,node_sbi_extract,node_sbi_generate,node_report_service,node_audit_service toneMint
class node_user_repo,node_student_repo,node_record_repo,node_report_repo,node_database toneRose
class node_admin toneIndigo
```

## Components

### Web portal

- [Portal pages](https://github.com/cmreddyg85/statgen/tree/main/frontend/src/app/(portal)): `frontend/src/app/(portal)`
- [Login form](https://github.com/cmreddyg85/statgen/blob/main/frontend/src/app/login/LoginForm.tsx): `frontend/src/app/login/LoginForm.tsx`
- [API client](https://github.com/cmreddyg85/statgen/blob/main/frontend/src/lib/api.ts): `frontend/src/lib/api.ts`
- [Session context](https://github.com/cmreddyg85/statgen/blob/main/frontend/src/lib/session-context.tsx): `frontend/src/lib/session-context.tsx`
- [User management](https://github.com/cmreddyg85/statgen/blob/main/frontend/src/app/(portal)/users/UsersClient.tsx): `frontend/src/app/(portal)/users/UsersClient.tsx`
- [Student CRM](https://github.com/cmreddyg85/statgen/blob/main/frontend/src/app/(portal)/students/StudentsClient.tsx): `frontend/src/app/(portal)/students/StudentsClient.tsx`
- [Record generation](https://github.com/cmreddyg85/statgen/blob/main/frontend/src/app/(portal)/students/%5Bid%5D/generate/page.tsx): `frontend/src/app/(portal)/students/[id]/generate/page.tsx`
- [SBI reports](https://github.com/cmreddyg85/statgen/blob/main/frontend/src/app/(portal)/sbi/SbiReportsClient.tsx): `frontend/src/app/(portal)/sbi/SbiReportsClient.tsx`

### API and access

- [Express API](https://github.com/cmreddyg85/statgen/blob/main/backend/src/app.ts): `backend/src/app.ts`
- [Auth routes](https://github.com/cmreddyg85/statgen/blob/main/backend/src/routes/auth.routes.ts): `backend/src/routes/auth.routes.ts`
- [Authentication](https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/auth.service.ts): `backend/src/services/auth.service.ts`
- [Session policy](https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/session.service.ts): `backend/src/services/session.service.ts`
- [User routes](https://github.com/cmreddyg85/statgen/blob/main/backend/src/routes/users.routes.ts): `backend/src/routes/users.routes.ts`
- [Student routes](https://github.com/cmreddyg85/statgen/blob/main/backend/src/routes/students.routes.ts): `backend/src/routes/students.routes.ts`

### Business workflows

- [User service](https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/user.service.ts): `backend/src/services/user.service.ts`
- [Student service](https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/student.service.ts): `backend/src/services/student.service.ts`
- [Record service](https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/student-record.service.ts): `backend/src/services/student-record.service.ts`
- [SBI endpoints](https://github.com/cmreddyg85/statgen/blob/main/backend/src/sbi/sbi.routes.ts): `backend/src/sbi/sbi.routes.ts`
- [Statement extraction](https://github.com/cmreddyg85/statgen/blob/main/backend/src/sbi/extract.js): `backend/src/sbi/extract.js`
- [Transaction generation](https://github.com/cmreddyg85/statgen/blob/main/backend/src/sbi/generate.js): `backend/src/sbi/generate.js`
- [Report service](https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/sbi-report.service.ts): `backend/src/services/sbi-report.service.ts`
- [Audit service](https://github.com/cmreddyg85/statgen/blob/main/backend/src/services/audit.service.ts): `backend/src/services/audit.service.ts`

### Persistence

- [User repository](https://github.com/cmreddyg85/statgen/blob/main/backend/src/repositories/user.repository.ts): `backend/src/repositories/user.repository.ts`
- [Student repository](https://github.com/cmreddyg85/statgen/blob/main/backend/src/repositories/student.repository.ts): `backend/src/repositories/student.repository.ts`
- [Record repository](https://github.com/cmreddyg85/statgen/blob/main/backend/src/repositories/student-record.repository.ts): `backend/src/repositories/student-record.repository.ts`
- [Report repository](https://github.com/cmreddyg85/statgen/blob/main/backend/src/repositories/sbi-report.repository.ts): `backend/src/repositories/sbi-report.repository.ts`
- [PostgreSQL](https://github.com/cmreddyg85/statgen/blob/main/backend/src/db/pool.ts): `backend/src/db/pool.ts`

### Other components

- **Admin**
- **User**

## Connections

- Admin → Login form: signs in
- User → Login form: signs in
- Admin → Portal pages: uses
- User → Portal pages: uses
- Login form → API client: submits credentials
- Portal pages → API client: requests data
- API client → Express API: same-origin API
- Express API → Auth routes: dispatches
- Express API → User routes: dispatches
- Express API → Student routes: dispatches
- Express API → SBI endpoints: dispatches
- Auth routes → Authentication: authenticates
- Authentication → Session policy: creates session
- Authentication → User repository: looks up account
- Session policy → PostgreSQL: reads and writes
- Session context → API client: checks session
- User management → API client: manages accounts
- User routes → User service: handles requests
- User routes → Audit service: loads activity
- User service → User repository: accesses users
- Student CRM → API client: manages students
- Record generation → API client: submits record
- Student routes → Student service: handles students
- Student routes → Record service: handles records
- Student service → Student repository: accesses students
- Record service → Record repository: reads and writes
- SBI reports → API client: manages reports
- SBI endpoints → Statement extraction: extracts statement
- SBI endpoints → Transaction generation: generates transactions
- SBI endpoints → Report service: manages reports
- Report service → Report repository: reads and writes
- User repository → PostgreSQL: queries
- Student repository → PostgreSQL: queries
- Record repository → PostgreSQL: queries
- Report repository → PostgreSQL: queries
