# takmasakal/mam_deneme architecture

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

- Interactive diagram: https://gitdiagram.com/takmasakal/mam_deneme
- Repository: https://github.com/takmasakal/mam_deneme

## Overview

MAM is a browser-based media asset management application. Users upload and describe assets, then search, review, edit metadata, manage workflow and versions, and view or download media. The README also documents soft deletion, collections, video proxies, OCR/subtitle search, and Office/PDF previews. The tree and excerpts support the frontend entry points, search services, and authentication components; most backend route wiring is unsampled, so uncertain service-to-route links are omitted.

Main entry points: [`src/routes/assets.js`](https://github.com/takmasakal/mam_deneme/blob/main/src/routes/assets.js) (Asset API), [`public/main.js`](https://github.com/takmasakal/mam_deneme/blob/main/public/main.js) (Main UI), [`src/db.js`](https://github.com/takmasakal/mam_deneme/blob/main/src/db.js) (PostgreSQL), [`src/server.js`](https://github.com/takmasakal/mam_deneme/blob/main/src/server.js) (Application server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Browser application"]
  node_main["Main UI<br/>[main.js]"]
  node_ingest["Asset ingest<br/>[main-ingest.js]"]
  node_preview["Document preview"]
end

subgraph group_asset["Asset management"]
  node_asset_routes["Asset API<br/>[assets.js]"]
  node_office_routes["Office API<br/>[office.js]"]
  node_asset_list["Asset listing"]
  node_asset_versions["Asset versions"]
  node_workflow["Workflow state"]
  node_server["Application server<br/>[server.js]"]
  node_postgres[("PostgreSQL<br/>[db.js]")]
end

subgraph group_search["Discovery and text"]
  node_advanced_search["Advanced search"]
  node_search_service["Search indexing<br/>[searchService.js]"]
  node_text_index["Text indexing"]
  node_elastic[("Elasticsearch")]
end

subgraph group_media["Media processing"]
  node_subtitle["Subtitle services<br/>[subtitleService.js]"]
  node_ocr["OCR service<br/>[ocrService.js]"]
  node_media_jobs["Media jobs<br/>[mediaJobs.js]"]
  node_office_service["Office previews<br/>[officeService.js]"]
  node_ffmpeg["FFmpeg"]
end

subgraph group_identity["Identity and access"]
  node_asset_access["Asset access"]
  node_keycloak["Keycloak"]
end

node_user(("MAM user"))

node_user -->|"uses"| node_main
node_main -->|"creates UI"| node_ingest
node_main -->|"opens preview"| node_preview
node_ingest -->|"uploads asset"| node_asset_routes
node_preview -->|"requests text"| node_asset_routes
node_main -->|"asset actions"| node_asset_routes
node_main -->|"reads state"| node_workflow
node_server -->|"serves API"| node_asset_routes
node_server -->|"serves API"| node_office_routes
node_server -->|"initializes database"| node_postgres
node_asset_routes -->|"queries assets"| node_asset_list
node_asset_routes -->|"manages versions"| node_asset_versions
node_asset_routes -->|"checks access"| node_asset_access
node_asset_list -->|"parses definition"| node_advanced_search
node_search_service -->|"reads asset data"| node_postgres
node_search_service -->|"indexes and queries"| node_elastic
node_text_index -->|"stores text data"| node_postgres
node_subtitle -->|"stores subtitle data"| node_postgres
node_ocr -->|"stores OCR data"| node_postgres
node_office_routes -->|"handles documents"| node_office_service
node_asset_routes -.->|"dispatches jobs"| node_media_jobs
node_media_jobs -.->|"generates proxies"| node_ffmpeg
node_user -.->|"authenticates"| node_keycloak

click node_main "https://github.com/takmasakal/mam_deneme/blob/main/public/main.js"
click node_ingest "https://github.com/takmasakal/mam_deneme/blob/main/public/main-ingest.js"
click node_preview "https://github.com/takmasakal/mam_deneme/blob/main/public/main-document-preview.js"
click node_asset_routes "https://github.com/takmasakal/mam_deneme/blob/main/src/routes/assets.js"
click node_office_routes "https://github.com/takmasakal/mam_deneme/blob/main/src/routes/office.js"
click node_asset_access "https://github.com/takmasakal/mam_deneme/blob/main/src/services/assetAccessService.js"
click node_asset_list "https://github.com/takmasakal/mam_deneme/blob/main/src/services/assetListQueryService.js"
click node_asset_versions "https://github.com/takmasakal/mam_deneme/blob/main/src/services/assetVersionService.js"
click node_workflow "https://github.com/takmasakal/mam_deneme/blob/main/public/main-workflow-store.js"
click node_advanced_search "https://github.com/takmasakal/mam_deneme/blob/main/src/services/advancedSearchService.js"
click node_search_service "https://github.com/takmasakal/mam_deneme/blob/main/src/services/searchService.js"
click node_text_index "https://github.com/takmasakal/mam_deneme/blob/main/src/services/textAssetIndexService.js"
click node_subtitle "https://github.com/takmasakal/mam_deneme/blob/main/src/services/subtitleService.js"
click node_ocr "https://github.com/takmasakal/mam_deneme/blob/main/src/services/ocrService.js"
click node_media_jobs "https://github.com/takmasakal/mam_deneme/blob/main/src/services/mediaJobs.js"
click node_office_service "https://github.com/takmasakal/mam_deneme/blob/main/src/services/officeService.js"
click node_server "https://github.com/takmasakal/mam_deneme/blob/main/src/server.js"
click node_postgres "https://github.com/takmasakal/mam_deneme/blob/main/src/db.js"

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_ingest,node_preview,node_user toneBlue
class node_asset_routes,node_office_routes,node_asset_list,node_asset_versions,node_workflow,node_server,node_postgres toneAmber
class node_advanced_search,node_search_service,node_text_index,node_elastic toneMint
class node_subtitle,node_ocr,node_media_jobs,node_office_service,node_ffmpeg toneRose
class node_asset_access,node_keycloak toneIndigo
```

## Components

### Browser application

- [Main UI](https://github.com/takmasakal/mam_deneme/blob/main/public/main.js): `public/main.js`
- [Asset ingest](https://github.com/takmasakal/mam_deneme/blob/main/public/main-ingest.js): `public/main-ingest.js`
- [Document preview](https://github.com/takmasakal/mam_deneme/blob/main/public/main-document-preview.js): `public/main-document-preview.js`

### Asset management

- [Asset API](https://github.com/takmasakal/mam_deneme/blob/main/src/routes/assets.js): `src/routes/assets.js`
- [Office API](https://github.com/takmasakal/mam_deneme/blob/main/src/routes/office.js): `src/routes/office.js`
- [Asset listing](https://github.com/takmasakal/mam_deneme/blob/main/src/services/assetListQueryService.js): `src/services/assetListQueryService.js`
- [Asset versions](https://github.com/takmasakal/mam_deneme/blob/main/src/services/assetVersionService.js): `src/services/assetVersionService.js`
- [Workflow state](https://github.com/takmasakal/mam_deneme/blob/main/public/main-workflow-store.js): `public/main-workflow-store.js`
- [Application server](https://github.com/takmasakal/mam_deneme/blob/main/src/server.js): `src/server.js`
- [PostgreSQL](https://github.com/takmasakal/mam_deneme/blob/main/src/db.js): `src/db.js`

### Discovery and text

- [Advanced search](https://github.com/takmasakal/mam_deneme/blob/main/src/services/advancedSearchService.js): `src/services/advancedSearchService.js`
- [Search indexing](https://github.com/takmasakal/mam_deneme/blob/main/src/services/searchService.js): `src/services/searchService.js`
- [Text indexing](https://github.com/takmasakal/mam_deneme/blob/main/src/services/textAssetIndexService.js): `src/services/textAssetIndexService.js`
- **Elasticsearch**

### Media processing

- [Subtitle services](https://github.com/takmasakal/mam_deneme/blob/main/src/services/subtitleService.js): `src/services/subtitleService.js`
- [OCR service](https://github.com/takmasakal/mam_deneme/blob/main/src/services/ocrService.js): `src/services/ocrService.js`
- [Media jobs](https://github.com/takmasakal/mam_deneme/blob/main/src/services/mediaJobs.js): `src/services/mediaJobs.js`
- [Office previews](https://github.com/takmasakal/mam_deneme/blob/main/src/services/officeService.js): `src/services/officeService.js`
- **FFmpeg**

### Identity and access

- [Asset access](https://github.com/takmasakal/mam_deneme/blob/main/src/services/assetAccessService.js): `src/services/assetAccessService.js`
- **Keycloak**

### Other components

- **MAM user**

## Connections

- MAM user → Main UI: uses
- Main UI → Asset ingest: creates UI
- Main UI → Document preview: opens preview
- Asset ingest → Asset API: uploads asset
- Document preview → Asset API: requests text
- Main UI → Asset API: asset actions
- Main UI → Workflow state: reads state
- Application server → Asset API: serves API
- Application server → Office API: serves API
- Application server → PostgreSQL: initializes database
- Asset API → Asset listing: queries assets
- Asset API → Asset versions: manages versions
- Asset API → Asset access: checks access
- Asset listing → Advanced search: parses definition
- Search indexing → PostgreSQL: reads asset data
- Search indexing → Elasticsearch: indexes and queries
- Text indexing → PostgreSQL: stores text data
- Subtitle services → PostgreSQL: stores subtitle data
- OCR service → PostgreSQL: stores OCR data
- Office API → Office previews: handles documents
- Asset API → Media jobs: dispatches jobs
- Media jobs → FFmpeg: generates proxies
- MAM user → Keycloak: authenticates
