# hayeon-lee/bookarchive-2025 architecture

> Architecture diagram of the GitHub repository hayeon-lee/bookarchive-2025, 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/hayeon-lee/bookarchive-2025
- Repository: https://github.com/hayeon-lee/bookarchive-2025

## Overview

BOOKARCHIVE-2025 is a React app for a reading group to track book goals and completion. Members sign in, view monthly reading summaries, open a member’s shelf, and—on their own shelf—add, edit, delete, or mark books complete with a separate completion date. Admins have routes for reading status and password requests. The sampled pages and services show the main shelf and summary flows; admin and password-management implementations were not sampled, so their internal links are not inferred.

Main entry points: [`src/App.tsx`](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/App.tsx) (Route shell), [`src/pages/book/MyShelfPage.tsx`](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/book/MyShelfPage.tsx) (Member shelf), [`src/firebase/firebaseConfig.ts`](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/firebase/firebaseConfig.ts) (Firebase configuration), [`src/pages/HomePage.tsx`](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/HomePage.tsx) (Monthly overview)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_navigation["App &amp; Access"]
  node_app["Route shell<br/>[App.tsx]"]
  node_protected["Protected routes<br/>[ProtectedRoute.tsx]"]
  node_adminroute["Admin routes<br/>[AdminRoute.tsx]"]
end

subgraph group_reading["Reading Experience"]
  node_home["Monthly overview<br/>[HomePage.tsx]"]
  node_shelf["Member shelf<br/>[MyShelfPage.tsx]"]
  node_bookcard["Book goal card<br/>[BookCard.tsx]"]
  node_addmodal["Add-book form<br/>[AddBookModal.tsx]"]
  node_membercard["Member summary"]
  node_monthselector["Month selector<br/>[MonthSelector.tsx]"]
  node_booktypes["Book data types<br/>[book.ts]"]
end

subgraph group_identity["Identity &amp; Admin"]
  node_loginpage["Login page<br/>[LoginPage.tsx]"]
  node_loginform["Login form<br/>[LoginForm.tsx]"]
  node_authservice["Login lookup<br/>[authService.ts]"]
  node_userstore["Persistent user state"]
  node_change["Change password"]
  node_resetinfo["Reset guidance"]
  node_resetservice["Password reset service"]
  node_admin["Admin dashboard"]
  node_passwordrequests["Password requests"]
  node_readingstatus["Reading status"]
end

subgraph group_persistence["Firebase Data"]
  node_bookservice["Book collection reads"]
  node_addservice["Add book<br/>[addBookService.ts]"]
  node_modifyservice["Update book"]
  node_deleteservice["Delete book"]
  node_firebase["Firebase configuration<br/>[firebaseConfig.ts]"]
end

node_reader(("Reading group member"))
node_firestore[("Cloud Firestore")]

node_reader -->|"opens"| node_app
node_app -->|"routes to"| node_loginpage
node_app -->|"guards"| node_protected
node_app -->|"guards"| node_adminroute
node_app -->|"routes to"| node_home
node_app -->|"routes to"| node_shelf
node_app -->|"routes to"| node_admin
node_app -->|"routes to"| node_passwordrequests
node_app -->|"routes to"| node_readingstatus
node_loginpage -->|"renders"| node_loginform
node_loginform -->|"authenticates with"| node_authservice
node_loginform -->|"sets user state"| node_userstore
node_protected -->|"checks session"| node_userstore
node_adminroute -->|"checks session"| node_userstore
node_home -->|"loads summaries"| node_bookservice
node_home -->|"renders"| node_membercard
node_home -->|"selects month"| node_monthselector
node_shelf -->|"loads books"| node_bookservice
node_shelf -->|"renders"| node_addmodal
node_shelf -->|"adds book"| node_addservice
node_shelf -->|"renders"| node_bookcard
node_shelf -->|"selects month"| node_monthselector
node_bookcard -->|"updates goal"| node_modifyservice
node_bookcard -->|"deletes book"| node_deleteservice
node_authservice -->|"uses database config"| node_firebase
node_bookservice -->|"uses database config"| node_firebase
node_addservice -->|"uses database config"| node_firebase
node_modifyservice -->|"uses database config"| node_firebase
node_deleteservice -->|"uses database config"| node_firebase
node_firebase -->|"initializes"| node_firestore
node_change -.-> node_resetservice
node_passwordrequests -.-> node_resetservice

