# packingproof/packingproof-desktop architecture

> Architecture diagram of the GitHub repository packingproof/packingproof-desktop, 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/packingproof/packingproof-desktop
- Repository: https://github.com/packingproof/packingproof-desktop

## Overview

PackingProof is a desktop packing-evidence system: a barcode scan starts a recording associated with a tracking number, recording ends and is stored, and users can later search and play it back. The README also documents order-note speech and refund checks, multi-workstation/mobile uploads, LAN web access, NAS archiving, and an extension API/market. The tree and sampled excerpts support the database query and extension recording preparation details; links among several other runtime subsystems are documented capabilities rather than inspected call sites.

Main entry points: [`ExpressPackingMonitoring/Services/VideoLifecycleCoordinator.cs`](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/VideoLifecycleCoordinator.cs) (Recording lifecycle), [`ExpressPackingMonitoring/Data/VideoDatabase.cs`](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Data/VideoDatabase.cs) (Video database), [`ExpressPackingMonitoring/Services/WebServer.cs`](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/WebServer.cs) (LAN web server), [`ExpressPackingMonitoring/Services/ExtensionRecordingQueryService.cs`](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/ExtensionRecordingQueryService.cs) (Extension recording queries)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_capture["Capture and recording"]
  node_scan_input["Scan input"]
  node_camera_capture["Camera capture"]
  node_barcode_recognition["Barcode recognition"]
  node_video_lifecycle["Recording lifecycle"]
  node_encoding["Video encoding<br/>[EncodingHelper.cs]"]
end

subgraph group_orders["Order assistance"]
  node_order_relay["Order information relay<br/>[OrderInfoRelay.cs]"]
  node_speech["Speech service<br/>[SpeechService.cs]"]
  node_refund_check["Refund lookup"]
end

subgraph group_storage["Storage and archive"]
  node_database[("Video database<br/>[VideoDatabase.cs]")]
  node_storage_resolver["Recording storage plan"]
  node_archive["Archive service<br/>[ArchiveService.cs]"]
  node_nas_provider["NAS archive provider"]
end

subgraph group_access["Playback and integrations"]
  node_web["LAN web server<br/>[WebServer.cs]"]
  node_playback["Playback resolver"]
  node_extension_api["Extension runtime"]
  node_extension_enrollment["Extension enrollment"]
  node_extension_recordings["Extension recording queries"]
  node_market["Extension market client"]
end

subgraph group_runtime["Application runtime"]
  node_app["Desktop application<br/>[App.xaml.cs]"]
  node_host["Host session<br/>[HostSession.cs]"]
end

node_operator(("Packing operator"))
node_scanner(("Barcode scanner"))
node_camera(("Camera input"))
node_mobile(("Mobile workstations"))
node_browser(("LAN browser"))
node_browser_script(("Order userscript"))
node_nas[("NAS or share")]

node_operator -->|"scans label"| node_scanner
node_scanner -->|"submits code"| node_scan_input
node_operator -->|"packs parcel"| node_camera
node_camera -->|"provides frames"| node_camera_capture
node_camera_capture -->|"supplies frames"| node_barcode_recognition
node_barcode_recognition -->|"triggers recording"| node_video_lifecycle
node_scan_input -->|"triggers recording"| node_video_lifecycle
node_video_lifecycle -->|"encodes video"| node_encoding
node_video_lifecycle -->|"records metadata"| node_database
node_video_lifecycle -->|"selects storage"| node_storage_resolver
node_storage_resolver -->|"plans archive"| node_archive
node_archive -->|"archives copy"| node_nas_provider
node_nas_provider -->|"writes archive"| node_nas
node_browser_script -->|"sends order data"| node_order_relay
node_order_relay -->|"provides order notes"| node_speech
node_video_lifecycle -->|"checks asynchronously"| node_refund_check
node_mobile -->|"uploads recordings"| node_host
node_host -->|"registers recordings"| node_database
node_browser -->|"requests playback"| node_web
node_web -->|"queries recordings"| node_database
node_web -->|"resolves video"| node_playback
node_extension_api -->|"requests authorization"| node_extension_enrollment
node_extension_api -->|"queries recordings"| node_extension_recordings
node_extension_recordings -->|"queries metadata"| node_database
node_extension_recordings -->|"resolves recording"| node_playback
node_market -.->|"installs extensions"| node_extension_api
node_app -->|"starts host session"| node_host

