# sebastianoehm/reaper architecture

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

## Overview

AltReaper is a console weather client: the user selects language and units, enters a city, views localized weather data, and can email it. The main workflow is explicit in `WetterApp.cs`; configuration, connectivity checks, and optional superuser retrieval are also visible in sampled source. The README is empty, and unsampled files limit certainty about resource contents and any additional behavior.

Main entry points: [`AltReaper/WetterApp.cs`](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/WetterApp.cs) (Application flow), [`AltReaper/IO/Inputs.cs`](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/IO/Inputs.cs) (Config prompts), [`AltReaper/Helper.cs`](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Helper.cs) (Email choice), [`AltReaper/IO/Outputs.cs`](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/IO/Outputs.cs) (Email sender)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Weather workflow"]
  node_program["Application flow<br/>[WetterApp.cs]"]
  node_weather_input["Weather request<br/>[Inputs.cs]"]
  node_weather_model["Weather model<br/>[JsonHandling.cs]"]
  node_weather_output["Weather display<br/>[Outputs.cs]"]
  node_menu_checks["Console menus<br/>[Checks.cs]"]
end

subgraph group_settings["Configuration and language"]
  node_language["Language mapping<br/>[LanguageLoader.cs]"]
  node_config_input["Config prompts<br/>[Inputs.cs]"]
  node_config_data["Config model<br/>[JsonHandling.cs]"]
  node_config_file["Local config<br/>[Helper.cs]"]
  node_app_settings["App settings<br/>[Helper.cs]"]
  node_resources["Localized strings<br/>[Resources.resx]"]
end

subgraph group_delivery["Email delivery"]
  node_email_choice["Email choice<br/>[Helper.cs]"]
  node_email_output["Email sender<br/>[Outputs.cs]"]
  node_email_body["HTML email body<br/>[HtmlBody.cs]"]
end

subgraph group_operations["Checks and operations"]
  node_connectivity["Connectivity checks<br/>[Checks.cs]"]
  node_superuser["Superuser retrieval<br/>[Helper.cs]"]
  node_shutdown["Exit and uninstall<br/>[Helper.cs]"]
end

node_user(("Console user"))
node_weather_api["Weather API"]
node_smtp["SMTP server"]
node_network["Network endpoints"]
node_sftp["SFTP server"]

node_user -->|"starts"| node_program
node_program -->|"checks access"| node_connectivity
node_connectivity -->|"pings and requests"| node_network
node_program -->|"prompts"| node_menu_checks
node_program -->|"optional retrieval"| node_superuser
node_superuser -->|"downloads config"| node_sftp
node_program -->|"loads selection"| node_language
node_language -->|"maps language"| node_app_settings
node_program -->|"loads configuration"| node_config_input
node_config_input -->|"reads and writes"| node_config_file
node_config_input -->|"serializes"| node_config_data
node_program -->|"requests weather"| node_weather_input
node_weather_input -->|"fetches forecast"| node_weather_api
node_weather_api -->|"returns JSON"| node_weather_model
node_program -->|"displays result"| node_weather_output
node_weather_output -->|"prints weather"| node_user
node_program -->|"offers email"| node_email_choice
node_email_choice -->|"sends selected mail"| node_email_output
node_email_output -->|"builds HTML"| node_email_body
node_email_output -->|"sends message"| node_smtp
node_email_choice -->|"closes app"| node_shutdown
node_program -->|"uses strings"| node_resources

click node_program "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/WetterApp.cs"
click node_weather_input "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/IO/Inputs.cs"
click node_weather_model "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/JsonHandling.cs"
click node_weather_output "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/IO/Outputs.cs"
click node_menu_checks "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Checks.cs"
click node_language "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/IO/LanguageLoader.cs"
click node_config_input "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/IO/Inputs.cs"
click node_config_data "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/JsonHandling.cs"
click node_config_file "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Helper.cs"
click node_app_settings "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Helper.cs"
click node_email_choice "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Helper.cs"
click node_email_output "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/IO/Outputs.cs"
click node_email_body "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/HtmlBody.cs"
click node_connectivity "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Checks.cs"
click node_superuser "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Helper.cs"
click node_shutdown "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Helper.cs"
click node_resources "https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Properties/Resources.resx"

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_program,node_weather_input,node_weather_model,node_weather_output,node_menu_checks,node_user toneBlue
class node_language,node_config_input,node_config_data,node_config_file,node_app_settings,node_resources toneAmber
class node_email_choice,node_email_output,node_email_body,node_weather_api,node_smtp,node_sftp toneMint
class node_connectivity,node_superuser,node_shutdown toneRose
class node_network toneIndigo
```

## Components

### Weather workflow

- [Application flow](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/WetterApp.cs): `AltReaper/WetterApp.cs`
- [Weather request](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/IO/Inputs.cs): `AltReaper/IO/Inputs.cs`
- [Weather model](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/JsonHandling.cs): `AltReaper/JsonHandling.cs`
- [Weather display](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/IO/Outputs.cs): `AltReaper/IO/Outputs.cs`
- [Console menus](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Checks.cs): `AltReaper/Checks.cs`

### Configuration and language

- [Language mapping](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/IO/LanguageLoader.cs): `AltReaper/IO/LanguageLoader.cs`
- [Config prompts](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/IO/Inputs.cs): `AltReaper/IO/Inputs.cs`
- [Config model](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/JsonHandling.cs): `AltReaper/JsonHandling.cs`
- [Local config](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Helper.cs): `AltReaper/Helper.cs`
- [App settings](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Helper.cs): `AltReaper/Helper.cs`
- [Localized strings](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Properties/Resources.resx): `AltReaper/Properties/Resources.resx`

### Email delivery

- [Email choice](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Helper.cs): `AltReaper/Helper.cs`
- [Email sender](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/IO/Outputs.cs): `AltReaper/IO/Outputs.cs`
- [HTML email body](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/HtmlBody.cs): `AltReaper/HtmlBody.cs`

### Checks and operations

- [Connectivity checks](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Checks.cs): `AltReaper/Checks.cs`
- [Superuser retrieval](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Helper.cs): `AltReaper/Helper.cs`
- [Exit and uninstall](https://github.com/sebastianoehm/reaper/blob/revamp/AltReaper/Helper.cs): `AltReaper/Helper.cs`

### Other components

- **Console user**
- **Weather API**
- **SMTP server**
- **Network endpoints**
- **SFTP server**

## Connections

- Console user → Application flow: starts
- Application flow → Connectivity checks: checks access
- Connectivity checks → Network endpoints: pings and requests
- Application flow → Console menus: prompts
- Application flow → Superuser retrieval: optional retrieval
- Superuser retrieval → SFTP server: downloads config
- Application flow → Language mapping: loads selection
- Language mapping → App settings: maps language
- Application flow → Config prompts: loads configuration
- Config prompts → Local config: reads and writes
- Config prompts → Config model: serializes
- Application flow → Weather request: requests weather
- Weather request → Weather API: fetches forecast
- Weather API → Weather model: returns JSON
- Application flow → Weather display: displays result
- Weather display → Console user: prints weather
- Application flow → Email choice: offers email
- Email choice → Email sender: sends selected mail
- Email sender → HTML email body: builds HTML
- Email sender → SMTP server: sends message
- Email choice → Exit and uninstall: closes app
- Application flow → Localized strings: uses strings