click node_app "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/App.tsx"
click node_protected "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/routes/ProtectedRoute.tsx"
click node_adminroute "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/routes/AdminRoute.tsx"
click node_home "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/HomePage.tsx"
click node_shelf "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/book/MyShelfPage.tsx"
click node_bookcard "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/components/book/BookCard.tsx"
click node_addmodal "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/components/book/AddBookModal.tsx"
click node_membercard "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/components/book/MemberSummaryCard.tsx"
click node_monthselector "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/components/common/MonthSelector.tsx"
click node_bookservice "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/book/getMemberBookService.ts"
click node_addservice "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/book/addBookService.ts"
click node_modifyservice "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/book/modifyBookService.ts"
click node_deleteservice "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/book/deleteBookService.ts"
click node_booktypes "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/types/book.ts"
click node_loginpage "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/auth/LoginPage.tsx"
click node_loginform "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/components/auth/LoginForm.tsx"
click node_authservice "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/auth/authService.ts"
click node_userstore "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/auth/useUsrStoreService.ts"
click node_change "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/auth/ChangePasswordPage.tsx"
click node_resetinfo "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/auth/ResetPasswordInfoPage.tsx"
click node_resetservice "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/admin/resetPasswordService.ts"
click node_admin "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/admin/AdminDashboardPage.tsx"
click node_passwordrequests "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/admin/PasswordRequestPage.tsx"
click node_readingstatus "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/admin/ReadingStatusPage.tsx"
click node_firebase "https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/firebase/firebaseConfig.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_app,node_protected,node_adminroute toneBlue
class node_home,node_shelf,node_bookcard,node_addmodal,node_membercard,node_monthselector,node_booktypes,node_firestore toneAmber
class node_loginpage,node_loginform,node_authservice,node_userstore,node_change,node_resetinfo,node_resetservice,node_admin,node_passwordrequests,node_readingstatus toneMint
class node_bookservice,node_addservice,node_modifyservice,node_deleteservice,node_firebase toneRose
class node_reader toneIndigo
```

## Components

### App & Access

- [Route shell](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/App.tsx): `src/App.tsx`
- [Protected routes](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/routes/ProtectedRoute.tsx): `src/routes/ProtectedRoute.tsx`
- [Admin routes](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/routes/AdminRoute.tsx): `src/routes/AdminRoute.tsx`

### Reading Experience

- [Monthly overview](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/HomePage.tsx): `src/pages/HomePage.tsx`
- [Member shelf](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/book/MyShelfPage.tsx): `src/pages/book/MyShelfPage.tsx`
- [Book goal card](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/components/book/BookCard.tsx): `src/components/book/BookCard.tsx`
- [Add-book form](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/components/book/AddBookModal.tsx): `src/components/book/AddBookModal.tsx`
- [Member summary](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/components/book/MemberSummaryCard.tsx): `src/components/book/MemberSummaryCard.tsx`
- [Month selector](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/components/common/MonthSelector.tsx): `src/components/common/MonthSelector.tsx`
- [Book data types](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/types/book.ts): `src/types/book.ts`

### Identity & Admin

- [Login page](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/auth/LoginPage.tsx): `src/pages/auth/LoginPage.tsx`
- [Login form](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/components/auth/LoginForm.tsx): `src/components/auth/LoginForm.tsx`
- [Login lookup](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/auth/authService.ts): `src/services/auth/authService.ts`
- [Persistent user state](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/auth/useUsrStoreService.ts): `src/services/auth/useUsrStoreService.ts`
- [Change password](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/auth/ChangePasswordPage.tsx): `src/pages/auth/ChangePasswordPage.tsx`
- [Reset guidance](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/auth/ResetPasswordInfoPage.tsx): `src/pages/auth/ResetPasswordInfoPage.tsx`
- [Password reset service](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/admin/resetPasswordService.ts): `src/services/admin/resetPasswordService.ts`
- [Admin dashboard](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/admin/AdminDashboardPage.tsx): `src/pages/admin/AdminDashboardPage.tsx`
- [Password requests](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/admin/PasswordRequestPage.tsx): `src/pages/admin/PasswordRequestPage.tsx`
- [Reading status](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/pages/admin/ReadingStatusPage.tsx): `src/pages/admin/ReadingStatusPage.tsx`

### Firebase Data

- [Book collection reads](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/book/getMemberBookService.ts): `src/services/book/getMemberBookService.ts`
- [Add book](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/book/addBookService.ts): `src/services/book/addBookService.ts`
- [Update book](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/book/modifyBookService.ts): `src/services/book/modifyBookService.ts`
- [Delete book](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/services/book/deleteBookService.ts): `src/services/book/deleteBookService.ts`
- [Firebase configuration](https://github.com/hayeon-lee/bookarchive-2025/blob/main/src/firebase/firebaseConfig.ts): `src/firebase/firebaseConfig.ts`

### Other components

- **Reading group member**
- **Cloud Firestore**

## Connections

- Reading group member → Route shell: opens (evidence: `src/App.tsx`)
- Route shell → Login page: routes to (evidence: `src/App.tsx`)
- Route shell → Protected routes: guards (evidence: `src/App.tsx`)
- Route shell → Admin routes: guards (evidence: `src/App.tsx`)
- Route shell → Monthly overview: routes to (evidence: `src/App.tsx`)
- Route shell → Member shelf: routes to (evidence: `src/App.tsx`)
- Route shell → Admin dashboard: routes to (evidence: `src/App.tsx`)
- Route shell → Password requests: routes to (evidence: `src/App.tsx`)
- Route shell → Reading status: routes to (evidence: `src/App.tsx`)
- Login page → Login form: renders (evidence: `src/pages/auth/LoginPage.tsx`)
- Login form → Login lookup: authenticates with (evidence: `src/components/auth/LoginForm.tsx`)
- Login form → Persistent user state: sets user state (evidence: `src/components/auth/LoginForm.tsx`)
- Protected routes → Persistent user state: checks session (evidence: `src/routes/ProtectedRoute.tsx`)
- Admin routes → Persistent user state: checks session (evidence: `src/routes/AdminRoute.tsx`)
- Monthly overview → Book collection reads: loads summaries (evidence: `src/pages/HomePage.tsx`)
- Monthly overview → Member summary: renders (evidence: `src/pages/HomePage.tsx`)
- Monthly overview → Month selector: selects month (evidence: `src/pages/HomePage.tsx`)
- Member shelf → Book collection reads: loads books (evidence: `src/pages/book/MyShelfPage.tsx`)
- Member shelf → Add-book form: renders (evidence: `src/pages/book/MyShelfPage.tsx`)
- Member shelf → Add book: adds book (evidence: `src/pages/book/MyShelfPage.tsx`)
- Member shelf → Book goal card: renders (evidence: `src/pages/book/MyShelfPage.tsx`)
- Member shelf → Month selector: selects month (evidence: `src/pages/book/MyShelfPage.tsx`)
- Book goal card → Update book: updates goal (evidence: `src/components/book/BookCard.tsx`)
- Book goal card → Delete book: deletes book (evidence: `src/components/book/BookCard.tsx`)
- Login lookup → Firebase configuration: uses database config (evidence: `src/services/auth/authService.ts`)
- Book collection reads → Firebase configuration: uses database config (evidence: `src/services/book/getMemberBookService.ts`)
- Add book → Firebase configuration: uses database config (evidence: `src/services/book/addBookService.ts`)
- Update book → Firebase configuration: uses database config (evidence: `src/services/book/modifyBookService.ts`)
- Delete book → Firebase configuration: uses database config (evidence: `src/services/book/deleteBookService.ts`)
- Firebase configuration → Cloud Firestore: initializes (evidence: `src/firebase/firebaseConfig.ts`)
- Change password → Password reset service
- Password requests → Password reset service
