# gyarab/2025-3e-idlgs architecture

> Architecture diagram of the GitHub repository gyarab/2025-3e-idlgs, 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/gyarab/2025-3e-idlgs
- Repository: https://github.com/gyarab/2025-3e-idlgs

## Overview

IDLGS is a digital textbook platform. Readers discover textbooks, open chapters and articles, and use embedded exercises and learning materials; authors create textbooks and structure their content. Accounts support login, profiles, and settings. The graph reflects the sampled route handlers and the capabilities evident in the file tree; several feature directories were not sampled, so their internal calls are not inferred.

Main entry points: [`src/lib/server/db/schema.ts`](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/lib/server/db/schema.ts) (PostgreSQL data), [`src/routes/(base)/textbook/create/+page.server.ts`](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/create/%2Bpage.server.ts) (Textbook creation), [`src/routes/(base)/settings/+page.server.ts`](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/settings/%2Bpage.server.ts) (Account settings), [`src/lib/server/form/validation.ts`](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/lib/server/form/validation.ts) (Form validation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Reader experience"]
  node_library["Library discovery<br/>[+page.server.ts]"]
  node_textbook["Textbook overview<br/>[+page.server.ts]"]
  node_chapter["Chapter contents<br/>[+page.server.ts]"]
  node_article["Article reading<br/>[+page.server.ts]"]
  node_exercise["Exercise activities<br/>[+page.server.ts]"]
  node_exercise_render["Exercise rendering"]
  node_definitions["Definitions<br/>[+page.server.ts]"]
end

subgraph group_authoring["Textbook authoring"]
  node_article_edit["Article editing<br/>[+page.server.ts]"]
  node_textbook_create["Textbook creation<br/>[+page.server.ts]"]
  node_exercise_create["Exercise creation<br/>[+page.server.ts]"]
end

subgraph group_accounts["Accounts and search"]
  node_login["Login and sessions<br/>[+page.server.ts]"]
  node_profile["Profile pages<br/>[+page.server.ts]"]
  node_settings["Account settings<br/>[+page.server.ts]"]
  node_search_books["Textbook search<br/>[+server.ts]"]
  node_search_users["User search<br/>[+server.ts]"]
end

subgraph group_services["Platform services"]
  node_form_validation["Form validation<br/>[validation.ts]"]
  node_file_storage["Media storage<br/>[index.ts]"]
  node_database[("PostgreSQL data<br/>[schema.ts]")]
end

node_reader(("Reader / author"))
node_cloudinary["Cloudinary"]

node_reader -->|"browses"| node_library
node_reader -->|"opens"| node_textbook
node_textbook -->|"reads chapters"| node_database
node_chapter -->|"reads articles"| node_database
node_reader -->|"reads"| node_article
node_reader -->|"opens"| node_exercise
node_reader -->|"looks up"| node_definitions
node_reader -->|"authors"| node_textbook_create
node_textbook_create -->|"validates"| node_form_validation
node_textbook_create -->|"writes structure"| node_database
node_textbook_create -->|"stores thumbnail"| node_file_storage
node_file_storage -->|"uploads"| node_cloudinary
node_reader -->|"edits"| node_article_edit
node_article_edit -->|"validates"| node_form_validation
node_reader -->|"creates exercises"| node_exercise_create
node_reader -->|"signs in"| node_login
node_login -->|"validates"| node_form_validation
node_login -->|"reads and writes sessions"| node_database
node_reader -->|"views profile"| node_profile
node_profile -->|"reads"| node_database
node_reader -->|"updates account"| node_settings
node_settings -->|"validates"| node_form_validation
node_settings -->|"updates account data"| node_database
node_settings -->|"stores picture"| node_file_storage
node_reader -->|"searches books"| node_search_books
node_search_books -->|"reads"| node_database
node_reader -->|"searches users"| node_search_users
node_search_users -->|"reads"| node_database

click node_library "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/library/%2Bpage.server.ts"
click node_textbook "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/%2Bpage.server.ts"
click node_chapter "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/%5Bchapter%5D/%2Bpage.server.ts"
click node_article "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/%5Bchapter%5D/%5Barticle%5D/%2Bpage.server.ts"
click node_exercise "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/exercises/%2Bpage.server.ts"
click node_exercise_render "https://github.com/gyarab/2025-3e-idlgs/tree/main/src/routes/(base)/exerciseRendering"
click node_article_edit "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/%5Bchapter%5D/%5Barticle%5D/edit/%2Bpage.server.ts"
click node_textbook_create "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/create/%2Bpage.server.ts"
click node_exercise_create "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/exercises/create/%2Bpage.server.ts"
click node_definitions "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/%5Bchapter%5D/%5Barticle%5D/definitions/%2Bpage.server.ts"
click node_login "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(protected)/login/%2Bpage.server.ts"
click node_profile "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/profile/%2Bpage.server.ts"
click node_settings "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/settings/%2Bpage.server.ts"
click node_search_books "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/api/searchTextbooks/%2Bserver.ts"
click node_search_users "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/api/searchUsers/%2Bserver.ts"
click node_form_validation "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/lib/server/form/validation.ts"
click node_file_storage "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/lib/server/filesave/index.ts"
click node_database "https://github.com/gyarab/2025-3e-idlgs/blob/main/src/lib/server/db/schema.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_library,node_textbook,node_chapter,node_article,node_exercise,node_exercise_render,node_definitions toneBlue
class node_article_edit,node_textbook_create,node_exercise_create toneAmber
class node_login,node_profile,node_settings,node_search_books,node_search_users toneMint
class node_form_validation,node_file_storage,node_database toneRose
class node_reader,node_cloudinary toneIndigo
```

## Components

### Reader experience

- [Library discovery](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/library/%2Bpage.server.ts): `src/routes/library/+page.server.ts`
- [Textbook overview](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/%2Bpage.server.ts): `src/routes/(base)/textbook/[textbook]/+page.server.ts`
- [Chapter contents](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/%5Bchapter%5D/%2Bpage.server.ts): `src/routes/(base)/textbook/[textbook]/[chapter]/+page.server.ts`
- [Article reading](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/%5Bchapter%5D/%5Barticle%5D/%2Bpage.server.ts): `src/routes/(base)/textbook/[textbook]/[chapter]/[article]/+page.server.ts`
- [Exercise activities](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/exercises/%2Bpage.server.ts): `src/routes/(base)/textbook/[textbook]/exercises/+page.server.ts`
- [Exercise rendering](https://github.com/gyarab/2025-3e-idlgs/tree/main/src/routes/(base)/exerciseRendering): `src/routes/(base)/exerciseRendering`
- [Definitions](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/%5Bchapter%5D/%5Barticle%5D/definitions/%2Bpage.server.ts): `src/routes/(base)/textbook/[textbook]/[chapter]/[article]/definitions/+page.server.ts`

### Textbook authoring

- [Article editing](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/%5Bchapter%5D/%5Barticle%5D/edit/%2Bpage.server.ts): `src/routes/(base)/textbook/[textbook]/[chapter]/[article]/edit/+page.server.ts`
- [Textbook creation](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/create/%2Bpage.server.ts): `src/routes/(base)/textbook/create/+page.server.ts`
- [Exercise creation](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/textbook/%5Btextbook%5D/exercises/create/%2Bpage.server.ts): `src/routes/(base)/textbook/[textbook]/exercises/create/+page.server.ts`

### Accounts and search

- [Login and sessions](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(protected)/login/%2Bpage.server.ts): `src/routes/(protected)/login/+page.server.ts`
- [Profile pages](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/profile/%2Bpage.server.ts): `src/routes/(base)/profile/+page.server.ts`
- [Account settings](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/(base)/settings/%2Bpage.server.ts): `src/routes/(base)/settings/+page.server.ts`
- [Textbook search](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/api/searchTextbooks/%2Bserver.ts): `src/routes/api/searchTextbooks/+server.ts`
- [User search](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/routes/api/searchUsers/%2Bserver.ts): `src/routes/api/searchUsers/+server.ts`

### Platform services

- [Form validation](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/lib/server/form/validation.ts): `src/lib/server/form/validation.ts`
- [Media storage](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/lib/server/filesave/index.ts): `src/lib/server/filesave/index.ts`
- [PostgreSQL data](https://github.com/gyarab/2025-3e-idlgs/blob/main/src/lib/server/db/schema.ts): `src/lib/server/db/schema.ts`

### Other components

- **Reader / author**
- **Cloudinary**

## Connections

- Reader / author → Library discovery: browses
- Reader / author → Textbook overview: opens
- Textbook overview → PostgreSQL data: reads chapters
- Chapter contents → PostgreSQL data: reads articles
- Reader / author → Article reading: reads
- Reader / author → Exercise activities: opens
- Reader / author → Definitions: looks up
- Reader / author → Textbook creation: authors
- Textbook creation → Form validation: validates
- Textbook creation → PostgreSQL data: writes structure
- Textbook creation → Media storage: stores thumbnail
- Media storage → Cloudinary: uploads
- Reader / author → Article editing: edits
- Article editing → Form validation: validates
- Reader / author → Exercise creation: creates exercises
- Reader / author → Login and sessions: signs in
- Login and sessions → Form validation: validates
- Login and sessions → PostgreSQL data: reads and writes sessions
- Reader / author → Profile pages: views profile
- Profile pages → PostgreSQL data: reads
- Reader / author → Account settings: updates account
- Account settings → Form validation: validates
- Account settings → PostgreSQL data: updates account data
- Account settings → Media storage: stores picture
- Reader / author → Textbook search: searches books
- Textbook search → PostgreSQL data: reads
- Reader / author → User search: searches users
- User search → PostgreSQL data: reads
