# ppk205/comicreadersite architecture

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

- Interactive diagram: https://gitdiagram.com/ppk205/comicreadersite
- Repository: https://github.com/ppk205/comicreadersite

## Overview

Comic Reader Site is a full-stack manga and EPUB reading platform with reader, community, and role-aware staff workflows. Readers browse and search series, open image chapters or EPUBs, and manage bookmarks and progress; users can also authenticate and participate in community discussions. Staff manage catalog content, users, moderation, and settings. The frontend reaches a Java Servlet API, which uses DAOs and JPA-backed MySQL for persistent data; EPUB storage and account email are external integrations. Some backend service implementations are sampled, while several route-to-service links are based on documented API capabilities.

Main entry points: [`ComicReaderSite/src/services/api.ts`](https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/services/api.ts) (REST API client), [`Comic/src/main/java/reader/site/Comic/servlet`](https://github.com/ppk205/comicreadersite/tree/main/Comic/src/main/java/reader/site/Comic/servlet) (REST servlet endpoints), [`Comic/src/main/java/reader/site/Comic/dao`](https://github.com/ppk205/comicreadersite/tree/main/Comic/src/main/java/reader/site/Comic/dao) (JPA data access), [`ComicReaderSite/src/app/(site)/page.tsx`](https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(site)/page.tsx) (Manga catalog)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Reader experience"]
  node_catalog["Manga catalog<br/>[page.tsx]"]
  node_series["Series and chapters"]
  node_reader["Chapter reader<br/>[page.tsx]"]
  node_bookmarks["Bookmarks and history<br/>[page.tsx]"]
  node_epub["EPUB library and reader<br/>[page.tsx]"]
  node_community["Community posts"]
  node_account["Account access<br/>[AuthContext.tsx]"]
  node_api_client["REST API client<br/>[api.ts]"]
end

subgraph group_staff["Staff experience"]
  node_dashboard["Staff dashboard<br/>[page.tsx]"]
  node_catalog_admin["Catalog management"]
  node_moderation_ui["Moderation queues"]
  node_admin_ui["Users and settings<br/>[page.tsx]"]
end

subgraph group_backend["Backend API"]
  node_servlets["REST servlet endpoints"]
  node_auth_service["Authentication service<br/>[AuthService.java]"]
  node_dashboard_service["Dashboard service"]
  node_moderation_service["Moderation service"]
  node_settings_service["Settings service"]
  node_email_util["Account email sender<br/>[EmailUtil.java]"]
  node_blob_uploader["EPUB blob uploader"]
end

subgraph group_data["Persistence and integrations"]
  node_dao["JPA data access"]
  node_mysql[("MySQL database")]
  node_azure[("Azure Blob Storage")]
  node_smtp["SMTP email"]
end

node_browser(("Browser users"))

node_browser -->|"browses"| node_catalog
node_browser -->|"signs in"| node_account
node_browser -->|"participates"| node_community
node_browser -->|"manages"| node_dashboard
node_catalog -->|"requests catalog"| node_api_client
node_series -->|"loads series"| node_api_client
node_reader -->|"loads images"| node_api_client
node_bookmarks -->|"syncs progress"| node_api_client
node_epub -->|"manages books"| node_api_client
node_community -->|"sends posts"| node_api_client
node_account -->|"authenticates"| node_api_client
node_dashboard -->|"loads statistics"| node_api_client
node_catalog_admin -->|"manages manga"| node_api_client
node_moderation_ui -->|"reviews items"| node_api_client
node_admin_ui -->|"manages accounts"| node_api_client
node_api_client -->|"calls REST"| node_servlets
node_servlets -->|"delegates auth"| node_auth_service
node_auth_service -->|"reads and updates users"| node_dao
node_servlets -->|"requests dashboard data"| node_dashboard_service
node_dashboard_service -->|"reads users and manga"| node_dao
node_servlets -->|"handles moderation"| node_moderation_service
node_servlets -->|"updates settings"| node_settings_service
node_dao -->|"persists records"| node_mysql
node_servlets -->|"handles EPUB files"| node_blob_uploader
node_blob_uploader -.->|"stores files"| node_azure
node_servlets -->|"sends activation mail"| node_email_util
node_email_util -.->|"delivers mail"| node_smtp

click node_catalog "https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(site)/page.tsx"
click node_series "https://github.com/ppk205/comicreadersite/tree/main/ComicReaderSite/src/app/(series)/series"
click node_reader "https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(series)/series/%5BseriesId%5D/%5BchapterId%5D/page.tsx"
click node_bookmarks "https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(site)/bookmarks/page.tsx"
click node_epub "https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(site)/epub/page.tsx"
click node_community "https://github.com/ppk205/comicreadersite/tree/main/ComicReaderSite/src/app/(site)/community"
click node_account "https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/contexts/AuthContext.tsx"
click node_api_client "https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/services/api.ts"
click node_dashboard "https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(dashboard)/dashboard/page.tsx"
click node_catalog_admin "https://github.com/ppk205/comicreadersite/tree/main/ComicReaderSite/src/app/(dashboard)/dashboard/manga"
click node_moderation_ui "https://github.com/ppk205/comicreadersite/tree/main/ComicReaderSite/src/app/(dashboard)/dashboard/moderation"
click node_admin_ui "https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(dashboard)/dashboard/users/page.tsx"
click node_servlets "https://github.com/ppk205/comicreadersite/tree/main/Comic/src/main/java/reader/site/Comic/servlet"
click node_auth_service "https://github.com/ppk205/comicreadersite/blob/main/Comic/src/main/java/reader/site/Comic/service/AuthService.java"
click node_dashboard_service "https://github.com/ppk205/comicreadersite/blob/main/Comic/src/main/java/reader/site/Comic/service/DashboardService.java"
click node_moderation_service "https://github.com/ppk205/comicreadersite/blob/main/Comic/src/main/java/reader/site/Comic/service/ModerationService.java"
click node_settings_service "https://github.com/ppk205/comicreadersite/blob/main/Comic/src/main/java/reader/site/Comic/service/SystemSettingsService.java"
click node_dao "https://github.com/ppk205/comicreadersite/tree/main/Comic/src/main/java/reader/site/Comic/dao"
click node_email_util "https://github.com/ppk205/comicreadersite/blob/main/Comic/src/main/java/reader/site/Comic/util/EmailUtil.java"
click node_blob_uploader "https://github.com/ppk205/comicreadersite/blob/main/Comic/src/main/java/reader/site/Comic/service/AzureBlobUploader.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_catalog,node_series,node_reader,node_bookmarks,node_epub,node_community,node_account,node_api_client,node_browser toneBlue
class node_dashboard,node_catalog_admin,node_moderation_ui,node_admin_ui toneAmber
class node_servlets,node_auth_service,node_dashboard_service,node_moderation_service,node_settings_service,node_email_util,node_blob_uploader toneMint
class node_dao,node_mysql,node_azure,node_smtp toneRose
```

## Components

### Reader experience

- [Manga catalog](https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(site)/page.tsx): `ComicReaderSite/src/app/(site)/page.tsx`
- [Series and chapters](https://github.com/ppk205/comicreadersite/tree/main/ComicReaderSite/src/app/(series)/series): `ComicReaderSite/src/app/(series)/series`
- [Chapter reader](https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(series)/series/%5BseriesId%5D/%5BchapterId%5D/page.tsx): `ComicReaderSite/src/app/(series)/series/[seriesId]/[chapterId]/page.tsx`
- [Bookmarks and history](https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(site)/bookmarks/page.tsx): `ComicReaderSite/src/app/(site)/bookmarks/page.tsx`
- [EPUB library and reader](https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(site)/epub/page.tsx): `ComicReaderSite/src/app/(site)/epub/page.tsx`
- [Community posts](https://github.com/ppk205/comicreadersite/tree/main/ComicReaderSite/src/app/(site)/community): `ComicReaderSite/src/app/(site)/community`
- [Account access](https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/contexts/AuthContext.tsx): `ComicReaderSite/src/contexts/AuthContext.tsx`
- [REST API client](https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/services/api.ts): `ComicReaderSite/src/services/api.ts`

### Staff experience

- [Staff dashboard](https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(dashboard)/dashboard/page.tsx): `ComicReaderSite/src/app/(dashboard)/dashboard/page.tsx`
- [Catalog management](https://github.com/ppk205/comicreadersite/tree/main/ComicReaderSite/src/app/(dashboard)/dashboard/manga): `ComicReaderSite/src/app/(dashboard)/dashboard/manga`
- [Moderation queues](https://github.com/ppk205/comicreadersite/tree/main/ComicReaderSite/src/app/(dashboard)/dashboard/moderation): `ComicReaderSite/src/app/(dashboard)/dashboard/moderation`
- [Users and settings](https://github.com/ppk205/comicreadersite/blob/main/ComicReaderSite/src/app/(dashboard)/dashboard/users/page.tsx): `ComicReaderSite/src/app/(dashboard)/dashboard/users/page.tsx`

### Backend API

- [REST servlet endpoints](https://github.com/ppk205/comicreadersite/tree/main/Comic/src/main/java/reader/site/Comic/servlet): `Comic/src/main/java/reader/site/Comic/servlet`
- [Authentication service](https://github.com/ppk205/comicreadersite/blob/main/Comic/src/main/java/reader/site/Comic/service/AuthService.java): `Comic/src/main/java/reader/site/Comic/service/AuthService.java`
- [Dashboard service](https://github.com/ppk205/comicreadersite/blob/main/Comic/src/main/java/reader/site/Comic/service/DashboardService.java): `Comic/src/main/java/reader/site/Comic/service/DashboardService.java`
- [Moderation service](https://github.com/ppk205/comicreadersite/blob/main/Comic/src/main/java/reader/site/Comic/service/ModerationService.java): `Comic/src/main/java/reader/site/Comic/service/ModerationService.java`
- [Settings service](https://github.com/ppk205/comicreadersite/blob/main/Comic/src/main/java/reader/site/Comic/service/SystemSettingsService.java): `Comic/src/main/java/reader/site/Comic/service/SystemSettingsService.java`
- [Account email sender](https://github.com/ppk205/comicreadersite/blob/main/Comic/src/main/java/reader/site/Comic/util/EmailUtil.java): `Comic/src/main/java/reader/site/Comic/util/EmailUtil.java`
- [EPUB blob uploader](https://github.com/ppk205/comicreadersite/blob/main/Comic/src/main/java/reader/site/Comic/service/AzureBlobUploader.java): `Comic/src/main/java/reader/site/Comic/service/AzureBlobUploader.java`

### Persistence and integrations

- [JPA data access](https://github.com/ppk205/comicreadersite/tree/main/Comic/src/main/java/reader/site/Comic/dao): `Comic/src/main/java/reader/site/Comic/dao`
- **MySQL database**
- **Azure Blob Storage**
- **SMTP email**

### Other components

- **Browser users**

## Connections

- Browser users → Manga catalog: browses
- Browser users → Account access: signs in
- Browser users → Community posts: participates
- Browser users → Staff dashboard: manages
- Manga catalog → REST API client: requests catalog
- Series and chapters → REST API client: loads series
- Chapter reader → REST API client: loads images
- Bookmarks and history → REST API client: syncs progress
- EPUB library and reader → REST API client: manages books
- Community posts → REST API client: sends posts
- Account access → REST API client: authenticates
- Staff dashboard → REST API client: loads statistics
- Catalog management → REST API client: manages manga
- Moderation queues → REST API client: reviews items
- Users and settings → REST API client: manages accounts
- REST API client → REST servlet endpoints: calls REST
- REST servlet endpoints → Authentication service: delegates auth
- Authentication service → JPA data access: reads and updates users
- REST servlet endpoints → Dashboard service: requests dashboard data
- Dashboard service → JPA data access: reads users and manga
- REST servlet endpoints → Moderation service: handles moderation
- REST servlet endpoints → Settings service: updates settings
- JPA data access → MySQL database: persists records
- REST servlet endpoints → EPUB blob uploader: handles EPUB files
- EPUB blob uploader → Azure Blob Storage: stores files
- REST servlet endpoints → Account email sender: sends activation mail
- Account email sender → SMTP email: delivers mail
