# vger70/medreminder architecture

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

## Overview

MedReminder is a Windows medicine-stock and prescription-timing reminder. The main workflow is recording medicines, schedules and stock; calculating consumption and estimated run-out; then presenting alerts so the user can request a prescription in time. Separate capabilities cover dose-time reminders, reference-catalogue lookup, reports, profiles, backup/restore and device sync. The graph reflects the documented layered design and sampled code; several UI-to-service connections and unsampled feature internals are represented only where the README or named modules support them.

Main entry points: [`src/MedReminder.UI/Forms/MainForm.cs`](https://github.com/vger70/medreminder/blob/main/src/MedReminder.UI/Forms/MainForm.cs) (WinForms UI), [`src/MedReminder.Infrastructure.Portable/Persistence/MedReminderDbContext.cs`](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure.Portable/Persistence/MedReminderDbContext.cs) (Profile database), [`src/MedReminder.UI/Hosting`](https://github.com/vger70/medreminder/tree/main/src/MedReminder.UI/Hosting) (Background services), [`src/MedReminder.Application/Monitoring/MedicationMonitor.cs`](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Monitoring/MedicationMonitor.cs) (Medication monitor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop experience"]
  node_ui["WinForms UI<br/>[MainForm.cs]"]
  node_hosting["Background services<br/>[Hosting]"]
  node_notifications["Notifications"]
  node_email["Email delivery"]
  node_localization["Localization"]
end

subgraph group_therapy["Therapy tracking"]
  node_medusecases["Medicine use cases<br/>[UseCases]"]
  node_monitor["Medication monitor"]
  node_reminders["Dose reminders"]
  node_calculations["Stock forecasts"]
  node_ledger["Therapy ledger"]
end

subgraph group_reference["Catalogue and reports"]
  node_catalogueui["Catalogue UI"]
  node_cataloguequery["Catalogue search"]
  node_cataloguestore[("Reference catalogue")]
  node_cataloguefeed["Catalogue refresh"]
  node_report["Therapy reports<br/>[TherapyReport.cs]"]
  node_timeline["Therapy timeline"]
end

subgraph group_data["Persistence and profiles"]
  node_profiles["Profile management<br/>[ProfileRegistry.cs]"]
  node_db[("Profile database")]
end

subgraph group_continuity["Backup and sync"]
  node_export["Export and restore<br/>[ExportService.cs]"]
  node_backup["Automatic backup<br/>[BackupService.cs]"]
  node_archive["Archive storage"]
  node_sync["Device sync<br/>[SyncEngine.cs]"]
  node_transport["Sync transports"]
end

node_user(("User"))
node_cloud(("Cloud providers"))
node_catalogues(("Official medicine sources"))

node_user -->|"uses"| node_ui
node_ui -->|"records therapy"| node_medusecases
node_medusecases -->|"persists changes"| node_db
node_medusecases -->|"records facts"| node_ledger
node_ledger -->|"stores history"| node_db
node_hosting -->|"runs checks"| node_monitor
node_monitor -->|"reads therapy"| node_db
node_monitor -->|"estimates run-out"| node_calculations
node_monitor -->|"dispatches alerts"| node_notifications
node_monitor -->|"sends email"| node_email
node_hosting -->|"runs schedule"| node_reminders
node_reminders -->|"dispatches doses"| node_notifications
node_reminders -->|"sends email"| node_email
node_ui -->|"opens lookup"| node_catalogueui
node_catalogueui -->|"searches"| node_cataloguequery
node_cataloguequery -->|"queries"| node_cataloguestore
node_hosting -->|"refreshes snapshot"| node_cataloguefeed
node_cataloguefeed -->|"imports records"| node_cataloguestore
node_catalogues -.->|"provides data"| node_cataloguefeed
node_ui -->|"requests report"| node_report
node_report -->|"reads therapy"| node_db
node_ui -->|"opens timeline"| node_timeline
node_timeline -->|"loads history"| node_db
node_ui -->|"selects profile"| node_profiles
node_profiles -->|"resolves database"| node_db
node_ui -->|"exports or restores"| node_export
node_export -->|"reads or replaces"| node_db
node_hosting -->|"runs backups"| node_backup
node_backup -->|"stores archives"| node_archive
node_archive -.->|"uploads archives"| node_cloud
node_ui -->|"manages sync"| node_sync
node_hosting -->|"runs sync"| node_sync
node_sync -->|"reads operations"| node_db
node_sync -->|"exchanges segments"| node_transport
node_transport -.->|"uses account"| node_cloud

click node_ui "https://github.com/vger70/medreminder/blob/main/src/MedReminder.UI/Forms/MainForm.cs"
click node_hosting "https://github.com/vger70/medreminder/tree/main/src/MedReminder.UI/Hosting"
click node_notifications "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Notifications/BalloonTipNotificationService.cs"
click node_email "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Email/MailKitEmailNotificationService.cs"
click node_localization "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure.Portable/Localization/LocalizationService.cs"
click node_medusecases "https://github.com/vger70/medreminder/tree/main/src/MedReminder.Application/UseCases"
click node_monitor "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Monitoring/MedicationMonitor.cs"
click node_reminders "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Monitoring/DoseReminderService.cs"
click node_calculations "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Domain/Calculations/MedicineForecast.cs"
click node_ledger "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Ledger/LedgerSynchronizer.cs"
click node_catalogueui "https://github.com/vger70/medreminder/blob/main/src/MedReminder.UI/Forms/MedicinePickerDialog.cs"
click node_cataloguequery "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Catalogue/SearchCatalogueUseCase.cs"
click node_cataloguestore "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Catalogue/SqliteReferenceCatalogueQueryService.cs"
click node_cataloguefeed "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Catalogue/CsvReferenceCatalogueImporter.cs"
click node_report "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Reporting/TherapyReport.cs"
click node_timeline "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Timeline/TherapyTimelineQuery.cs"
click node_profiles "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Profiles/ProfileRegistry.cs"
click node_db "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure.Portable/Persistence/MedReminderDbContext.cs"
click node_export "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Export/ExportService.cs"
click node_backup "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Backup/BackupService.cs"
click node_archive "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Backup/CloudArchiveStorage.cs"
click node_sync "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Sync/SyncEngine.cs"
click node_transport "https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure.Portable/Cloud/GoogleDrive/GoogleDriveSyncTransport.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_ui,node_hosting,node_notifications,node_email,node_localization,node_user toneBlue
class node_medusecases,node_monitor,node_reminders,node_calculations,node_ledger toneAmber
class node_catalogueui,node_cataloguequery,node_cataloguestore,node_cataloguefeed,node_report,node_timeline toneMint
class node_profiles,node_db toneRose
class node_export,node_backup,node_archive,node_sync,node_transport,node_cloud,node_catalogues toneIndigo
```

## Components

### Desktop experience

- [WinForms UI](https://github.com/vger70/medreminder/blob/main/src/MedReminder.UI/Forms/MainForm.cs): `src/MedReminder.UI/Forms/MainForm.cs`
- [Background services](https://github.com/vger70/medreminder/tree/main/src/MedReminder.UI/Hosting): `src/MedReminder.UI/Hosting`
- [Notifications](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Notifications/BalloonTipNotificationService.cs): `src/MedReminder.Infrastructure/Notifications/BalloonTipNotificationService.cs`
- [Email delivery](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Email/MailKitEmailNotificationService.cs): `src/MedReminder.Infrastructure/Email/MailKitEmailNotificationService.cs`
- [Localization](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure.Portable/Localization/LocalizationService.cs): `src/MedReminder.Infrastructure.Portable/Localization/LocalizationService.cs`

### Therapy tracking

- [Medicine use cases](https://github.com/vger70/medreminder/tree/main/src/MedReminder.Application/UseCases): `src/MedReminder.Application/UseCases`
- [Medication monitor](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Monitoring/MedicationMonitor.cs): `src/MedReminder.Application/Monitoring/MedicationMonitor.cs`
- [Dose reminders](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Monitoring/DoseReminderService.cs): `src/MedReminder.Application/Monitoring/DoseReminderService.cs`
- [Stock forecasts](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Domain/Calculations/MedicineForecast.cs): `src/MedReminder.Domain/Calculations/MedicineForecast.cs`
- [Therapy ledger](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Ledger/LedgerSynchronizer.cs): `src/MedReminder.Application/Ledger/LedgerSynchronizer.cs`

### Catalogue and reports

- [Catalogue UI](https://github.com/vger70/medreminder/blob/main/src/MedReminder.UI/Forms/MedicinePickerDialog.cs): `src/MedReminder.UI/Forms/MedicinePickerDialog.cs`
- [Catalogue search](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Catalogue/SearchCatalogueUseCase.cs): `src/MedReminder.Application/Catalogue/SearchCatalogueUseCase.cs`
- [Reference catalogue](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Catalogue/SqliteReferenceCatalogueQueryService.cs): `src/MedReminder.Infrastructure/Catalogue/SqliteReferenceCatalogueQueryService.cs`
- [Catalogue refresh](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Catalogue/CsvReferenceCatalogueImporter.cs): `src/MedReminder.Infrastructure/Catalogue/CsvReferenceCatalogueImporter.cs`
- [Therapy reports](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Reporting/TherapyReport.cs): `src/MedReminder.Application/Reporting/TherapyReport.cs`
- [Therapy timeline](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Timeline/TherapyTimelineQuery.cs): `src/MedReminder.Application/Timeline/TherapyTimelineQuery.cs`

### Persistence and profiles

- [Profile management](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Profiles/ProfileRegistry.cs): `src/MedReminder.Infrastructure/Profiles/ProfileRegistry.cs`
- [Profile database](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure.Portable/Persistence/MedReminderDbContext.cs): `src/MedReminder.Infrastructure.Portable/Persistence/MedReminderDbContext.cs`

### Backup and sync

- [Export and restore](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Export/ExportService.cs): `src/MedReminder.Infrastructure/Export/ExportService.cs`
- [Automatic backup](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Backup/BackupService.cs): `src/MedReminder.Infrastructure/Backup/BackupService.cs`
- [Archive storage](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure/Backup/CloudArchiveStorage.cs): `src/MedReminder.Infrastructure/Backup/CloudArchiveStorage.cs`
- [Device sync](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Application/Sync/SyncEngine.cs): `src/MedReminder.Application/Sync/SyncEngine.cs`
- [Sync transports](https://github.com/vger70/medreminder/blob/main/src/MedReminder.Infrastructure.Portable/Cloud/GoogleDrive/GoogleDriveSyncTransport.cs): `src/MedReminder.Infrastructure.Portable/Cloud/GoogleDrive/GoogleDriveSyncTransport.cs`

### Other components

- **User**
- **Cloud providers**
- **Official medicine sources**

## Connections

- User → WinForms UI: uses
- WinForms UI → Medicine use cases: records therapy
- Medicine use cases → Profile database: persists changes
- Medicine use cases → Therapy ledger: records facts
- Therapy ledger → Profile database: stores history
- Background services → Medication monitor: runs checks
- Medication monitor → Profile database: reads therapy
- Medication monitor → Stock forecasts: estimates run-out
- Medication monitor → Notifications: dispatches alerts
- Medication monitor → Email delivery: sends email
- Background services → Dose reminders: runs schedule
- Dose reminders → Notifications: dispatches doses
- Dose reminders → Email delivery: sends email
- WinForms UI → Catalogue UI: opens lookup
- Catalogue UI → Catalogue search: searches
- Catalogue search → Reference catalogue: queries
- Background services → Catalogue refresh: refreshes snapshot
- Catalogue refresh → Reference catalogue: imports records
- Official medicine sources → Catalogue refresh: provides data
- WinForms UI → Therapy reports: requests report
- Therapy reports → Profile database: reads therapy
- WinForms UI → Therapy timeline: opens timeline
- Therapy timeline → Profile database: loads history
- WinForms UI → Profile management: selects profile
- Profile management → Profile database: resolves database
- WinForms UI → Export and restore: exports or restores
- Export and restore → Profile database: reads or replaces
- Background services → Automatic backup: runs backups
- Automatic backup → Archive storage: stores archives
- Archive storage → Cloud providers: uploads archives
- WinForms UI → Device sync: manages sync
- Background services → Device sync: runs sync
- Device sync → Profile database: reads operations
- Device sync → Sync transports: exchanges segments
- Sync transports → Cloud providers: uses account
