# sofianeelhor/pkforge architecture

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

- Interactive diagram: https://gitdiagram.com/sofianeelhor/pkforge
- Repository: https://github.com/sofianeelhor/pkforge

## Overview

PKForge is an Android Pokémon save editor and cross-generation Bank. The main workflow is choosing a save, opening it as an engine session, editing or organizing Pokémon, then saving changes safely. Separate capabilities cover Bank transfers, legality and generation, collection tracking, event injection, game-specific editing, and Poképark. The graph follows README architecture and sampled session/service code; several feature links are intentionally omitted where their call sites were not sampled.

Main entry points: [`src/PKForge.App/Views/BoxBrowserPage.cs`](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Views/BoxBrowserPage.cs) (Box editor), [`src/PKForge.Infrastructure/SaveSessionService.cs`](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Infrastructure/SaveSessionService.cs) (Save sessions), [`src/PKForge.Infrastructure/FileBankService.cs`](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Infrastructure/FileBankService.cs) (Bank service), [`src/PKForge.Engine/SaveEngineSession.cs`](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Engine/SaveEngineSession.cs) (Engine session)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Android app"]
  node_picker["Save picker<br/>[SavePickerSheet.cs]"]
  node_editor["Box editor<br/>[BoxBrowserPage.cs]"]
  node_file_access["Android file access"]
  node_bank_ui["Bank browser<br/>[BankPage.cs]"]
end

subgraph group_engine["Save engine"]
  node_save_engine["Save engine<br/>[SaveEngine.cs]"]
  node_session["Engine session"]
end

subgraph group_bank["Bank and safety"]
  node_save_service["Save sessions"]
  node_bank_service["Bank service<br/>[FileBankService.cs]"]
  node_bank_store[("Bank archive<br/>[BankArchive.cs]")]
  node_save_writer["Safe save writer<br/>[SafeSaveWriter.cs]"]
  node_backups["Restore points"]
end

subgraph group_features["Pokémon features"]
  node_transfer["Transfers<br/>[TransferService.cs]"]
  node_legalizer["Legalizer"]
  node_events["Event database"]
  node_dex["Living Dex planner"]
end

subgraph group_habitat["Poképark"]
  node_park_ui["Poképark<br/>[PokeparkPage.cs]"]
  node_park_service["Poképark service<br/>[PokeparkService.cs]"]
  node_park_domain["Park simulation"]
end

node_user(("Player"))

node_user -->|"chooses save"| node_picker
node_picker -->|"opens document"| node_save_service
node_save_service -->|"reads bytes"| node_file_access
node_save_service -->|"opens session"| node_save_engine
node_save_engine -->|"creates session"| node_session
node_editor -->|"edits Pokémon"| node_session
node_user -->|"edits save"| node_editor
node_user -->|"organizes collection"| node_bank_ui
node_bank_ui -->|"uses Bank"| node_bank_service
node_bank_service -->|"reads and writes"| node_bank_store
node_transfer -->|"transfers Pokémon"| node_session
node_transfer -->|"moves Bank entries"| node_bank_service
node_editor -->|"legalizes Pokémon"| node_legalizer
node_editor -->|"browses events"| node_events
node_editor -->|"plans living dex"| node_dex
node_save_service -->|"writes save"| node_save_writer
node_save_writer -->|"backs up first"| node_backups
node_user -->|"visits habitat"| node_park_ui
node_park_ui -->|"uses park services"| node_park_service
node_park_service -->|"simulates park"| node_park_domain

