# daolyap/money-shot architecture

> Architecture diagram of the GitHub repository daolyap/money-shot, 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/daolyap/money-shot
- Repository: https://github.com/daolyap/money-shot
- Video tour (about a minute): https://gitdiagram.com/daolyap/money-shot/video

## Overview

Money Shot is a Windows screenshot application. Its main user workflow is to trigger a full-screen or region capture, annotate the resulting image, then save it to the clipboard or a file. The README also documents configurable hotkeys and settings, local capture history, and integrity-checked automatic updates. The tree and sampled excerpts establish the relevant components, but do not expose all UI wiring; uncertain calls are omitted, and documented capability links are shown only where the runtime relationship is clear.

Main entry points: [`MoneyShot/MainWindow.xaml.cs`](https://github.com/daolyap/money-shot/blob/main/MoneyShot/MainWindow.xaml.cs) (Main Window), [`MoneyShot/Views/EditorWindow.xaml.cs`](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Views/EditorWindow.xaml.cs) (Editor Window), [`MoneyShot/Services/SaveService.cs`](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/SaveService.cs) (Save Service), [`MoneyShot/Services/SettingsService.cs`](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/SettingsService.cs) (Settings Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_capture["Capture"]
  node_main["Main Window<br/>[MainWindow.xaml.cs]"]
  node_hotkeys["Global Hotkeys<br/>[HotKeyService.cs]"]
  node_selector["Region Selector"]
  node_capture_service["Screen Capture"]
end

subgraph group_editing["Editing"]
  node_editor_window["Editor Window"]
  node_canvas["Canvas Renderer<br/>[CanvasRenderer.cs]"]
  node_undo["Undo Controller<br/>[UndoController.cs]"]
  node_element_state["Element State<br/>[ElementState.cs]"]
end

subgraph group_persistence["Persistence"]
  node_save["Save Service<br/>[SaveService.cs]"]
  node_history_window["History Window"]
  node_history_service["History Service<br/>[HistoryService.cs]"]
end

subgraph group_app["Application Services"]
  node_settings_window["Settings Window"]
  node_settings_service["Settings Service<br/>[SettingsService.cs]"]
  node_settings_model["App Settings<br/>[AppSettings.cs]"]
end

subgraph group_updates["Updates"]
  node_updater["Auto Update"]
end

node_user(("User"))
node_clipboard["System Clipboard"]
node_files["Image Files"]
node_history_store[("Local History")]
node_startup_registry["Windows Startup"]
node_release_service["GitHub Releases"]

node_user -->|"uses"| node_main
node_main -->|"registers"| node_hotkeys
node_hotkeys -->|"dispatches"| node_main
node_main -->|"captures"| node_capture_service
node_main -->|"opens"| node_selector
node_main -->|"opens editor"| node_editor_window
node_editor_window -->|"renders annotations"| node_canvas
node_editor_window -->|"records undo"| node_undo
node_undo -->|"restores edits"| node_editor_window
node_editor_window -->|"saves image"| node_save
node_save -->|"copies image"| node_clipboard
node_save -->|"writes image"| node_files
node_main -->|"records capture"| node_history_service
node_history_service -->|"writes entries"| node_history_store
node_history_window -->|"loads history"| node_history_service
node_settings_window -->|"updates settings"| node_settings_service
node_settings_service -->|"loads and saves"| node_settings_model
node_settings_service -->|"configures startup"| node_startup_registry
node_updater -->|"checks releases"| node_release_service

click node_main "https://github.com/daolyap/money-shot/blob/main/MoneyShot/MainWindow.xaml.cs"
click node_hotkeys "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/HotKeyService.cs"
click node_selector "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Views/RegionSelector.xaml.cs"
click node_capture_service "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/ScreenshotService.cs"
click node_editor_window "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Views/EditorWindow.xaml.cs"
click node_canvas "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Editor/CanvasRenderer.cs"
click node_undo "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Editor/UndoController.cs"
click node_element_state "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Editor/ElementState.cs"
click node_save "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/SaveService.cs"
click node_history_window "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Views/HistoryWindow.xaml.cs"
click node_history_service "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/HistoryService.cs"
click node_settings_window "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Views/SettingsWindow.xaml.cs"
click node_settings_service "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/SettingsService.cs"
click node_settings_model "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Models/AppSettings.cs"
click node_updater "https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/AutoUpdateService.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_main,node_hotkeys,node_selector,node_capture_service,node_user toneBlue
class node_editor_window,node_canvas,node_undo,node_element_state,node_history_store toneAmber
class node_save,node_history_window,node_history_service toneMint
class node_settings_window,node_settings_service,node_settings_model toneRose
class node_updater,node_clipboard,node_files,node_startup_registry,node_release_service toneIndigo
```

## Components

### Capture

- [Main Window](https://github.com/daolyap/money-shot/blob/main/MoneyShot/MainWindow.xaml.cs): `MoneyShot/MainWindow.xaml.cs`
- [Global Hotkeys](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/HotKeyService.cs): `MoneyShot/Services/HotKeyService.cs`
- [Region Selector](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Views/RegionSelector.xaml.cs): `MoneyShot/Views/RegionSelector.xaml.cs`
- [Screen Capture](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/ScreenshotService.cs): `MoneyShot/Services/ScreenshotService.cs`

### Editing

- [Editor Window](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Views/EditorWindow.xaml.cs): `MoneyShot/Views/EditorWindow.xaml.cs`
- [Canvas Renderer](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Editor/CanvasRenderer.cs): `MoneyShot/Editor/CanvasRenderer.cs`
- [Undo Controller](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Editor/UndoController.cs): `MoneyShot/Editor/UndoController.cs`
- [Element State](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Editor/ElementState.cs): `MoneyShot/Editor/ElementState.cs`

### Persistence

- [Save Service](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/SaveService.cs): `MoneyShot/Services/SaveService.cs`
- [History Window](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Views/HistoryWindow.xaml.cs): `MoneyShot/Views/HistoryWindow.xaml.cs`
- [History Service](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/HistoryService.cs): `MoneyShot/Services/HistoryService.cs`

### Application Services

- [Settings Window](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Views/SettingsWindow.xaml.cs): `MoneyShot/Views/SettingsWindow.xaml.cs`
- [Settings Service](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/SettingsService.cs): `MoneyShot/Services/SettingsService.cs`
- [App Settings](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Models/AppSettings.cs): `MoneyShot/Models/AppSettings.cs`

### Updates

- [Auto Update](https://github.com/daolyap/money-shot/blob/main/MoneyShot/Services/AutoUpdateService.cs): `MoneyShot/Services/AutoUpdateService.cs`

### Other components

- **User**
- **System Clipboard**
- **Image Files**
- **Local History**
- **Windows Startup**
- **GitHub Releases**

## Connections

- User → Main Window: uses
- Main Window → Global Hotkeys: registers
- Global Hotkeys → Main Window: dispatches
- Main Window → Screen Capture: captures
- Main Window → Region Selector: opens
- Main Window → Editor Window: opens editor
- Editor Window → Canvas Renderer: renders annotations
- Editor Window → Undo Controller: records undo
- Undo Controller → Editor Window: restores edits
- Editor Window → Save Service: saves image
- Save Service → System Clipboard: copies image
- Save Service → Image Files: writes image
- Main Window → History Service: records capture
- History Service → Local History: writes entries
- History Window → History Service: loads history
- Settings Window → Settings Service: updates settings
- Settings Service → App Settings: loads and saves
- Settings Service → Windows Startup: configures startup
- Auto Update → GitHub Releases: checks releases
