# vamsikrishna070/printing-website architecture

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

## Overview

SmartPrint lets students register or sign in, upload print files with copy and color options, and track their jobs; staff view the shared queue and advance jobs from pending through completed. Account settings support profile and password changes, while a daily task removes completed jobs. The map follows the documented client/API workflow and sampled backend handlers and storage; some frontend hook wiring and scheduler implementation were not sampled, so those connections are not inferred.

Main entry points: [`backend/services/storage.service.js`](https://github.com/vamsikrishna070/printing-website/blob/main/backend/services/storage.service.js) (Storage adapter), [`backend/controllers/job.controller.js`](https://github.com/vamsikrishna070/printing-website/blob/main/backend/controllers/job.controller.js) (Job handlers), [`frontend/src/hooks/use-auth.js`](https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/hooks/use-auth.js) (Auth hook), [`backend/server/app.js`](https://github.com/vamsikrishna070/printing-website/blob/main/backend/server/app.js) (Express app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["App routing<br/>[App.jsx]"]
  node_authpage["Sign-in<br/>[auth-page.jsx]"]
  node_studentdash["Student dashboard"]
  node_staffdash["Staff dashboard"]
  node_settings["Account settings<br/>[settings-page.jsx]"]
  node_authhook["Auth hook<br/>[use-auth.js]"]
  node_jobshook["Jobs hook<br/>[use-jobs.js]"]
  node_api_client["API client<br/>[queryClient.js]"]
end

subgraph group_api["API and identity"]
  node_server["Express app<br/>[app.js]"]
  node_authroutes["Auth routes<br/>[auth.routes.js]"]
  node_jobroutes["Job routes<br/>[job.routes.js]"]
  node_authcontroller["Auth handlers<br/>[auth.controller.js]"]
  node_usercontroller["User handlers<br/>[user.controller.js]"]
  node_contracts["API contracts<br/>[routes.js]"]
end

subgraph group_printing["Print operations"]
  node_jobcontroller["Job handlers<br/>[job.controller.js]"]
  node_upload["Upload middleware"]
end

subgraph group_data["Persistence and cleanup"]
  node_storage["Storage adapter<br/>[storage.service.js]"]
  node_models["Mongoose models<br/>[index.js]"]
  node_scheduler["Daily cleanup<br/>[scheduler.js]"]
end

node_students(("Students"))
node_staff(("Staff"))
node_http(("HTTP clients"))
node_mongo[("MongoDB")]
node_files[("Uploaded files")]

node_students -->|"use"| node_authpage
node_students -->|"submit and track"| node_studentdash
node_staff -->|"use"| node_authpage
node_staff -->|"process queue"| node_staffdash
node_app -->|"checks identity"| node_authhook
node_authpage -->|"uses"| node_authhook
node_studentdash -->|"uses"| node_jobshook
node_staffdash -->|"uses"| node_jobshook
node_settings -->|"uses"| node_authhook
node_authhook -->|"requests"| node_api_client
node_jobshook -->|"requests"| node_api_client
node_api_client -->|"sends requests"| node_http
node_http -->|"HTTP requests"| node_server
node_server -->|"registers routes"| node_authroutes
node_server -->|"registers routes"| node_jobroutes
node_authroutes -->|"dispatches"| node_authcontroller
node_jobroutes -->|"dispatches"| node_jobcontroller
node_jobroutes -->|"processes upload"| node_upload
node_jobcontroller -->|"validates status"| node_contracts
node_authcontroller -->|"reads and writes users"| node_storage
node_usercontroller -->|"reads and writes users"| node_storage
node_jobcontroller -->|"reads and writes jobs"| node_storage
node_storage -->|"uses schemas"| node_models
node_storage -->|"reads and writes"| node_mongo
node_upload -->|"stores uploads"| node_files
node_jobcontroller -->|"downloads files"| node_files
node_scheduler -->|"deletes completed jobs"| node_storage
node_storage -->|"removes files"| node_files

click node_app "https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/App.jsx"
click node_authpage "https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/pages/auth-page.jsx"
click node_studentdash "https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/pages/student-dashboard.jsx"
click node_staffdash "https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/pages/staff-dashboard.jsx"
click node_settings "https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/pages/settings-page.jsx"
click node_authhook "https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/hooks/use-auth.js"
click node_jobshook "https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/hooks/use-jobs.js"
click node_api_client "https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/lib/queryClient.js"
click node_server "https://github.com/vamsikrishna070/printing-website/blob/main/backend/server/app.js"
click node_authroutes "https://github.com/vamsikrishna070/printing-website/blob/main/backend/routes/auth.routes.js"
click node_jobroutes "https://github.com/vamsikrishna070/printing-website/blob/main/backend/routes/job.routes.js"
click node_authcontroller "https://github.com/vamsikrishna070/printing-website/blob/main/backend/controllers/auth.controller.js"
click node_usercontroller "https://github.com/vamsikrishna070/printing-website/blob/main/backend/controllers/user.controller.js"
click node_jobcontroller "https://github.com/vamsikrishna070/printing-website/blob/main/backend/controllers/job.controller.js"
click node_contracts "https://github.com/vamsikrishna070/printing-website/blob/main/shared/routes.js"
click node_upload "https://github.com/vamsikrishna070/printing-website/blob/main/backend/middleware/upload.middleware.js"
click node_storage "https://github.com/vamsikrishna070/printing-website/blob/main/backend/services/storage.service.js"
click node_models "https://github.com/vamsikrishna070/printing-website/blob/main/backend/models/index.js"
click node_scheduler "https://github.com/vamsikrishna070/printing-website/blob/main/backend/jobs/scheduler.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_authpage,node_studentdash,node_staffdash,node_settings,node_authhook,node_jobshook,node_api_client,node_http toneBlue
class node_server,node_authroutes,node_jobroutes,node_authcontroller,node_usercontroller,node_contracts,node_mongo,node_files toneAmber
class node_jobcontroller,node_upload toneMint
class node_storage,node_models,node_scheduler toneRose
class node_students,node_staff toneIndigo
```

## Components

### Web client

- [App routing](https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Sign-in](https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/pages/auth-page.jsx): `frontend/src/pages/auth-page.jsx`
- [Student dashboard](https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/pages/student-dashboard.jsx): `frontend/src/pages/student-dashboard.jsx`
- [Staff dashboard](https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/pages/staff-dashboard.jsx): `frontend/src/pages/staff-dashboard.jsx`
- [Account settings](https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/pages/settings-page.jsx): `frontend/src/pages/settings-page.jsx`
- [Auth hook](https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/hooks/use-auth.js): `frontend/src/hooks/use-auth.js`
- [Jobs hook](https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/hooks/use-jobs.js): `frontend/src/hooks/use-jobs.js`
- [API client](https://github.com/vamsikrishna070/printing-website/blob/main/frontend/src/lib/queryClient.js): `frontend/src/lib/queryClient.js`

### API and identity

- [Express app](https://github.com/vamsikrishna070/printing-website/blob/main/backend/server/app.js): `backend/server/app.js`
- [Auth routes](https://github.com/vamsikrishna070/printing-website/blob/main/backend/routes/auth.routes.js): `backend/routes/auth.routes.js`
- [Job routes](https://github.com/vamsikrishna070/printing-website/blob/main/backend/routes/job.routes.js): `backend/routes/job.routes.js`
- [Auth handlers](https://github.com/vamsikrishna070/printing-website/blob/main/backend/controllers/auth.controller.js): `backend/controllers/auth.controller.js`
- [User handlers](https://github.com/vamsikrishna070/printing-website/blob/main/backend/controllers/user.controller.js): `backend/controllers/user.controller.js`
- [API contracts](https://github.com/vamsikrishna070/printing-website/blob/main/shared/routes.js): `shared/routes.js`

### Print operations

- [Job handlers](https://github.com/vamsikrishna070/printing-website/blob/main/backend/controllers/job.controller.js): `backend/controllers/job.controller.js`
- [Upload middleware](https://github.com/vamsikrishna070/printing-website/blob/main/backend/middleware/upload.middleware.js): `backend/middleware/upload.middleware.js`

### Persistence and cleanup

- [Storage adapter](https://github.com/vamsikrishna070/printing-website/blob/main/backend/services/storage.service.js): `backend/services/storage.service.js`
- [Mongoose models](https://github.com/vamsikrishna070/printing-website/blob/main/backend/models/index.js): `backend/models/index.js`
- [Daily cleanup](https://github.com/vamsikrishna070/printing-website/blob/main/backend/jobs/scheduler.js): `backend/jobs/scheduler.js`

### Other components

- **Students**
- **Staff**
- **HTTP clients**
- **MongoDB**
- **Uploaded files**

## Connections

- Students → Sign-in: use
- Students → Student dashboard: submit and track
- Staff → Sign-in: use
- Staff → Staff dashboard: process queue
- App routing → Auth hook: checks identity
- Sign-in → Auth hook: uses
- Student dashboard → Jobs hook: uses
- Staff dashboard → Jobs hook: uses
- Account settings → Auth hook: uses
- Auth hook → API client: requests
- Jobs hook → API client: requests
- API client → HTTP clients: sends requests
- HTTP clients → Express app: HTTP requests
- Express app → Auth routes: registers routes
- Express app → Job routes: registers routes
- Auth routes → Auth handlers: dispatches
- Job routes → Job handlers: dispatches
- Job routes → Upload middleware: processes upload
- Job handlers → API contracts: validates status
- Auth handlers → Storage adapter: reads and writes users
- User handlers → Storage adapter: reads and writes users
- Job handlers → Storage adapter: reads and writes jobs
- Storage adapter → Mongoose models: uses schemas
- Storage adapter → MongoDB: reads and writes
- Upload middleware → Uploaded files: stores uploads
- Job handlers → Uploaded files: downloads files
- Daily cleanup → Storage adapter: deletes completed jobs
- Storage adapter → Uploaded files: removes files
