# waasilaasif/thoughtbook architecture

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

## Overview

ThoughtBook is an Android reading tracker centered on adding books to personal shelves and recording emotional reading entries over time. The main user journey spans book discovery or entry, shelf management, book details, and a per-book mood/page/note timeline; recommendations and persistent display preferences are additional capabilities. The README documents Firebase-backed identity and repository-mediated data access. Java implementation files were not sampled, so some screen-to-repository and external-service wiring is based on documented architecture rather than inspected call sites.

Main entry points: [`app/src/main/java/com/example/thoughtbook/BookRepository.java`](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/BookRepository.java) (Book repository), [`app/src/main/java/com/example/thoughtbook/MainActivity.java`](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/MainActivity.java) (App navigation), [`app/src/main/java/com/example/thoughtbook/BookshelfFragment.java`](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/BookshelfFragment.java) (Bookshelf), [`app/src/main/java/com/example/thoughtbook/LogBookActivity.java`](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/LogBookActivity.java) (Reading timeline)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App entry"]
  node_main["App navigation<br/>[MainActivity.java]"]
  node_auth["Anonymous identity<br/>[AuthManager.java]"]
  node_theme["Theme preference<br/>[ThemeManager.java]"]
end

subgraph group_library["Library workflow"]
  node_shelf["Bookshelf"]
  node_shelfvm["Shelf state"]
  node_addbook["Add book"]
  node_explore["Recommendations"]
  node_filter["Shelf filters"]
end

subgraph group_reading["Reading journal"]
  node_detail["Book details"]
  node_logbook["Reading timeline"]
  node_entry["Log entry editor"]
  node_timeline["Timeline display"]
end

subgraph group_services["Data and discovery"]
  node_repo["Book repository"]
  node_firestore[("Cloud Firestore")]
  node_firebase["Firebase Auth"]
  node_api["Google Books API"]
  node_retrofit["API client"]
  node_booksapi["Books API service"]
end

subgraph group_models["Domain models"]
  node_book["Book and shelf data<br/>[Book.java]"]
  node_logmodel["Reading log data"]
end

node_reader(("Reader"))

node_reader -->|"opens app"| node_main
node_main -->|"establishes identity"| node_auth
node_auth -->|"anonymous sign-in"| node_firebase
node_main -->|"navigates"| node_shelf
node_main -->|"navigates"| node_addbook
node_main -->|"navigates"| node_explore
node_shelf -->|"loads library"| node_repo
node_shelf -->|"observes state"| node_shelfvm
node_shelf -->|"opens filters"| node_filter
node_shelf -->|"opens book"| node_detail
node_addbook -->|"adds book"| node_repo
node_detail -->|"loads book"| node_repo
node_detail -->|"opens timeline"| node_logbook
node_logbook -->|"manages entries"| node_repo
node_logbook -->|"edits entry"| node_entry
node_logbook -->|"displays entries"| node_timeline
node_entry -->|"saves changes"| node_repo
node_explore -->|"requests recommendations"| node_repo
node_repo -->|"reads and writes"| node_firestore
node_repo -.->|"requests book data"| node_retrofit
node_retrofit -.->|"creates client"| node_booksapi
node_booksapi -.->|"searches titles"| node_api
node_repo -->|"maps library data"| node_book
node_repo -->|"maps journal data"| node_logmodel
node_reader -->|"changes appearance"| node_theme

