# puneet-swarup/battery-guardian architecture

> Architecture diagram of the GitHub repository puneet-swarup/battery-guardian, 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/puneet-swarup/battery-guardian
- Repository: https://github.com/puneet-swarup/battery-guardian

## Overview

Battery Guardian is a Windows tray application for monitoring battery state and prompting the user to unplug or connect power. Its principal loop refreshes readings, evaluates configured thresholds, and presents repeatable alerts; users can also refresh, snooze, and change settings. The README also documents battery-health reporting and release checks. MainWindow’s excerpt is partial, so links to capabilities whose invocation is not visible are omitted; health collection and toast delivery are shown only where their sampled implementations support them.

Main entry points: [`MainWindow.xaml.cs`](https://github.com/puneet-swarup/battery-guardian/blob/main/MainWindow.xaml.cs) (Main window and tray), [`App.xaml.cs`](https://github.com/puneet-swarup/battery-guardian/blob/main/App.xaml.cs) (Application startup), [`BatteryHealthService.cs`](https://github.com/puneet-swarup/battery-guardian/blob/main/BatteryHealthService.cs) (Health capacity query), [`SettingsWindow.xaml.cs`](https://github.com/puneet-swarup/battery-guardian/blob/main/SettingsWindow.xaml.cs) (Settings window)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Application UI"]
  node_app["Application startup<br/>[App.xaml.cs]"]
  node_window["Main window and tray<br/>[MainWindow.xaml.cs]"]
  node_settingsui["Settings window"]
end

subgraph group_monitor["Battery monitoring"]
  node_battery["Battery readings<br/>[MainWindow.xaml.cs]"]
  node_healthservice["Health capacity query"]
  node_healthinfo["Health status calculation"]
  node_alertlogic["Threshold evaluation"]
end

subgraph group_alerts["Alerts"]
  node_toast["Toast delivery<br/>[ToastService.cs]"]
end

subgraph group_support["Settings and support"]
  node_settings["Settings model<br/>[Settings.cs]"]
  node_settingsfile[("Local settings file")]
  node_diagnostics["Diagnostic logging<br/>[DiagnosticLog.cs]"]
  node_logfile[("Local log files")]
  node_updates["Release checker<br/>[UpdateService.cs]"]
end

node_user(("User"))
node_windowsbattery["Windows battery and WMI"]
node_github["GitHub Releases API"]
node_windowsnotices["Windows notifications"]
node_speech["Speech and beep"]

node_user -->|"opens and controls"| node_window
node_app -->|"activates"| node_window
node_window -->|"refreshes"| node_battery
node_battery -->|"reads status"| node_windowsbattery
node_window -->|"evaluates thresholds"| node_alertlogic
node_window -->|"loads and saves"| node_settings
node_settings -->|"reads and writes"| node_settingsfile
node_window -->|"opens settings"| node_settingsui
node_settingsui -->|"returns edits"| node_window
node_window -->|"shows alerts"| node_toast
node_toast -->|"dispatches toast"| node_windowsnotices
node_window -->|"plays and speaks"| node_speech
node_window -->|"checks releases"| node_updates
node_updates -->|"queries latest release"| node_github
node_healthservice -->|"queries capacities"| node_windowsbattery
node_healthservice -->|"creates health data"| node_healthinfo
node_window -->|"records diagnostics"| node_diagnostics
node_diagnostics -->|"appends entries"| node_logfile
node_app -->|"records crashes"| node_logfile

click node_app "https://github.com/puneet-swarup/battery-guardian/blob/main/App.xaml.cs"
click node_window "https://github.com/puneet-swarup/battery-guardian/blob/main/MainWindow.xaml.cs"
click node_settingsui "https://github.com/puneet-swarup/battery-guardian/blob/main/SettingsWindow.xaml.cs"
click node_battery "https://github.com/puneet-swarup/battery-guardian/blob/main/MainWindow.xaml.cs"
click node_healthservice "https://github.com/puneet-swarup/battery-guardian/blob/main/BatteryHealthService.cs"
click node_healthinfo "https://github.com/puneet-swarup/battery-guardian/blob/main/BatteryHealthInfo.cs"
click node_alertlogic "https://github.com/puneet-swarup/battery-guardian/blob/main/BatteryAlertEvaluator.cs"
click node_settings "https://github.com/puneet-swarup/battery-guardian/blob/main/Settings.cs"
click node_diagnostics "https://github.com/puneet-swarup/battery-guardian/blob/main/DiagnosticLog.cs"
click node_updates "https://github.com/puneet-swarup/battery-guardian/blob/main/UpdateService.cs"
click node_toast "https://github.com/puneet-swarup/battery-guardian/blob/main/ToastService.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_app,node_window,node_settingsui,node_user toneBlue
class node_battery,node_healthservice,node_healthinfo,node_alertlogic toneAmber
class node_toast,node_github toneMint
class node_settings,node_settingsfile,node_diagnostics,node_logfile,node_updates toneRose
class node_windowsbattery,node_windowsnotices,node_speech toneIndigo
```

## Components

### Application UI

- [Application startup](https://github.com/puneet-swarup/battery-guardian/blob/main/App.xaml.cs): `App.xaml.cs`
- [Main window and tray](https://github.com/puneet-swarup/battery-guardian/blob/main/MainWindow.xaml.cs): `MainWindow.xaml.cs`
- [Settings window](https://github.com/puneet-swarup/battery-guardian/blob/main/SettingsWindow.xaml.cs): `SettingsWindow.xaml.cs`

### Battery monitoring

- [Battery readings](https://github.com/puneet-swarup/battery-guardian/blob/main/MainWindow.xaml.cs): `MainWindow.xaml.cs`
- [Health capacity query](https://github.com/puneet-swarup/battery-guardian/blob/main/BatteryHealthService.cs): `BatteryHealthService.cs`
- [Health status calculation](https://github.com/puneet-swarup/battery-guardian/blob/main/BatteryHealthInfo.cs): `BatteryHealthInfo.cs`
- [Threshold evaluation](https://github.com/puneet-swarup/battery-guardian/blob/main/BatteryAlertEvaluator.cs): `BatteryAlertEvaluator.cs`

### Alerts

- [Toast delivery](https://github.com/puneet-swarup/battery-guardian/blob/main/ToastService.cs): `ToastService.cs`

### Settings and support

- [Settings model](https://github.com/puneet-swarup/battery-guardian/blob/main/Settings.cs): `Settings.cs`
- **Local settings file**
- [Diagnostic logging](https://github.com/puneet-swarup/battery-guardian/blob/main/DiagnosticLog.cs): `DiagnosticLog.cs`
- **Local log files**
- [Release checker](https://github.com/puneet-swarup/battery-guardian/blob/main/UpdateService.cs): `UpdateService.cs`

### Other components

- **User**
- **Windows battery and WMI**
- **GitHub Releases API**
- **Windows notifications**
- **Speech and beep**

## Connections

- User → Main window and tray: opens and controls
- Application startup → Main window and tray: activates
- Main window and tray → Battery readings: refreshes
- Battery readings → Windows battery and WMI: reads status
- Main window and tray → Threshold evaluation: evaluates thresholds
- Main window and tray → Settings model: loads and saves
- Settings model → Local settings file: reads and writes
- Main window and tray → Settings window: opens settings
- Settings window → Main window and tray: returns edits
- Main window and tray → Toast delivery: shows alerts
- Toast delivery → Windows notifications: dispatches toast
- Main window and tray → Speech and beep: plays and speaks
- Main window and tray → Release checker: checks releases
- Release checker → GitHub Releases API: queries latest release
- Health capacity query → Windows battery and WMI: queries capacities
- Health capacity query → Health status calculation: creates health data
- Main window and tray → Diagnostic logging: records diagnostics
- Diagnostic logging → Local log files: appends entries
- Application startup → Local log files: records crashes
