# qutiepatutie/libra architecture

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

- Interactive diagram: https://gitdiagram.com/qutiepatutie/libra
- Repository: https://github.com/qutiepatutie/libra

## Overview

LibraSphere is a library management system: patrons authenticate, browse/search books, request loans and reserve rooms; administrators manage catalog inventory, approve loans and reservations, process returns, and review circulation and borrower analytics. The React routes expose these workflows and call API modules, which communicate with Django views backed by account and library domain models; Supabase is documented as the database. Attendance is a separate access-controlled workflow. Analytics and identity are distinct internal layers. Edges reflect excerpted calls or README capabilities; unsampled routing/API details are omitted where their wiring cannot be verified.

Main entry points: [`frontend/src/routes/AppRoutes.jsx`](https://github.com/qutiepatutie/libra/blob/main/frontend/src/routes/AppRoutes.jsx) (Application routes), [`backend/library/views.py`](https://github.com/qutiepatutie/libra/blob/main/backend/library/views.py) (Library endpoints), [`frontend/src/hooks/useBorrowers.js`](https://github.com/qutiepatutie/libra/blob/main/frontend/src/hooks/useBorrowers.js) (Loan and reservation actions), [`backend/library/models.py`](https://github.com/qutiepatutie/libra/blob/main/backend/library/models.py) (Library records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React application"]
  node_app_routes["Application routes<br/>[AppRoutes.jsx]"]
  node_library_page["Book browsing<br/>[Library.jsx]"]
  node_library_state["Catalog search<br/>[useLibraryBooks.js]"]
  node_addbook["Catalog administration<br/>[AddBook.jsx]"]
  node_addbook_state["Book entry workflow<br/>[useAddBook.js]"]
  node_borrowed_page["Borrowed books<br/>[BorrowedBooks.jsx]"]
  node_reservation_page["Room reservation"]
  node_admin_borrowers["Borrower administration<br/>[AdminBorrowers.jsx]"]
  node_admin_reservations["Reservation administration"]
  node_borrower_state["Loan and reservation actions<br/>[useBorrowers.js]"]
  node_attendance["Attendance workflow<br/>[Attendance.jsx]"]
  node_user_dashboard["Patron dashboard<br/>[UserDashboard.jsx]"]
  node_admin_dashboard["Admin dashboards<br/>[Circulation.jsx]"]
end

subgraph group_identity["Identity and access"]
  node_auth_ui["Sign-in and registration<br/>[AuthPage.jsx]"]
  node_auth_state["Auth workflow<br/>[useAuth.js]"]
  node_auth_util["Session utilities<br/>[auth.util.js]"]
  node_user_api["User API<br/>[users.js]"]
end

subgraph group_library["Library operations"]
  node_books_api["Books API<br/>[books.js]"]
  node_rooms_api["Rooms API<br/>[rooms.js]"]
end

subgraph group_analytics["Reporting"]
  node_analytics_api["Analytics API<br/>[analytics.js]"]
  node_user_analytics["Patron analytics<br/>[user_analytics.py]"]
  node_admin_analytics["Admin analytics<br/>[admin_analytics.py]"]
  node_borrower_analytics["Borrower analytics"]
  node_inventory_analytics["Inventory analytics"]
end

subgraph group_backend["Django services"]
  node_account_models[("Account and profiles<br/>[models.py]")]
  node_account_views["Account endpoints<br/>[views.py]"]
  node_book_views["Book endpoints<br/>[views.py]"]
  node_library_views["Library endpoints<br/>[views.py]"]
  node_library_models[("Library records<br/>[models.py]")]
  node_permissions["Role permissions<br/>[permissions.py]"]
end

node_patron(("Patron"))
node_administrator(("Administrator"))
node_supabase[("Supabase database")]
node_google["Google sign-in"]

node_patron -.->|"uses"| node_app_routes
node_administrator -.->|"uses"| node_app_routes
node_app_routes -->|"routes to"| node_auth_ui
node_app_routes -->|"routes to"| node_library_page
node_app_routes -->|"routes to"| node_borrowed_page
node_app_routes -->|"routes to"| node_reservation_page
node_app_routes -->|"routes to"| node_admin_borrowers
node_app_routes -->|"routes to"| node_admin_reservations
node_app_routes -->|"routes to"| node_attendance
node_auth_ui -->|"uses"| node_auth_state
node_auth_ui -->|"uses"| node_auth_util
node_auth_state -->|"calls"| node_user_api
node_auth_state -->|"requests code"| node_auth_util
node_auth_ui -.->|"requests sign-in"| node_google
node_library_page -.->|"uses"| node_library_state
node_library_state -->|"fetches books"| node_books_api
node_addbook -.->|"uses"| node_addbook_state
node_addbook_state -->|"autofills and adds"| node_books_api
node_borrowed_page -.->|"uses"| node_borrower_state
node_reservation_page -->|"uses"| node_rooms_api
node_reservation_page -->|"uses"| node_borrower_state
node_admin_borrowers -.->|"uses"| node_borrower_state
node_admin_reservations -.->|"uses"| node_borrower_state
node_borrower_state -->|"calls"| node_books_api
node_borrower_state -->|"calls"| node_rooms_api
node_user_dashboard -.->|"loads analytics"| node_analytics_api
node_admin_dashboard -.->|"loads analytics"| node_analytics_api
node_user_api -.->|"HTTP requests"| node_account_views
node_books_api -.->|"HTTP requests"| node_book_views
node_rooms_api -.->|"HTTP requests"| node_library_views
node_analytics_api -.->|"HTTP requests"| node_library_views
node_account_views -->|"reads and writes"| node_account_models
node_book_views -.->|"manages catalog"| node_library_models
node_library_views -->|"reads and writes"| node_library_models
node_library_views -->|"checks roles"| node_permissions
node_library_views -->|"requests summaries"| node_user_analytics
node_library_views -->|"requests summaries"| node_admin_analytics
node_library_views -->|"requests summaries"| node_borrower_analytics
node_library_views -->|"requests summaries"| node_inventory_analytics
node_user_analytics -->|"queries"| node_library_models
node_admin_analytics -->|"queries"| node_library_models
node_borrower_analytics -->|"uses"| node_admin_analytics
node_borrower_analytics -->|"uses"| node_user_analytics
node_inventory_analytics -->|"queries"| node_library_models
node_library_models -->|"references profiles"| node_account_models
node_account_models -.->|"persisted in"| node_supabase

click node_app_routes "https://github.com/qutiepatutie/libra/blob/main/frontend/src/routes/AppRoutes.jsx"
click node_auth_ui "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/auth/AuthPage.jsx"
click node_auth_state "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/auth/useAuth.js"
click node_auth_util "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/auth/auth.util.js"
click node_user_api "https://github.com/qutiepatutie/libra/blob/main/frontend/src/api/users.js"
click node_library_page "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/library/Library.jsx"
click node_library_state "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/library/useLibraryBooks.js"
click node_addbook "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/admin/addbook/AddBook.jsx"
click node_addbook_state "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/admin/addbook/useAddBook.js"
click node_books_api "https://github.com/qutiepatutie/libra/blob/main/frontend/src/api/books.js"
click node_borrowed_page "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/user/borrowedBooks/BorrowedBooks.jsx"
click node_reservation_page "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/user/roomReservation/RoomReservation.jsx"
click node_rooms_api "https://github.com/qutiepatutie/libra/blob/main/frontend/src/api/rooms.js"
click node_admin_borrowers "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/admin/admission/AdminBorrowers.jsx"
click node_admin_reservations "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/admin/admission/RoomReservations.jsx"
click node_borrower_state "https://github.com/qutiepatutie/libra/blob/main/frontend/src/hooks/useBorrowers.js"
click node_attendance "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/attendance/Attendance.jsx"
click node_user_dashboard "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/user/UserDashboard.jsx"
click node_admin_dashboard "https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/admin/dashboard/Circulation.jsx"
click node_analytics_api "https://github.com/qutiepatutie/libra/blob/main/frontend/src/api/analytics.js"
click node_account_models "https://github.com/qutiepatutie/libra/blob/main/backend/accounts/models.py"
click node_account_views "https://github.com/qutiepatutie/libra/blob/main/backend/accounts/views.py"
click node_book_views "https://github.com/qutiepatutie/libra/blob/main/backend/books/views.py"
click node_library_views "https://github.com/qutiepatutie/libra/blob/main/backend/library/views.py"
click node_library_models "https://github.com/qutiepatutie/libra/blob/main/backend/library/models.py"
click node_permissions "https://github.com/qutiepatutie/libra/blob/main/backend/library/permissions.py"
click node_user_analytics "https://github.com/qutiepatutie/libra/blob/main/backend/library/user_analytics.py"
click node_admin_analytics "https://github.com/qutiepatutie/libra/blob/main/backend/library/admin_analytics.py"
click node_borrower_analytics "https://github.com/qutiepatutie/libra/blob/main/backend/library/borrower_analytics.py"
click node_inventory_analytics "https://github.com/qutiepatutie/libra/blob/main/backend/library/inventory_analytics.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_routes,node_library_page,node_library_state,node_addbook,node_addbook_state,node_borrowed_page,node_reservation_page,node_admin_borrowers,node_admin_reservations,node_borrower_state,node_attendance,node_user_dashboard,node_admin_dashboard toneBlue
class node_auth_ui,node_auth_state,node_auth_util,node_user_api,node_supabase toneAmber
class node_books_api,node_rooms_api toneMint
class node_analytics_api,node_user_analytics,node_admin_analytics,node_borrower_analytics,node_inventory_analytics toneRose
class node_account_models,node_account_views,node_book_views,node_library_views,node_library_models,node_permissions,node_patron,node_administrator,node_google toneIndigo
```

## Components

### React application

- [Application routes](https://github.com/qutiepatutie/libra/blob/main/frontend/src/routes/AppRoutes.jsx): `frontend/src/routes/AppRoutes.jsx`
- [Book browsing](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/library/Library.jsx): `frontend/src/pages/library/Library.jsx`
- [Catalog search](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/library/useLibraryBooks.js): `frontend/src/pages/library/useLibraryBooks.js`
- [Catalog administration](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/admin/addbook/AddBook.jsx): `frontend/src/pages/admin/addbook/AddBook.jsx`
- [Book entry workflow](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/admin/addbook/useAddBook.js): `frontend/src/pages/admin/addbook/useAddBook.js`
- [Borrowed books](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/user/borrowedBooks/BorrowedBooks.jsx): `frontend/src/pages/user/borrowedBooks/BorrowedBooks.jsx`
- [Room reservation](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/user/roomReservation/RoomReservation.jsx): `frontend/src/pages/user/roomReservation/RoomReservation.jsx`
- [Borrower administration](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/admin/admission/AdminBorrowers.jsx): `frontend/src/pages/admin/admission/AdminBorrowers.jsx`
- [Reservation administration](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/admin/admission/RoomReservations.jsx): `frontend/src/pages/admin/admission/RoomReservations.jsx`
- [Loan and reservation actions](https://github.com/qutiepatutie/libra/blob/main/frontend/src/hooks/useBorrowers.js): `frontend/src/hooks/useBorrowers.js`
- [Attendance workflow](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/attendance/Attendance.jsx): `frontend/src/pages/attendance/Attendance.jsx`
- [Patron dashboard](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/user/UserDashboard.jsx): `frontend/src/pages/user/UserDashboard.jsx`
- [Admin dashboards](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/admin/dashboard/Circulation.jsx): `frontend/src/pages/admin/dashboard/Circulation.jsx`

### Identity and access

- [Sign-in and registration](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/auth/AuthPage.jsx): `frontend/src/pages/auth/AuthPage.jsx`
- [Auth workflow](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/auth/useAuth.js): `frontend/src/pages/auth/useAuth.js`
- [Session utilities](https://github.com/qutiepatutie/libra/blob/main/frontend/src/pages/auth/auth.util.js): `frontend/src/pages/auth/auth.util.js`
- [User API](https://github.com/qutiepatutie/libra/blob/main/frontend/src/api/users.js): `frontend/src/api/users.js`

### Library operations

- [Books API](https://github.com/qutiepatutie/libra/blob/main/frontend/src/api/books.js): `frontend/src/api/books.js`
- [Rooms API](https://github.com/qutiepatutie/libra/blob/main/frontend/src/api/rooms.js): `frontend/src/api/rooms.js`

### Reporting

- [Analytics API](https://github.com/qutiepatutie/libra/blob/main/frontend/src/api/analytics.js): `frontend/src/api/analytics.js`
- [Patron analytics](https://github.com/qutiepatutie/libra/blob/main/backend/library/user_analytics.py): `backend/library/user_analytics.py`
- [Admin analytics](https://github.com/qutiepatutie/libra/blob/main/backend/library/admin_analytics.py): `backend/library/admin_analytics.py`
- [Borrower analytics](https://github.com/qutiepatutie/libra/blob/main/backend/library/borrower_analytics.py): `backend/library/borrower_analytics.py`
- [Inventory analytics](https://github.com/qutiepatutie/libra/blob/main/backend/library/inventory_analytics.py): `backend/library/inventory_analytics.py`

### Django services

- [Account and profiles](https://github.com/qutiepatutie/libra/blob/main/backend/accounts/models.py): `backend/accounts/models.py`
- [Account endpoints](https://github.com/qutiepatutie/libra/blob/main/backend/accounts/views.py): `backend/accounts/views.py`
- [Book endpoints](https://github.com/qutiepatutie/libra/blob/main/backend/books/views.py): `backend/books/views.py`
- [Library endpoints](https://github.com/qutiepatutie/libra/blob/main/backend/library/views.py): `backend/library/views.py`
- [Library records](https://github.com/qutiepatutie/libra/blob/main/backend/library/models.py): `backend/library/models.py`
- [Role permissions](https://github.com/qutiepatutie/libra/blob/main/backend/library/permissions.py): `backend/library/permissions.py`

### Other components

- **Patron**
- **Administrator**
- **Supabase database**
- **Google sign-in**

## Connections

- Patron → Application routes: uses
- Administrator → Application routes: uses
- Application routes → Sign-in and registration: routes to (evidence: `frontend/src/routes/AppRoutes.jsx`)
- Application routes → Book browsing: routes to (evidence: `frontend/src/routes/AppRoutes.jsx`)
- Application routes → Borrowed books: routes to (evidence: `frontend/src/routes/AppRoutes.jsx`)
- Application routes → Room reservation: routes to (evidence: `frontend/src/routes/AppRoutes.jsx`)
- Application routes → Borrower administration: routes to (evidence: `frontend/src/routes/AppRoutes.jsx`)
- Application routes → Reservation administration: routes to (evidence: `frontend/src/routes/AppRoutes.jsx`)
- Application routes → Attendance workflow: routes to (evidence: `frontend/src/routes/AppRoutes.jsx`)
- Sign-in and registration → Auth workflow: uses (evidence: `frontend/src/pages/auth/AuthPage.jsx`)
- Sign-in and registration → Session utilities: uses (evidence: `frontend/src/pages/auth/AuthPage.jsx`)
- Auth workflow → User API: calls (evidence: `frontend/src/pages/auth/useAuth.js`)
- Auth workflow → Session utilities: requests code (evidence: `frontend/src/pages/auth/useAuth.js`)
- Sign-in and registration → Google sign-in: requests sign-in
- Book browsing → Catalog search: uses
- Catalog search → Books API: fetches books (evidence: `frontend/src/pages/library/useLibraryBooks.js`)
- Catalog administration → Book entry workflow: uses
- Book entry workflow → Books API: autofills and adds (evidence: `frontend/src/pages/admin/addbook/useAddBook.js`)
- Borrowed books → Loan and reservation actions: uses
- Room reservation → Rooms API: uses (evidence: `frontend/src/pages/user/roomReservation/RoomReservation.jsx`)
- Room reservation → Loan and reservation actions: uses (evidence: `frontend/src/pages/user/roomReservation/RoomReservation.jsx`)
- Borrower administration → Loan and reservation actions: uses
- Reservation administration → Loan and reservation actions: uses
- Loan and reservation actions → Books API: calls (evidence: `frontend/src/hooks/useBorrowers.js`)
- Loan and reservation actions → Rooms API: calls (evidence: `frontend/src/hooks/useBorrowers.js`)
- Patron dashboard → Analytics API: loads analytics
- Admin dashboards → Analytics API: loads analytics
- User API → Account endpoints: HTTP requests
- Books API → Book endpoints: HTTP requests
- Rooms API → Library endpoints: HTTP requests
- Analytics API → Library endpoints: HTTP requests
- Account endpoints → Account and profiles: reads and writes (evidence: `backend/accounts/views.py`)
- Book endpoints → Library records: manages catalog
- Library endpoints → Library records: reads and writes (evidence: `backend/library/views.py`)
- Library endpoints → Role permissions: checks roles (evidence: `backend/library/views.py`)
- Library endpoints → Patron analytics: requests summaries (evidence: `backend/library/views.py`)
- Library endpoints → Admin analytics: requests summaries (evidence: `backend/library/views.py`)
- Library endpoints → Borrower analytics: requests summaries (evidence: `backend/library/views.py`)
- Library endpoints → Inventory analytics: requests summaries (evidence: `backend/library/views.py`)
- Patron analytics → Library records: queries (evidence: `backend/library/user_analytics.py`)
- Admin analytics → Library records: queries (evidence: `backend/library/admin_analytics.py`)
- Borrower analytics → Admin analytics: uses (evidence: `backend/library/borrower_analytics.py`)
- Borrower analytics → Patron analytics: uses (evidence: `backend/library/borrower_analytics.py`)
- Inventory analytics → Library records: queries (evidence: `backend/library/inventory_analytics.py`)
- Library records → Account and profiles: references profiles (evidence: `backend/library/models.py`)
- Account and profiles → Supabase database: persisted in
