# soumabhasaha15/citylibrary architecture

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

- Interactive diagram: https://gitdiagram.com/soumabhasaha15/citylibrary
- Repository: https://github.com/soumabhasaha15/citylibrary

## Overview

CityLibrary is a full-stack library system: users browse books and author profiles, authenticate, and manage borrowing through a React client backed by a Django API; Django also provides library administration. The graph emphasizes documented catalog, author-indexing, borrowing, and theming capabilities. The sampled source confirms author retrieval, authentication requests, author persistence, admin registration, and Cloudinary cleanup; links for unsampled book and borrowing flows are omitted rather than inferred.

Main entry points: [`DjangoAdmin/library/models/author.py`](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/models/author.py) (Author records), [`ViteServer/src/main.tsx`](https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/main.tsx) (Client bootstrap), [`DjangoAdmin/library/views/authors.py`](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/views/authors.py) (Author endpoints), [`DjangoAdmin/library/signals/author.py`](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/signals/author.py) (Author image cleanup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web client"]
  node_app["Client bootstrap<br/>[main.tsx]"]
  node_author_pages["Author pages<br/>[index.tsx]"]
  node_author_detail_page["Author detail<br/>[$id.tsx]"]
  node_book_pages["Book browsing<br/>[index.tsx]"]
  node_borrow_pages["Borrowing pages<br/>[index.tsx]"]
  node_auth_pages["Login and signup<br/>[_auth.signup.tsx]"]
  node_author_hooks["Author query<br/>[fetchAuthors.ts]"]
  node_auth_store["Auth state and actions<br/>[auth.ts]"]
  node_theme_store["Theme state<br/>[theme.ts]"]
  node_http_client["HTTP client<br/>[axios-base.ts]"]
end

subgraph group_api["Django API"]
  node_author_endpoint["Author endpoints<br/>[authors.py]"]
  node_author_detail_endpoint["Author detail endpoint<br/>[author_by_id.py]"]
  node_book_endpoints["Book endpoints<br/>[books.py]"]
  node_borrow_endpoints["Borrow endpoints<br/>[borrow.py]"]
  node_user_endpoints["User endpoints<br/>[user_login.py]"]
  node_author_filter["Author filtering<br/>[author.py]"]
  node_author_serializer["Author serialization<br/>[author.py]"]
end

subgraph group_domain["Library data and admin"]
  node_author_model["Author records<br/>[author.py]"]
  node_book_model["Book records<br/>[book.py]"]
  node_borrow_model["Borrow records<br/>[borrow.py]"]
  node_author_admin["Author administration<br/>[author.py]"]
  node_author_signals["Author image cleanup<br/>[author.py]"]
  node_signal_setup["Signal registration<br/>[apps.py]"]
end

subgraph group_integrations["External services"]
  node_db[("Library database")]
  node_cloudinary["Cloudinary images"]
end

node_patron(("Library user"))

node_patron -->|"uses"| node_app
node_app -->|"routes"| node_author_pages
node_app -->|"routes"| node_auth_pages
node_app -->|"reads state"| node_theme_store
node_author_pages -->|"queries"| node_author_hooks
node_author_hooks -->|"requests"| node_http_client
node_http_client -->|"GET authors"| node_author_endpoint
node_auth_pages -->|"submits signup"| node_auth_store
node_auth_store -->|"sends auth requests"| node_http_client
node_author_endpoint -->|"filters"| node_author_filter
node_author_endpoint -->|"serializes"| node_author_serializer
node_author_detail_endpoint -->|"loads author"| node_author_model
node_author_detail_endpoint -->|"serializes"| node_author_serializer
node_author_admin -->|"administers"| node_author_model
node_author_model -->|"persists"| node_db
node_book_model -->|"persists"| node_db
node_borrow_model -->|"persists"| node_db
node_signal_setup -->|"loads signals"| node_author_signals
node_author_signals -->|"reads records"| node_author_model
node_author_signals -->|"deletes assets"| node_cloudinary
node_author_model -->|"stores images"| node_cloudinary

click node_app "https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/main.tsx"
click node_author_pages "https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/routes/user/authors/index.tsx"
click node_author_detail_page "https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/routes/user/authors/%24id.tsx"
click node_book_pages "https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/routes/user/books/index.tsx"
click node_borrow_pages "https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/routes/user/borrow/index.tsx"
click node_auth_pages "https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/routes/_auth.signup.tsx"
click node_author_hooks "https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/hooks/fetchAuthors.ts"
click node_auth_store "https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/store/auth.ts"
click node_theme_store "https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/store/theme.ts"
click node_http_client "https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/util/axios-base.ts"
click node_author_endpoint "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/views/authors.py"
click node_author_detail_endpoint "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/views/author_by_id.py"
click node_book_endpoints "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/views/books.py"
click node_borrow_endpoints "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/views/borrow.py"
click node_user_endpoints "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/views/user_login.py"
click node_author_filter "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/filters/author.py"
click node_author_serializer "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/serializers/author.py"
click node_author_model "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/models/author.py"
click node_book_model "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/models/book.py"
click node_borrow_model "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/models/borrow.py"
click node_author_admin "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/admin/author.py"
click node_author_signals "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/signals/author.py"
click node_signal_setup "https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/apps.py"

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_author_pages,node_author_detail_page,node_book_pages,node_borrow_pages,node_auth_pages,node_author_hooks,node_auth_store,node_theme_store,node_http_client,node_patron toneBlue
class node_author_endpoint,node_author_detail_endpoint,node_book_endpoints,node_borrow_endpoints,node_user_endpoints,node_author_filter,node_author_serializer toneAmber
class node_author_model,node_book_model,node_borrow_model,node_author_admin,node_author_signals,node_signal_setup toneMint
class node_db,node_cloudinary toneRose
```

## Components

### Web client

- [Client bootstrap](https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/main.tsx): `ViteServer/src/main.tsx`
- [Author pages](https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/routes/user/authors/index.tsx): `ViteServer/src/routes/user/authors/index.tsx`
- [Author detail](https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/routes/user/authors/%24id.tsx): `ViteServer/src/routes/user/authors/$id.tsx`
- [Book browsing](https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/routes/user/books/index.tsx): `ViteServer/src/routes/user/books/index.tsx`
- [Borrowing pages](https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/routes/user/borrow/index.tsx): `ViteServer/src/routes/user/borrow/index.tsx`
- [Login and signup](https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/routes/_auth.signup.tsx): `ViteServer/src/routes/_auth.signup.tsx`
- [Author query](https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/hooks/fetchAuthors.ts): `ViteServer/src/hooks/fetchAuthors.ts`
- [Auth state and actions](https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/store/auth.ts): `ViteServer/src/store/auth.ts`
- [Theme state](https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/store/theme.ts): `ViteServer/src/store/theme.ts`
- [HTTP client](https://github.com/soumabhasaha15/citylibrary/blob/main/ViteServer/src/util/axios-base.ts): `ViteServer/src/util/axios-base.ts`

### Django API

- [Author endpoints](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/views/authors.py): `DjangoAdmin/library/views/authors.py`
- [Author detail endpoint](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/views/author_by_id.py): `DjangoAdmin/library/views/author_by_id.py`
- [Book endpoints](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/views/books.py): `DjangoAdmin/library/views/books.py`
- [Borrow endpoints](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/views/borrow.py): `DjangoAdmin/library/views/borrow.py`
- [User endpoints](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/views/user_login.py): `DjangoAdmin/library/views/user_login.py`
- [Author filtering](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/filters/author.py): `DjangoAdmin/library/filters/author.py`
- [Author serialization](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/serializers/author.py): `DjangoAdmin/library/serializers/author.py`

### Library data and admin

- [Author records](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/models/author.py): `DjangoAdmin/library/models/author.py`
- [Book records](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/models/book.py): `DjangoAdmin/library/models/book.py`
- [Borrow records](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/models/borrow.py): `DjangoAdmin/library/models/borrow.py`
- [Author administration](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/admin/author.py): `DjangoAdmin/library/admin/author.py`
- [Author image cleanup](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/signals/author.py): `DjangoAdmin/library/signals/author.py`
- [Signal registration](https://github.com/soumabhasaha15/citylibrary/blob/main/DjangoAdmin/library/apps.py): `DjangoAdmin/library/apps.py`

### External services

- **Library database**
- **Cloudinary images**

### Other components

- **Library user**

## Connections

- Library user → Client bootstrap: uses
- Client bootstrap → Author pages: routes
- Client bootstrap → Login and signup: routes
- Client bootstrap → Theme state: reads state
- Author pages → Author query: queries
- Author query → HTTP client: requests
- HTTP client → Author endpoints: GET authors
- Login and signup → Auth state and actions: submits signup
- Auth state and actions → HTTP client: sends auth requests
- Author endpoints → Author filtering: filters
- Author endpoints → Author serialization: serializes
- Author detail endpoint → Author records: loads author
- Author detail endpoint → Author serialization: serializes
- Author administration → Author records: administers
- Author records → Library database: persists
- Book records → Library database: persists
- Borrow records → Library database: persists
- Signal registration → Author image cleanup: loads signals
- Author image cleanup → Author records: reads records
- Author image cleanup → Cloudinary images: deletes assets
- Author records → Cloudinary images: stores images
