# varelamateo/bibliotech architecture

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

- Interactive diagram: https://gitdiagram.com/varelamateo/bibliotech
- Repository: https://github.com/varelamateo/bibliotech

## Overview

Bibliotech is a web platform for managing users’ PDF libraries. Users register or log in, then upload, list, and delete their documents; administrators can inspect and delete users. The map follows the documented Express routing and the sampled controller-to-repository and file-cleanup calls. It also retains the documented validation, localization, error handling, and secure DOM-rendering capabilities. Some frontend wiring and admin-route details are unsampled, so those links are shown only where the README or excerpts support them.

Main entry points: [`backend/server.js`](https://github.com/varelamateo/bibliotech/blob/main/backend/server.js) (Express server), [`backend/routes/book_routes.js`](https://github.com/varelamateo/bibliotech/blob/main/backend/routes/book_routes.js) (Book routes), [`backend/controllers/admin_controller.js`](https://github.com/varelamateo/bibliotech/blob/main/backend/controllers/admin_controller.js) (Admin controller), [`backend/controllers/auth_controller.js`](https://github.com/varelamateo/bibliotech/blob/main/backend/controllers/auth_controller.js) (Auth controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_server["Express server<br/>[server.js]"]
  node_views["Page routes<br/>[view_routes.js]"]
  node_screens["Web screens"]
  node_frontends["Browser controllers"]
  node_api_client["Fetch API client<br/>[api_service.js]"]
  node_ui["DOM components<br/>[ui_handlers.js]"]
end

subgraph group_identity["Identity and access"]
  node_auth_routes["Auth routes<br/>[auth_routes.js]"]
  node_auth_controller["Auth controller<br/>[auth_controller.js]"]
  node_auth_guard["JWT authorization<br/>[auth_middleware.js]"]
  node_user_repo["User repository<br/>[user_repository.js]"]
end

subgraph group_library["Document library"]
  node_book_routes["Book routes<br/>[book_routes.js]"]
  node_pdf_upload["PDF upload filter<br/>[multer_config.js]"]
  node_book_controller["Book controller<br/>[book_controller.js]"]
  node_book_repo["Book repository<br/>[book_repository.js]"]
  node_pdf_files[("PDF storage")]
end

subgraph group_admin["Administration"]
  node_admin_routes["Admin routes<br/>[admin_routes.js]"]
  node_admin_controller["Admin controller"]
end

subgraph group_shared["Shared services"]
  node_validation["Input validation"]
  node_validator["Validator rules"]
  node_i18n["Translations<br/>[i18n.js]"]
  node_file_helper["File cleanup<br/>[file_helper.js]"]
  node_errors["Error handling"]
end

node_visitor(("Visitor"))
node_mysql[("MySQL database")]

node_visitor -->|"requests pages"| node_server
node_server -->|"routes pages"| node_views
node_views -->|"serves screens"| node_screens
node_visitor -.->|"uses"| node_screens
node_frontends -.->|"calls API"| node_api_client
node_frontends -.->|"renders UI"| node_ui
node_server -->|"mounts routes"| node_auth_routes
node_server -->|"mounts routes"| node_book_routes
node_server -->|"mounts routes"| node_admin_routes
node_auth_routes -->|"validates input"| node_validation
node_auth_routes -->|"dispatches to"| node_auth_controller
node_auth_controller -->|"reads and writes"| node_user_repo
node_auth_controller -->|"uses signing key"| node_auth_guard
node_auth_controller -->|"gets messages"| node_i18n
node_book_routes -->|"checks token"| node_auth_guard
node_book_routes -->|"processes upload"| node_pdf_upload
node_book_routes -->|"validates upload"| node_validation
node_book_routes -->|"dispatches to"| node_book_controller
node_book_controller -->|"reads and writes"| node_book_repo
node_book_controller -->|"cleans files"| node_file_helper
node_book_controller -->|"gets messages"| node_i18n
node_pdf_upload -.->|"stores PDFs"| node_pdf_files
node_book_repo -->|"executes procedures"| node_mysql
node_user_repo -->|"executes procedures"| node_mysql
node_admin_routes -->|"dispatches to"| node_admin_controller
node_admin_controller -->|"reads and writes"| node_user_repo
node_admin_controller -->|"lists user books"| node_book_repo
node_admin_controller -->|"cleans files"| node_file_helper
node_admin_controller -->|"gets messages"| node_i18n
node_validation -->|"applies rules"| node_validator
node_validation -->|"removes rejected PDFs"| node_file_helper
node_server -->|"registers last"| node_errors
node_errors -->|"translates errors"| node_i18n

click node_server "https://github.com/varelamateo/bibliotech/blob/main/backend/server.js"
click node_views "https://github.com/varelamateo/bibliotech/blob/main/backend/routes/view_routes.js"
click node_screens "https://github.com/varelamateo/bibliotech/tree/main/frontend/html"
click node_frontends "https://github.com/varelamateo/bibliotech/tree/main/frontend/js/front_controllers"
click node_api_client "https://github.com/varelamateo/bibliotech/blob/main/frontend/js/services/api_service.js"
click node_ui "https://github.com/varelamateo/bibliotech/blob/main/frontend/js/components/ui_handlers.js"
click node_auth_routes "https://github.com/varelamateo/bibliotech/blob/main/backend/routes/auth_routes.js"
click node_auth_controller "https://github.com/varelamateo/bibliotech/blob/main/backend/controllers/auth_controller.js"
click node_auth_guard "https://github.com/varelamateo/bibliotech/blob/main/backend/middleware/auth_middleware.js"
click node_user_repo "https://github.com/varelamateo/bibliotech/blob/main/backend/repositories/user_repository.js"
click node_book_routes "https://github.com/varelamateo/bibliotech/blob/main/backend/routes/book_routes.js"
click node_pdf_upload "https://github.com/varelamateo/bibliotech/blob/main/backend/config/multer_config.js"
click node_book_controller "https://github.com/varelamateo/bibliotech/blob/main/backend/controllers/book_controller.js"
click node_book_repo "https://github.com/varelamateo/bibliotech/blob/main/backend/repositories/book_repository.js"
click node_admin_routes "https://github.com/varelamateo/bibliotech/blob/main/backend/routes/admin_routes.js"
click node_admin_controller "https://github.com/varelamateo/bibliotech/blob/main/backend/controllers/admin_controller.js"
click node_validation "https://github.com/varelamateo/bibliotech/blob/main/backend/middleware/validation_middleware.js"
click node_validator "https://github.com/varelamateo/bibliotech/tree/main/backend/utils/validator"
click node_i18n "https://github.com/varelamateo/bibliotech/blob/main/backend/utils/i18n/i18n.js"
click node_file_helper "https://github.com/varelamateo/bibliotech/blob/main/backend/utils/file_helper/file_helper.js"
click node_errors "https://github.com/varelamateo/bibliotech/blob/main/backend/middleware/global_error_middleware.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_server,node_views,node_screens,node_frontends,node_api_client,node_ui toneBlue
class node_auth_routes,node_auth_controller,node_auth_guard,node_user_repo,node_mysql toneAmber
class node_book_routes,node_pdf_upload,node_book_controller,node_book_repo,node_pdf_files toneMint
class node_admin_routes,node_admin_controller toneRose
class node_validation,node_validator,node_i18n,node_file_helper,node_errors,node_visitor toneIndigo
```

## Components

### Web experience

- [Express server](https://github.com/varelamateo/bibliotech/blob/main/backend/server.js): `backend/server.js`
- [Page routes](https://github.com/varelamateo/bibliotech/blob/main/backend/routes/view_routes.js): `backend/routes/view_routes.js`
- [Web screens](https://github.com/varelamateo/bibliotech/tree/main/frontend/html): `frontend/html`
- [Browser controllers](https://github.com/varelamateo/bibliotech/tree/main/frontend/js/front_controllers): `frontend/js/front_controllers`
- [Fetch API client](https://github.com/varelamateo/bibliotech/blob/main/frontend/js/services/api_service.js): `frontend/js/services/api_service.js`
- [DOM components](https://github.com/varelamateo/bibliotech/blob/main/frontend/js/components/ui_handlers.js): `frontend/js/components/ui_handlers.js`

### Identity and access

- [Auth routes](https://github.com/varelamateo/bibliotech/blob/main/backend/routes/auth_routes.js): `backend/routes/auth_routes.js`
- [Auth controller](https://github.com/varelamateo/bibliotech/blob/main/backend/controllers/auth_controller.js): `backend/controllers/auth_controller.js`
- [JWT authorization](https://github.com/varelamateo/bibliotech/blob/main/backend/middleware/auth_middleware.js): `backend/middleware/auth_middleware.js`
- [User repository](https://github.com/varelamateo/bibliotech/blob/main/backend/repositories/user_repository.js): `backend/repositories/user_repository.js`

### Document library

- [Book routes](https://github.com/varelamateo/bibliotech/blob/main/backend/routes/book_routes.js): `backend/routes/book_routes.js`
- [PDF upload filter](https://github.com/varelamateo/bibliotech/blob/main/backend/config/multer_config.js): `backend/config/multer_config.js`
- [Book controller](https://github.com/varelamateo/bibliotech/blob/main/backend/controllers/book_controller.js): `backend/controllers/book_controller.js`
- [Book repository](https://github.com/varelamateo/bibliotech/blob/main/backend/repositories/book_repository.js): `backend/repositories/book_repository.js`
- **PDF storage**

### Administration

- [Admin routes](https://github.com/varelamateo/bibliotech/blob/main/backend/routes/admin_routes.js): `backend/routes/admin_routes.js`
- [Admin controller](https://github.com/varelamateo/bibliotech/blob/main/backend/controllers/admin_controller.js): `backend/controllers/admin_controller.js`

### Shared services

- [Input validation](https://github.com/varelamateo/bibliotech/blob/main/backend/middleware/validation_middleware.js): `backend/middleware/validation_middleware.js`
- [Validator rules](https://github.com/varelamateo/bibliotech/tree/main/backend/utils/validator): `backend/utils/validator`
- [Translations](https://github.com/varelamateo/bibliotech/blob/main/backend/utils/i18n/i18n.js): `backend/utils/i18n/i18n.js`
- [File cleanup](https://github.com/varelamateo/bibliotech/blob/main/backend/utils/file_helper/file_helper.js): `backend/utils/file_helper/file_helper.js`
- [Error handling](https://github.com/varelamateo/bibliotech/blob/main/backend/middleware/global_error_middleware.js): `backend/middleware/global_error_middleware.js`

### Other components

- **Visitor**
- **MySQL database**

## Connections

- Visitor → Express server: requests pages (evidence: `backend/server.js`)
- Express server → Page routes: routes pages (evidence: `backend/server.js`)
- Page routes → Web screens: serves screens (evidence: `backend/routes/view_routes.js`)
- Visitor → Web screens: uses
- Browser controllers → Fetch API client: calls API
- Browser controllers → DOM components: renders UI
- Express server → Auth routes: mounts routes (evidence: `backend/server.js`)
- Express server → Book routes: mounts routes (evidence: `backend/server.js`)
- Express server → Admin routes: mounts routes (evidence: `backend/server.js`)
- Auth routes → Input validation: validates input (evidence: `backend/routes/auth_routes.js`)
- Auth routes → Auth controller: dispatches to (evidence: `backend/routes/auth_routes.js`)
- Auth controller → User repository: reads and writes (evidence: `backend/controllers/auth_controller.js`)
- Auth controller → JWT authorization: uses signing key (evidence: `backend/controllers/auth_controller.js`)
- Auth controller → Translations: gets messages (evidence: `backend/controllers/auth_controller.js`)
- Book routes → JWT authorization: checks token (evidence: `backend/routes/book_routes.js`)
- Book routes → PDF upload filter: processes upload (evidence: `backend/routes/book_routes.js`)
- Book routes → Input validation: validates upload (evidence: `backend/routes/book_routes.js`)
- Book routes → Book controller: dispatches to (evidence: `backend/routes/book_routes.js`)
- Book controller → Book repository: reads and writes (evidence: `backend/controllers/book_controller.js`)
- Book controller → File cleanup: cleans files (evidence: `backend/controllers/book_controller.js`)
- Book controller → Translations: gets messages (evidence: `backend/controllers/book_controller.js`)
- PDF upload filter → PDF storage: stores PDFs
- Book repository → MySQL database: executes procedures (evidence: `backend/repositories/book_repository.js`)
- User repository → MySQL database: executes procedures (evidence: `backend/repositories/user_repository.js`)
- Admin routes → Admin controller: dispatches to (evidence: `backend/routes/admin_routes.js`)
- Admin controller → User repository: reads and writes (evidence: `backend/controllers/admin_controller.js`)
- Admin controller → Book repository: lists user books (evidence: `backend/controllers/admin_controller.js`)
- Admin controller → File cleanup: cleans files (evidence: `backend/controllers/admin_controller.js`)
- Admin controller → Translations: gets messages (evidence: `backend/controllers/admin_controller.js`)
- Input validation → Validator rules: applies rules (evidence: `backend/middleware/validation_middleware.js`)
- Input validation → File cleanup: removes rejected PDFs (evidence: `backend/middleware/validation_middleware.js`)
- Express server → Error handling: registers last (evidence: `backend/server.js`)
- Error handling → Translations: translates errors (evidence: `backend/middleware/global_error_middleware.js`)