click node_app "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/App.xaml.cs"
click node_host "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring.Host/HostSession.cs"
click node_scan_input "https://github.com/packingproof/packingproof-desktop/tree/main/ExpressPackingMonitoring/Input"
click node_camera_capture "https://github.com/packingproof/packingproof-desktop/tree/main/ExpressPackingMonitoring/Services/MediaFoundation"
click node_barcode_recognition "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/CameraBarcodeRecognitionService.cs"
click node_video_lifecycle "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/VideoLifecycleCoordinator.cs"
click node_encoding "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Helpers/EncodingHelper.cs"
click node_order_relay "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/OrderInfoRelay.cs"
click node_speech "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Audio/SpeechService.cs"
click node_refund_check "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/PrintedRefundLookupCoordinator.cs"
click node_database "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Data/VideoDatabase.cs"
click node_storage_resolver "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/StorageLocationResolver.cs"
click node_archive "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/ArchiveService.cs"
click node_nas_provider "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/NasArchiveProvider.cs"
click node_web "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/WebServer.cs"
click node_playback "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/PlaybackFileResolver.cs"
click node_extension_api "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/ExtensionRuntime.cs"
click node_extension_enrollment "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/ExtensionEnrollmentService.cs"
click node_extension_recordings "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/ExtensionRecordingQueryService.cs"
click node_market "https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/Extensions/ExtensionMarketClient.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_scan_input,node_camera_capture,node_barcode_recognition,node_video_lifecycle,node_encoding,node_browser,node_browser_script toneBlue
class node_order_relay,node_speech,node_refund_check,node_nas toneAmber
class node_database,node_storage_resolver,node_archive,node_nas_provider toneMint
class node_web,node_playback,node_extension_api,node_extension_enrollment,node_extension_recordings,node_market toneRose
class node_app,node_host,node_operator,node_scanner,node_camera,node_mobile toneIndigo
```

## Components

### Capture and recording

- [Scan input](https://github.com/packingproof/packingproof-desktop/tree/main/ExpressPackingMonitoring/Input): `ExpressPackingMonitoring/Input`
- [Camera capture](https://github.com/packingproof/packingproof-desktop/tree/main/ExpressPackingMonitoring/Services/MediaFoundation): `ExpressPackingMonitoring/Services/MediaFoundation`
- [Barcode recognition](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/CameraBarcodeRecognitionService.cs): `ExpressPackingMonitoring/Services/CameraBarcodeRecognitionService.cs`
- [Recording lifecycle](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/VideoLifecycleCoordinator.cs): `ExpressPackingMonitoring/Services/VideoLifecycleCoordinator.cs`
- [Video encoding](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Helpers/EncodingHelper.cs): `ExpressPackingMonitoring/Helpers/EncodingHelper.cs`

### Order assistance

- [Order information relay](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/OrderInfoRelay.cs): `ExpressPackingMonitoring/Services/OrderInfoRelay.cs`
- [Speech service](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Audio/SpeechService.cs): `ExpressPackingMonitoring/Audio/SpeechService.cs`
- [Refund lookup](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/PrintedRefundLookupCoordinator.cs): `ExpressPackingMonitoring/Services/PrintedRefundLookupCoordinator.cs`

### Storage and archive

- [Video database](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Data/VideoDatabase.cs): `ExpressPackingMonitoring/Data/VideoDatabase.cs`
- [Recording storage plan](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/StorageLocationResolver.cs): `ExpressPackingMonitoring/Services/StorageLocationResolver.cs`
- [Archive service](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/ArchiveService.cs): `ExpressPackingMonitoring/Services/ArchiveService.cs`
- [NAS archive provider](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/NasArchiveProvider.cs): `ExpressPackingMonitoring/Services/NasArchiveProvider.cs`

### Playback and integrations

- [LAN web server](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/WebServer.cs): `ExpressPackingMonitoring/Services/WebServer.cs`
- [Playback resolver](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/PlaybackFileResolver.cs): `ExpressPackingMonitoring/Services/PlaybackFileResolver.cs`
- [Extension runtime](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/ExtensionRuntime.cs): `ExpressPackingMonitoring/Services/ExtensionRuntime.cs`
- [Extension enrollment](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/ExtensionEnrollmentService.cs): `ExpressPackingMonitoring/Services/ExtensionEnrollmentService.cs`
- [Extension recording queries](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/ExtensionRecordingQueryService.cs): `ExpressPackingMonitoring/Services/ExtensionRecordingQueryService.cs`
- [Extension market client](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/Services/Extensions/ExtensionMarketClient.cs): `ExpressPackingMonitoring/Services/Extensions/ExtensionMarketClient.cs`

### Application runtime

- [Desktop application](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring/App.xaml.cs): `ExpressPackingMonitoring/App.xaml.cs`
- [Host session](https://github.com/packingproof/packingproof-desktop/blob/main/ExpressPackingMonitoring.Host/HostSession.cs): `ExpressPackingMonitoring.Host/HostSession.cs`

### Other components

- **Packing operator**
- **Barcode scanner**
- **Camera input**
- **Mobile workstations**
- **LAN browser**
- **Order userscript**
- **NAS or share**

## Connections

- Packing operator → Barcode scanner: scans label
- Barcode scanner → Scan input: submits code
- Packing operator → Camera input: packs parcel
- Camera input → Camera capture: provides frames
- Camera capture → Barcode recognition: supplies frames
- Barcode recognition → Recording lifecycle: triggers recording
- Scan input → Recording lifecycle: triggers recording
- Recording lifecycle → Video encoding: encodes video
- Recording lifecycle → Video database: records metadata
- Recording lifecycle → Recording storage plan: selects storage
- Recording storage plan → Archive service: plans archive
- Archive service → NAS archive provider: archives copy
- NAS archive provider → NAS or share: writes archive
- Order userscript → Order information relay: sends order data
- Order information relay → Speech service: provides order notes
- Recording lifecycle → Refund lookup: checks asynchronously
- Mobile workstations → Host session: uploads recordings
- Host session → Video database: registers recordings
- LAN browser → LAN web server: requests playback
- LAN web server → Video database: queries recordings
- LAN web server → Playback resolver: resolves video
- Extension runtime → Extension enrollment: requests authorization
- Extension runtime → Extension recording queries: queries recordings
- Extension recording queries → Video database: queries metadata
- Extension recording queries → Playback resolver: resolves recording
- Extension market client → Extension runtime: installs extensions
- Desktop application → Host session: starts host session
