# takotori/mtg-sorter architecture

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

- Interactive diagram: https://gitdiagram.com/takotori/mtg-sorter
- Repository: https://github.com/takotori/mtg-sorter

## Overview

MTG Sorter is an Android app for sorting an unsorted stack of Magic cards into decks, with documented support limited to Moxfield decks and imperfect card recognition. The tree identifies camera, analysis, view-model, API, and local-database components, but their source was not sampled; connections among them are therefore left unspecified.

Main entry points: [`app/src/main/java/com/example/mtg_sorter/MainActivity.kt`](https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/MainActivity.kt) (Main activity)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_android["Android app"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
  node_viewmodel["Scanner view model"]
end

subgraph group_recognition["Card recognition"]
  node_camera["Camera preview<br/>[CameraPreview.kt]"]
  node_analyzer["Card analyzer<br/>[CardAnalyzer.kt]"]
end

subgraph group_deckdata["Deck data"]
  node_moxfield_models["Moxfield models<br/>[MoxfieldModels.kt]"]
  node_database[("Card database")]
  node_deck_files["Bundled deck lists"]
end

subgraph group_integrations["External integrations"]
  node_scryfall_api["Scryfall API client<br/>[ScryfallApi.kt]"]
  node_scryfall_models["Scryfall models<br/>[ScryfallModels.kt]"]
  node_moxfield_api["Moxfield API client<br/>[MoxfieldApi.kt]"]
  node_moxfield_retrofit["Moxfield Retrofit"]
  node_retrofit["Retrofit client<br/>[RetrofitClient.kt]"]
end

node_user(("Card sorter"))
node_scryfall_service["Scryfall service"]
node_moxfield_service["Moxfield service"]

node_user -->|"uses app"| node_activity

click node_activity "https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/MainActivity.kt"
click node_camera "https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/ui/CameraPreview.kt"
click node_analyzer "https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/ui/CardAnalyzer.kt"
click node_viewmodel "https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/ui/ScannerViewModel.kt"
click node_scryfall_api "https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/api/ScryfallApi.kt"
click node_scryfall_models "https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/model/ScryfallModels.kt"
click node_moxfield_api "https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/api/MoxfieldApi.kt"
click node_moxfield_retrofit "https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/api/MoxfieldRetrofit.kt"
click node_retrofit "https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/api/RetrofitClient.kt"
click node_moxfield_models "https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/model/MoxfieldModels.kt"
click node_database "https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/local/CardDatabaseHelper.kt"
click node_deck_files "https://github.com/takotori/mtg-sorter/tree/master/app/src/main/java/com/example/mtg_sorter/data/decks"

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_activity,node_viewmodel toneBlue
class node_camera,node_analyzer toneAmber
class node_moxfield_models,node_database,node_deck_files toneMint
class node_scryfall_api,node_scryfall_models,node_moxfield_api,node_moxfield_retrofit,node_retrofit toneRose
class node_user,node_scryfall_service,node_moxfield_service toneIndigo
```

## Components

### Android app

- [Main activity](https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/MainActivity.kt): `app/src/main/java/com/example/mtg_sorter/MainActivity.kt`
- [Scanner view model](https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/ui/ScannerViewModel.kt): `app/src/main/java/com/example/mtg_sorter/ui/ScannerViewModel.kt`

### Card recognition

- [Camera preview](https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/ui/CameraPreview.kt): `app/src/main/java/com/example/mtg_sorter/ui/CameraPreview.kt`
- [Card analyzer](https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/ui/CardAnalyzer.kt): `app/src/main/java/com/example/mtg_sorter/ui/CardAnalyzer.kt`

### Deck data

- [Moxfield models](https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/model/MoxfieldModels.kt): `app/src/main/java/com/example/mtg_sorter/data/model/MoxfieldModels.kt`
- [Card database](https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/local/CardDatabaseHelper.kt): `app/src/main/java/com/example/mtg_sorter/data/local/CardDatabaseHelper.kt`
- [Bundled deck lists](https://github.com/takotori/mtg-sorter/tree/master/app/src/main/java/com/example/mtg_sorter/data/decks): `app/src/main/java/com/example/mtg_sorter/data/decks`

### External integrations

- [Scryfall API client](https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/api/ScryfallApi.kt): `app/src/main/java/com/example/mtg_sorter/data/api/ScryfallApi.kt`
- [Scryfall models](https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/model/ScryfallModels.kt): `app/src/main/java/com/example/mtg_sorter/data/model/ScryfallModels.kt`
- [Moxfield API client](https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/api/MoxfieldApi.kt): `app/src/main/java/com/example/mtg_sorter/data/api/MoxfieldApi.kt`
- [Moxfield Retrofit](https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/api/MoxfieldRetrofit.kt): `app/src/main/java/com/example/mtg_sorter/data/api/MoxfieldRetrofit.kt`
- [Retrofit client](https://github.com/takotori/mtg-sorter/blob/master/app/src/main/java/com/example/mtg_sorter/data/api/RetrofitClient.kt): `app/src/main/java/com/example/mtg_sorter/data/api/RetrofitClient.kt`

### Other components

- **Card sorter**
- **Scryfall service**
- **Moxfield service**

## Connections

- Card sorter → Main activity: uses app