click node_main "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/MainActivity.java"
click node_auth "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/AuthManager.java"
click node_shelf "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/BookshelfFragment.java"
click node_shelfvm "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/BookshelfViewModel.java"
click node_addbook "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/AddBookFragment.java"
click node_detail "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/BookDetailActivity.java"
click node_logbook "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/LogBookActivity.java"
click node_entry "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/AddLogEntryActivity.java"
click node_timeline "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/LogTimelineAdapter.java"
click node_explore "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/ExploreFragment.java"
click node_filter "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/LibraryFilterActivity.java"
click node_theme "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/ThemeManager.java"
click node_repo "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/BookRepository.java"
click node_retrofit "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/RetrofitClient.java"
click node_booksapi "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/GoogleBooksApiService.java"
click node_book "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/Book.java"
click node_logmodel "https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/ReadingLogEntry.java"

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_main,node_auth,node_theme toneBlue
class node_shelf,node_shelfvm,node_addbook,node_explore,node_filter toneAmber
class node_detail,node_logbook,node_entry,node_timeline toneMint
class node_repo,node_firestore,node_firebase,node_api,node_retrofit,node_booksapi toneRose
class node_book,node_logmodel,node_reader toneIndigo
```

## Components

### App entry

- [App navigation](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/MainActivity.java): `app/src/main/java/com/example/thoughtbook/MainActivity.java`
- [Anonymous identity](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/AuthManager.java): `app/src/main/java/com/example/thoughtbook/AuthManager.java`
- [Theme preference](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/ThemeManager.java): `app/src/main/java/com/example/thoughtbook/ThemeManager.java`

### Library workflow

- [Bookshelf](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/BookshelfFragment.java): `app/src/main/java/com/example/thoughtbook/BookshelfFragment.java`
- [Shelf state](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/BookshelfViewModel.java): `app/src/main/java/com/example/thoughtbook/BookshelfViewModel.java`
- [Add book](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/AddBookFragment.java): `app/src/main/java/com/example/thoughtbook/AddBookFragment.java`
- [Recommendations](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/ExploreFragment.java): `app/src/main/java/com/example/thoughtbook/ExploreFragment.java`
- [Shelf filters](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/LibraryFilterActivity.java): `app/src/main/java/com/example/thoughtbook/LibraryFilterActivity.java`

### Reading journal

- [Book details](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/BookDetailActivity.java): `app/src/main/java/com/example/thoughtbook/BookDetailActivity.java`
- [Reading timeline](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/LogBookActivity.java): `app/src/main/java/com/example/thoughtbook/LogBookActivity.java`
- [Log entry editor](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/AddLogEntryActivity.java): `app/src/main/java/com/example/thoughtbook/AddLogEntryActivity.java`
- [Timeline display](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/LogTimelineAdapter.java): `app/src/main/java/com/example/thoughtbook/LogTimelineAdapter.java`

### Data and discovery

- [Book repository](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/BookRepository.java): `app/src/main/java/com/example/thoughtbook/BookRepository.java`
- **Cloud Firestore**
- **Firebase Auth**
- **Google Books API**
- [API client](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/RetrofitClient.java): `app/src/main/java/com/example/thoughtbook/RetrofitClient.java`
- [Books API service](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/GoogleBooksApiService.java): `app/src/main/java/com/example/thoughtbook/GoogleBooksApiService.java`

### Domain models

- [Book and shelf data](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/Book.java): `app/src/main/java/com/example/thoughtbook/Book.java`
- [Reading log data](https://github.com/waasilaasif/thoughtbook/blob/main/app/src/main/java/com/example/thoughtbook/ReadingLogEntry.java): `app/src/main/java/com/example/thoughtbook/ReadingLogEntry.java`

### Other components

- **Reader**

## Connections

- Reader → App navigation: opens app
- App navigation → Anonymous identity: establishes identity
- Anonymous identity → Firebase Auth: anonymous sign-in
- App navigation → Bookshelf: navigates
- App navigation → Add book: navigates
- App navigation → Recommendations: navigates
- Bookshelf → Book repository: loads library
- Bookshelf → Shelf state: observes state
- Bookshelf → Shelf filters: opens filters
- Bookshelf → Book details: opens book
- Add book → Book repository: adds book
- Book details → Book repository: loads book
- Book details → Reading timeline: opens timeline
- Reading timeline → Book repository: manages entries
- Reading timeline → Log entry editor: edits entry
- Reading timeline → Timeline display: displays entries
- Log entry editor → Book repository: saves changes
- Recommendations → Book repository: requests recommendations
- Book repository → Cloud Firestore: reads and writes
- Book repository → API client: requests book data
- API client → Books API service: creates client
- Books API service → Google Books API: searches titles
- Book repository → Book and shelf data: maps library data
- Book repository → Reading log data: maps journal data
- Reader → Theme preference: changes appearance