click node_picker "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Views/SavePickerSheet.cs"
click node_editor "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Views/BoxBrowserPage.cs"
click node_save_service "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Infrastructure/SaveSessionService.cs"
click node_save_engine "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Engine/SaveEngine.cs"
click node_session "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Engine/SaveEngineSession.cs"
click node_file_access "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Platforms/Android/AndroidFolderFileAccess.cs"
click node_bank_ui "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Views/BankPage.cs"
click node_bank_service "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Infrastructure/FileBankService.cs"
click node_bank_store "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Infrastructure/BankArchive.cs"
click node_transfer "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Services/TransferService.cs"
click node_legalizer "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Engine/LegalizerService.cs"
click node_events "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Engine/EventDatabaseService.cs"
click node_dex "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Engine/LivingDexAutopilotEngine.cs"
click node_save_writer "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Infrastructure/SafeSaveWriter.cs"
click node_backups "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Infrastructure/FileBackupService.cs"
click node_park_ui "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Views/PokeparkPage.cs"
click node_park_service "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Services/PokeparkService.cs"
click node_park_domain "https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Domain/ParkOfflineSimulation.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_picker,node_editor,node_file_access,node_bank_ui toneBlue
class node_save_engine,node_session toneAmber
class node_save_service,node_bank_service,node_bank_store,node_save_writer,node_backups toneMint
class node_transfer,node_legalizer,node_events,node_dex toneRose
class node_park_ui,node_park_service,node_park_domain,node_user toneIndigo
```

## Components

### Android app

- [Save picker](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Views/SavePickerSheet.cs): `src/PKForge.App/Views/SavePickerSheet.cs`
- [Box editor](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Views/BoxBrowserPage.cs): `src/PKForge.App/Views/BoxBrowserPage.cs`
- [Android file access](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Platforms/Android/AndroidFolderFileAccess.cs): `src/PKForge.App/Platforms/Android/AndroidFolderFileAccess.cs`
- [Bank browser](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Views/BankPage.cs): `src/PKForge.App/Views/BankPage.cs`

### Save engine

- [Save engine](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Engine/SaveEngine.cs): `src/PKForge.Engine/SaveEngine.cs`
- [Engine session](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Engine/SaveEngineSession.cs): `src/PKForge.Engine/SaveEngineSession.cs`

### Bank and safety

- [Save sessions](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Infrastructure/SaveSessionService.cs): `src/PKForge.Infrastructure/SaveSessionService.cs`
- [Bank service](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Infrastructure/FileBankService.cs): `src/PKForge.Infrastructure/FileBankService.cs`
- [Bank archive](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Infrastructure/BankArchive.cs): `src/PKForge.Infrastructure/BankArchive.cs`
- [Safe save writer](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Infrastructure/SafeSaveWriter.cs): `src/PKForge.Infrastructure/SafeSaveWriter.cs`
- [Restore points](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Infrastructure/FileBackupService.cs): `src/PKForge.Infrastructure/FileBackupService.cs`

### Pokémon features

- [Transfers](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Services/TransferService.cs): `src/PKForge.App/Services/TransferService.cs`
- [Legalizer](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Engine/LegalizerService.cs): `src/PKForge.Engine/LegalizerService.cs`
- [Event database](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Engine/EventDatabaseService.cs): `src/PKForge.Engine/EventDatabaseService.cs`
- [Living Dex planner](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Engine/LivingDexAutopilotEngine.cs): `src/PKForge.Engine/LivingDexAutopilotEngine.cs`

### Poképark

- [Poképark](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Views/PokeparkPage.cs): `src/PKForge.App/Views/PokeparkPage.cs`
- [Poképark service](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.App/Services/PokeparkService.cs): `src/PKForge.App/Services/PokeparkService.cs`
- [Park simulation](https://github.com/sofianeelhor/pkforge/blob/main/src/PKForge.Domain/ParkOfflineSimulation.cs): `src/PKForge.Domain/ParkOfflineSimulation.cs`

### Other components

- **Player**

## Connections

- Player → Save picker: chooses save
- Save picker → Save sessions: opens document
- Save sessions → Android file access: reads bytes
- Save sessions → Save engine: opens session
- Save engine → Engine session: creates session
- Box editor → Engine session: edits Pokémon
- Player → Box editor: edits save
- Player → Bank browser: organizes collection
- Bank browser → Bank service: uses Bank
- Bank service → Bank archive: reads and writes
- Transfers → Engine session: transfers Pokémon
- Transfers → Bank service: moves Bank entries
- Box editor → Legalizer: legalizes Pokémon
- Box editor → Event database: browses events
- Box editor → Living Dex planner: plans living dex
- Save sessions → Safe save writer: writes save
- Safe save writer → Restore points: backs up first
- Player → Poképark: visits habitat
- Poképark → Poképark service: uses park services
- Poképark service → Park simulation: simulates park
