# akayrailhan/e-kitap architecture

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

- Interactive diagram: https://gitdiagram.com/akayrailhan/e-kitap
- Repository: https://github.com/akayrailhan/e-kitap

## Overview

E-Kitap Oluşturucu is a full-stack service that accepts exactly ten DOCX papers and produces a single PDF e-book with a cover, real-page-number table of contents, and server-side removal of email and phone details. The main user journey runs from the React editor through book upload, background generation and status polling to PDF viewing; users can also authenticate optionally and revisit their books. The graph reflects the shown API, orchestration, persistence, storage, and UI calls. Several documented capabilities are included at subsystem level where their implementation was not sampled.

Main entry points: [`frontend/src/App.tsx`](https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/App.tsx) (Workflow UI), [`backend/src/EBook.Api/Controllers/BooksController.cs`](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Api/Controllers/BooksController.cs) (Books API), [`backend/src/EBook.Application/Books/Generation/BookGenerationService.cs`](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Application/Books/Generation/BookGenerationService.cs) (Generation orchestration), [`frontend/src/services/bookApi.ts`](https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/services/bookApi.ts) (Book API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_app["Workflow UI<br/>[App.tsx]"]
  node_bookform["Book form<br/>[BookForm.tsx]"]
  node_authui["Authentication UI<br/>[AuthModal.tsx]"]
  node_supabase["Supabase auth client<br/>[supabaseClient.ts]"]
  node_bookapi["Book API client<br/>[bookApi.ts]"]
  node_statusui["Progress and status"]
  node_mybooks["Book library<br/>[MyBooksModal.tsx]"]
  node_pdfviewer["PDF viewer<br/>[PdfViewer.tsx]"]
end

subgraph group_api["API and orchestration"]
  node_controller["Books API<br/>[BooksController.cs]"]
  node_upload["Upload validation"]
  node_generation["Generation orchestration"]
  node_status["Status service"]
  node_domain["Book and paper model<br/>[Book.cs]"]
end

subgraph group_documents["Document processing"]
  node_reader["DOCX reader"]
  node_sanitizer["Contact sanitizer"]
  node_pdfgen["PDF compiler"]
end

subgraph group_data["Persistence and files"]
  node_database[("Book database<br/>[EBookDbContext.cs]")]
  node_repository["EF book repository"]
  node_storage["Local file storage"]
end

node_user(("Book creator"))
node_mssql[("MSSQL")]
node_filesystem[("Local filesystem")]

node_user -->|"edits and submits"| node_app
node_app -->|"renders"| node_bookform
node_app -->|"uploads and polls"| node_bookapi
node_app -.->|"shows progress"| node_statusui
node_app -->|"shows completed PDF"| node_pdfviewer
node_app -.->|"opens library"| node_mybooks
node_app -.->|"offers sign-in"| node_authui
node_authui -->|"authenticates"| node_supabase
node_bookapi -->|"gets auth token"| node_supabase
node_bookapi -.->|"calls book endpoints"| node_controller
node_mybooks -->|"lists books"| node_bookapi
node_pdfviewer -->|"requests PDF"| node_bookapi
node_controller -->|"uploads papers"| node_upload
node_controller -->|"starts generation"| node_generation
node_controller -->|"gets status"| node_status
node_controller -->|"reads books"| node_repository
node_controller -->|"reads PDF"| node_storage
node_upload -->|"saves DOCX"| node_storage
node_upload -->|"persists book"| node_repository
node_upload -->|"creates book and papers"| node_domain
node_generation -->|"loads and updates book"| node_repository
node_generation -->|"reads DOCX and saves PDF"| node_storage
node_generation -->|"extracts text"| node_reader
node_generation -->|"removes contacts"| node_sanitizer
node_generation -->|"compiles ebook"| node_pdfgen
node_status -->|"loads status"| node_repository
node_repository -->|"queries and saves"| node_database
node_database -.->|"stores records"| node_mssql
node_storage -->|"reads and writes"| node_filesystem

click node_app "https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/App.tsx"
click node_bookform "https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/components/BookForm/BookForm.tsx"
click node_authui "https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/components/AuthModal/AuthModal.tsx"
click node_supabase "https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/services/supabaseClient.ts"
click node_bookapi "https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/services/bookApi.ts"
click node_statusui "https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/components/Loading/LoadingProgress.tsx"
click node_mybooks "https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/components/MyBooksModal/MyBooksModal.tsx"
click node_pdfviewer "https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/components/PdfViewer/PdfViewer.tsx"
click node_controller "https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Api/Controllers/BooksController.cs"
click node_upload "https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Application/Books/Upload/BookUploadService.cs"
click node_generation "https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Application/Books/Generation/BookGenerationService.cs"
click node_status "https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Application/Books/Status/BookStatusService.cs"
click node_domain "https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Domain/Books/Book.cs"
click node_reader "https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Infrastructure/Documents/OpenXmlDocumentReader.cs"
click node_sanitizer "https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Infrastructure/Documents/ContactSanitizer.cs"
click node_pdfgen "https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Infrastructure/Documents/QuestPdfBookGenerator.cs"
click node_database "https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Infrastructure/Persistence/EBookDbContext.cs"
click node_repository "https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Infrastructure/Persistence/EfBookRepository.cs"
click node_storage "https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Infrastructure/Storage/LocalFileStorage.cs"

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_bookform,node_authui,node_supabase,node_bookapi,node_statusui,node_mybooks,node_pdfviewer toneBlue
class node_controller,node_upload,node_generation,node_status,node_domain,node_mssql,node_filesystem toneAmber
class node_reader,node_sanitizer,node_pdfgen toneMint
class node_database,node_repository,node_storage toneRose
class node_user toneIndigo
```

## Components

### Web application

- [Workflow UI](https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Book form](https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/components/BookForm/BookForm.tsx): `frontend/src/components/BookForm/BookForm.tsx`
- [Authentication UI](https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/components/AuthModal/AuthModal.tsx): `frontend/src/components/AuthModal/AuthModal.tsx`
- [Supabase auth client](https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/services/supabaseClient.ts): `frontend/src/services/supabaseClient.ts`
- [Book API client](https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/services/bookApi.ts): `frontend/src/services/bookApi.ts`
- [Progress and status](https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/components/Loading/LoadingProgress.tsx): `frontend/src/components/Loading/LoadingProgress.tsx`
- [Book library](https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/components/MyBooksModal/MyBooksModal.tsx): `frontend/src/components/MyBooksModal/MyBooksModal.tsx`
- [PDF viewer](https://github.com/akayrailhan/e-kitap/blob/main/frontend/src/components/PdfViewer/PdfViewer.tsx): `frontend/src/components/PdfViewer/PdfViewer.tsx`

### API and orchestration

- [Books API](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Api/Controllers/BooksController.cs): `backend/src/EBook.Api/Controllers/BooksController.cs`
- [Upload validation](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Application/Books/Upload/BookUploadService.cs): `backend/src/EBook.Application/Books/Upload/BookUploadService.cs`
- [Generation orchestration](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Application/Books/Generation/BookGenerationService.cs): `backend/src/EBook.Application/Books/Generation/BookGenerationService.cs`
- [Status service](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Application/Books/Status/BookStatusService.cs): `backend/src/EBook.Application/Books/Status/BookStatusService.cs`
- [Book and paper model](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Domain/Books/Book.cs): `backend/src/EBook.Domain/Books/Book.cs`

### Document processing

- [DOCX reader](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Infrastructure/Documents/OpenXmlDocumentReader.cs): `backend/src/EBook.Infrastructure/Documents/OpenXmlDocumentReader.cs`
- [Contact sanitizer](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Infrastructure/Documents/ContactSanitizer.cs): `backend/src/EBook.Infrastructure/Documents/ContactSanitizer.cs`
- [PDF compiler](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Infrastructure/Documents/QuestPdfBookGenerator.cs): `backend/src/EBook.Infrastructure/Documents/QuestPdfBookGenerator.cs`

### Persistence and files

- [Book database](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Infrastructure/Persistence/EBookDbContext.cs): `backend/src/EBook.Infrastructure/Persistence/EBookDbContext.cs`
- [EF book repository](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Infrastructure/Persistence/EfBookRepository.cs): `backend/src/EBook.Infrastructure/Persistence/EfBookRepository.cs`
- [Local file storage](https://github.com/akayrailhan/e-kitap/blob/main/backend/src/EBook.Infrastructure/Storage/LocalFileStorage.cs): `backend/src/EBook.Infrastructure/Storage/LocalFileStorage.cs`

### Other components

- **Book creator**
- **MSSQL**
- **Local filesystem**

## Connections

- Book creator → Workflow UI: edits and submits (evidence: `frontend/src/App.tsx`)
- Workflow UI → Book form: renders (evidence: `frontend/src/App.tsx`)
- Workflow UI → Book API client: uploads and polls (evidence: `frontend/src/App.tsx`)
- Workflow UI → Progress and status: shows progress
- Workflow UI → PDF viewer: shows completed PDF (evidence: `frontend/src/App.tsx`)
- Workflow UI → Book library: opens library
- Workflow UI → Authentication UI: offers sign-in
- Authentication UI → Supabase auth client: authenticates (evidence: `frontend/src/components/AuthModal/AuthModal.tsx`)
- Book API client → Supabase auth client: gets auth token (evidence: `frontend/src/services/bookApi.ts`)
- Book API client → Books API: calls book endpoints
- Book library → Book API client: lists books (evidence: `frontend/src/components/MyBooksModal/MyBooksModal.tsx`)
- PDF viewer → Book API client: requests PDF (evidence: `frontend/src/components/PdfViewer/PdfViewer.tsx`)
- Books API → Upload validation: uploads papers (evidence: `backend/src/EBook.Api/Controllers/BooksController.cs`)
- Books API → Generation orchestration: starts generation (evidence: `backend/src/EBook.Api/Controllers/BooksController.cs`)
- Books API → Status service: gets status (evidence: `backend/src/EBook.Api/Controllers/BooksController.cs`)
- Books API → EF book repository: reads books (evidence: `backend/src/EBook.Api/Controllers/BooksController.cs`)
- Books API → Local file storage: reads PDF (evidence: `backend/src/EBook.Api/Controllers/BooksController.cs`)
- Upload validation → Local file storage: saves DOCX (evidence: `backend/src/EBook.Application/Books/Upload/BookUploadService.cs`)
- Upload validation → EF book repository: persists book (evidence: `backend/src/EBook.Application/Books/Upload/BookUploadService.cs`)
- Upload validation → Book and paper model: creates book and papers (evidence: `backend/src/EBook.Application/Books/Upload/BookUploadService.cs`)
- Generation orchestration → EF book repository: loads and updates book (evidence: `backend/src/EBook.Application/Books/Generation/BookGenerationService.cs`)
- Generation orchestration → Local file storage: reads DOCX and saves PDF (evidence: `backend/src/EBook.Application/Books/Generation/BookGenerationService.cs`)
- Generation orchestration → DOCX reader: extracts text (evidence: `backend/src/EBook.Application/Books/Generation/BookGenerationService.cs`)
- Generation orchestration → Contact sanitizer: removes contacts (evidence: `backend/src/EBook.Application/Books/Generation/BookGenerationService.cs`)
- Generation orchestration → PDF compiler: compiles ebook (evidence: `backend/src/EBook.Application/Books/Generation/BookGenerationService.cs`)
- Status service → EF book repository: loads status (evidence: `backend/src/EBook.Application/Books/Status/BookStatusService.cs`)
- EF book repository → Book database: queries and saves (evidence: `backend/src/EBook.Infrastructure/Persistence/EfBookRepository.cs`)
- Book database → MSSQL: stores records
- Local file storage → Local filesystem: reads and writes (evidence: `backend/src/EBook.Infrastructure/Storage/LocalFileStorage.cs`)
