# brentmengelman/summarist-home-page architecture

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

- Interactive diagram: https://gitdiagram.com/brentmengelman/summarist-home-page
- Repository: https://github.com/brentmengelman/summarist-home-page

## Overview

Summarist is a book-summary discovery and listening app. Users browse or search titles, open a book’s details, and play its audio summary; they can save or finish books in a personal library, authenticate, and choose a subscription plan. The graph includes the Redux state layer and the Data Connect-backed library. Source excerpts show the library and search calls; page and checkout relationships rely on the source index, and payment-provider wiring is not shown.

Main entry points: [`src/app/page.tsx`](https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/page.tsx) (Landing Page), [`src/components/Sidebar.tsx`](https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Sidebar.tsx) (Navigation Sidebar), [`src/components/SearchHeader.tsx`](https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/SearchHeader.tsx) (Book Search), [`src/services/api.ts`](https://github.com/brentmengelman/summarist-home-page/blob/main/src/services/api.ts) (Book Catalog API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Discovery"]
  node_landing["Landing Page<br/>[page.tsx]"]
  node_landing_ui["Landing Sections<br/>[Landing.tsx]"]
  node_features["Feature Highlights<br/>[Features.tsx]"]
  node_reviews["Member Reviews<br/>[Reviews.tsx]"]
  node_numbers["Usage Numbers<br/>[Numbers.tsx]"]
  node_footer["Footer<br/>[Footer.tsx]"]
  node_for_you["Recommendations<br/>[page.tsx]"]
  node_search["Book Search<br/>[SearchHeader.tsx]"]
  node_catalog_api["Book Catalog API<br/>[api.ts]"]
  node_cloud_catalog{{"Catalog Service"}}
end

subgraph group_reading["Book Experience"]
  node_book_page["Book Details<br/>[page.tsx]"]
  node_player["Audio Player<br/>[page.tsx]"]
end

subgraph group_account["Account and Library"]
  node_auth_modal["Authentication<br/>[AuthModal.tsx]"]
  node_auth_state["Auth State<br/>[authSlice.ts]"]
  node_firebase["Firebase Auth<br/>[firebase.ts]"]
  node_library_page["My Library<br/>[page.tsx]"]
  node_library_state["Library State<br/>[librarySlice.ts]"]
  node_library_service["Library Service<br/>[libraryService.ts]"]
  node_data_connect{{"Firebase Data Connect<br/>[index.esm.js]"}}
  node_settings["Settings<br/>[page.tsx]"]
  node_plans["Plan Selection<br/>[page.tsx]"]
  node_checkout["Checkout Endpoint<br/>[route.ts]"]
end

subgraph group_platform["App Platform"]
  node_app_shell["App Layout<br/>[layout.tsx]"]
  node_providers["State Providers<br/>[providers.tsx]"]
  node_store["Redux Store<br/>[store.ts]"]
  node_hooks["Typed Store Hooks<br/>[hooks.ts]"]
  node_sidebar["Navigation Sidebar<br/>[Sidebar.tsx]"]
end

node_visitor(("Reader"))
node_payment{{"Payment Provider"}}

node_visitor -->|"opens"| node_landing
node_landing -->|"renders"| node_landing_ui
node_landing -->|"renders"| node_features
node_landing -->|"renders"| node_reviews
node_landing -->|"renders"| node_numbers
node_landing -->|"renders"| node_footer
node_visitor -->|"browses"| node_for_you
node_for_you -->|"renders"| node_search
node_search -->|"searches via"| node_catalog_api
node_catalog_api -->|"fetches titles"| node_cloud_catalog
node_search -->|"opens selected"| node_book_page
node_book_page -->|"loads book"| node_catalog_api
node_book_page -->|"renders"| node_sidebar
node_player -->|"loads book"| node_catalog_api
node_player -->|"marks finished"| node_library_service
node_player -->|"renders"| node_sidebar
node_visitor -->|"authenticates"| node_auth_modal
node_auth_modal -->|"calls auth"| node_firebase
node_auth_modal -->|"updates"| node_auth_state
node_sidebar -->|"signs out"| node_firebase
node_sidebar -->|"updates"| node_auth_state
node_library_page -->|"dispatches fetch"| node_library_state
node_library_state -->|"loads and saves"| node_library_service
node_library_service -->|"queries and writes"| node_data_connect
node_library_page -->|"renders"| node_sidebar
node_library_page -->|"renders"| node_search
node_settings -->|"renders"| node_sidebar
node_settings -->|"reads"| node_auth_state
node_visitor -->|"chooses plan"| node_plans
node_plans -.->|"starts checkout"| node_checkout
node_checkout -.->|"processes payment"| node_payment
node_app_shell -->|"wraps app"| node_providers
node_providers -->|"provides"| node_store
node_hooks -->|"accesses"| node_store

click node_landing "https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/page.tsx"
click node_landing_ui "https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Landing.tsx"
click node_features "https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Features.tsx"
click node_reviews "https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Reviews.tsx"
click node_numbers "https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Numbers.tsx"
click node_footer "https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Footer.tsx"
click node_for_you "https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/for-you/page.tsx"
click node_search "https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/SearchHeader.tsx"
click node_catalog_api "https://github.com/brentmengelman/summarist-home-page/blob/main/src/services/api.ts"
click node_book_page "https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/book/%5Bid%5D/page.tsx"
click node_player "https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/player/%5Bid%5D/page.tsx"
click node_auth_modal "https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/AuthModal.tsx"
click node_auth_state "https://github.com/brentmengelman/summarist-home-page/blob/main/src/store/authSlice.ts"
click node_firebase "https://github.com/brentmengelman/summarist-home-page/blob/main/src/firebase/firebase.ts"
click node_library_page "https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/library/page.tsx"
click node_library_state "https://github.com/brentmengelman/summarist-home-page/blob/main/src/store/librarySlice.ts"
click node_library_service "https://github.com/brentmengelman/summarist-home-page/blob/main/src/services/libraryService.ts"
click node_data_connect "https://github.com/brentmengelman/summarist-home-page/blob/main/src/dataconnect-generated/esm/index.esm.js"
click node_settings "https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/settings/page.tsx"
click node_plans "https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/choose-plan/page.tsx"
click node_checkout "https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/api/create-checkout-session/route.ts"
click node_app_shell "https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/layout.tsx"
click node_providers "https://github.com/brentmengelman/summarist-home-page/blob/main/src/store/providers.tsx"
click node_store "https://github.com/brentmengelman/summarist-home-page/blob/main/src/store/store.ts"
click node_hooks "https://github.com/brentmengelman/summarist-home-page/blob/main/src/store/hooks.ts"
click node_sidebar "https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Sidebar.tsx"

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_landing,node_landing_ui,node_features,node_reviews,node_numbers,node_footer,node_for_you,node_search,node_catalog_api,node_cloud_catalog toneBlue
class node_book_page,node_player toneAmber
class node_auth_modal,node_auth_state,node_firebase,node_library_page,node_library_state,node_library_service,node_data_connect,node_settings,node_plans,node_checkout toneMint
class node_app_shell,node_providers,node_store,node_hooks,node_sidebar toneRose
class node_visitor,node_payment toneIndigo
```

## Components

### Discovery

- [Landing Page](https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/page.tsx): `src/app/page.tsx`
- [Landing Sections](https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Landing.tsx): `src/components/Landing.tsx`
- [Feature Highlights](https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Features.tsx): `src/components/Features.tsx`
- [Member Reviews](https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Reviews.tsx): `src/components/Reviews.tsx`
- [Usage Numbers](https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Numbers.tsx): `src/components/Numbers.tsx`
- [Footer](https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Footer.tsx): `src/components/Footer.tsx`
- [Recommendations](https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/for-you/page.tsx): `src/app/for-you/page.tsx`
- [Book Search](https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/SearchHeader.tsx): `src/components/SearchHeader.tsx`
- [Book Catalog API](https://github.com/brentmengelman/summarist-home-page/blob/main/src/services/api.ts): `src/services/api.ts`
- **Catalog Service**

### Book Experience

- [Book Details](https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/book/%5Bid%5D/page.tsx): `src/app/book/[id]/page.tsx`
- [Audio Player](https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/player/%5Bid%5D/page.tsx): `src/app/player/[id]/page.tsx`

### Account and Library

- [Authentication](https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/AuthModal.tsx): `src/components/AuthModal.tsx`
- [Auth State](https://github.com/brentmengelman/summarist-home-page/blob/main/src/store/authSlice.ts): `src/store/authSlice.ts`
- [Firebase Auth](https://github.com/brentmengelman/summarist-home-page/blob/main/src/firebase/firebase.ts): `src/firebase/firebase.ts`
- [My Library](https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/library/page.tsx): `src/app/library/page.tsx`
- [Library State](https://github.com/brentmengelman/summarist-home-page/blob/main/src/store/librarySlice.ts): `src/store/librarySlice.ts`
- [Library Service](https://github.com/brentmengelman/summarist-home-page/blob/main/src/services/libraryService.ts): `src/services/libraryService.ts`
- [Firebase Data Connect](https://github.com/brentmengelman/summarist-home-page/blob/main/src/dataconnect-generated/esm/index.esm.js): `src/dataconnect-generated/esm/index.esm.js`
- [Settings](https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/settings/page.tsx): `src/app/settings/page.tsx`
- [Plan Selection](https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/choose-plan/page.tsx): `src/app/choose-plan/page.tsx`
- [Checkout Endpoint](https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/api/create-checkout-session/route.ts): `src/app/api/create-checkout-session/route.ts`

### App Platform

- [App Layout](https://github.com/brentmengelman/summarist-home-page/blob/main/src/app/layout.tsx): `src/app/layout.tsx`
- [State Providers](https://github.com/brentmengelman/summarist-home-page/blob/main/src/store/providers.tsx): `src/store/providers.tsx`
- [Redux Store](https://github.com/brentmengelman/summarist-home-page/blob/main/src/store/store.ts): `src/store/store.ts`
- [Typed Store Hooks](https://github.com/brentmengelman/summarist-home-page/blob/main/src/store/hooks.ts): `src/store/hooks.ts`
- [Navigation Sidebar](https://github.com/brentmengelman/summarist-home-page/blob/main/src/components/Sidebar.tsx): `src/components/Sidebar.tsx`

### Other components

- **Reader**
- **Payment Provider**

## Connections

- Reader → Landing Page: opens (evidence: `src/app/page.tsx`)
- Landing Page → Landing Sections: renders (evidence: `src/app/page.tsx`)
- Landing Page → Feature Highlights: renders (evidence: `src/app/page.tsx`)
- Landing Page → Member Reviews: renders (evidence: `src/app/page.tsx`)
- Landing Page → Usage Numbers: renders (evidence: `src/app/page.tsx`)
- Landing Page → Footer: renders (evidence: `src/app/page.tsx`)
- Reader → Recommendations: browses (evidence: `src/app/for-you/page.tsx`)
- Recommendations → Book Search: renders (evidence: `src/app/for-you/page.tsx`)
- Book Search → Book Catalog API: searches via (evidence: `src/components/SearchHeader.tsx`)
- Book Catalog API → Catalog Service: fetches titles (evidence: `src/services/api.ts`)
- Book Search → Book Details: opens selected (evidence: `src/components/SearchHeader.tsx`)
- Book Details → Book Catalog API: loads book (evidence: `src/app/book/[id]/page.tsx`)
- Book Details → Navigation Sidebar: renders (evidence: `src/app/book/[id]/page.tsx`)
- Audio Player → Book Catalog API: loads book (evidence: `src/app/player/[id]/page.tsx`)
- Audio Player → Library Service: marks finished (evidence: `src/app/player/[id]/page.tsx`)
- Audio Player → Navigation Sidebar: renders (evidence: `src/app/player/[id]/page.tsx`)
- Reader → Authentication: authenticates (evidence: `src/components/AuthModal.tsx`)
- Authentication → Firebase Auth: calls auth (evidence: `src/components/AuthModal.tsx`)
- Authentication → Auth State: updates (evidence: `src/components/AuthModal.tsx`)
- Navigation Sidebar → Firebase Auth: signs out (evidence: `src/components/Sidebar.tsx`)
- Navigation Sidebar → Auth State: updates (evidence: `src/components/Sidebar.tsx`)
- My Library → Library State: dispatches fetch (evidence: `src/app/library/page.tsx`)
- Library State → Library Service: loads and saves (evidence: `src/store/librarySlice.ts`)
- Library Service → Firebase Data Connect: queries and writes (evidence: `src/services/libraryService.ts`)
- My Library → Navigation Sidebar: renders (evidence: `src/app/library/page.tsx`)
- My Library → Book Search: renders (evidence: `src/app/library/page.tsx`)
- Settings → Navigation Sidebar: renders (evidence: `src/app/settings/page.tsx`)
- Settings → Auth State: reads (evidence: `src/app/settings/page.tsx`)
- Reader → Plan Selection: chooses plan (evidence: `src/app/choose-plan/page.tsx`)
- Plan Selection → Checkout Endpoint: starts checkout
- Checkout Endpoint → Payment Provider: processes payment
- App Layout → State Providers: wraps app (evidence: `src/app/layout.tsx`)
- State Providers → Redux Store: provides (evidence: `src/store/providers.tsx`)
- Typed Store Hooks → Redux Store: accesses (evidence: `src/store/hooks.ts`)
