# raptar212/birthday-checker architecture

> Architecture diagram of the GitHub repository raptar212/birthday-checker, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/raptar212/birthday-checker
- Repository: https://github.com/raptar212/birthday-checker

## Overview

BirthDay Checker is a Windows and Android app for tracking birthdays, name days, anniversaries, and holidays. The main workflow is to create or import entries, persist them, calculate upcoming occurrences, and show them in a list, calendar, or reminder. Windows runs from the system tray; Android provides a list, calendar, editor, daily notification, widget, and self-update. Shared core modules handle entry dates, catalogs, settings, storage, and reminder text. The graph follows documented behavior and source-index references; unsampled implementation details are not inferred.

Main entry points: [`mobile/BirthdayChecker.Mobile/MainPage.xaml.cs`](https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/MainPage.xaml.cs) (Mobile list), [`src/BirthdayChecker.App/MainWindow.xaml.cs`](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/MainWindow.xaml.cs) (Entry list), [`src/BirthdayChecker.Core/Entry.cs`](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/Entry.cs) (Entry model), [`src/BirthdayChecker.App/TrayApp.cs`](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/TrayApp.cs) (Tray app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Windows app"]
  node_windows_tray["Tray app<br/>[TrayApp.cs]"]
  node_windows_list["Entry list<br/>[MainWindow.xaml.cs]"]
  node_windows_calendar["Calendar<br/>[CalendarView.cs]"]
  node_windows_events["Events editor<br/>[EventsWindow.cs]"]
  node_windows_tags["Tags editor<br/>[TagsWindow.cs]"]
  node_windows_settings["Settings<br/>[SettingsWindow.cs]"]
end

subgraph group_android["Android app"]
  node_mobile_main["Mobile list<br/>[MainPage.xaml.cs]"]
  node_mobile_editor["Entry editor<br/>[EditorPage.xaml.cs]"]
  node_mobile_calendar["Calendar<br/>[CalendarPage.cs]"]
  node_mobile_settings["Settings<br/>[SettingsPage.cs]"]
  node_mobile_reminders["Notifications and widget<br/>[Reminders.cs]"]
  node_mobile_update["Self-update<br/>[SelfUpdate.cs]"]
end

subgraph group_core["Shared domain"]
  node_entry["Entry model<br/>[Entry.cs]"]
  node_dates["Event dates<br/>[EventDate.cs]"]
  node_upcoming["Occurrence calculation<br/>[Upcoming.cs]"]
  node_reminder_text["Reminder formatting<br/>[ReminderText.cs]"]
  node_catalogs["Tags, events, columns<br/>[TagCatalog.cs]"]
  node_settings_model["App settings<br/>[AppSettings.cs]"]
end

subgraph group_data["Persistence and exchange"]
  node_entries_store[("Entries file<br/>[EntryStorage.cs]")]
  node_csv["CSV import/export<br/>[EntryCsv.cs]"]
  node_exchange["Cross-device exchange<br/>[EntryExchange.cs]"]
end

node_user(("User"))
node_android(("Android system"))
node_release_service["Release service"]

node_user -->|"opens"| node_windows_tray
node_windows_tray -->|"opens list"| node_windows_list
node_windows_list -->|"opens calendar"| node_windows_calendar
node_windows_list -->|"edits events"| node_windows_events
node_windows_list -->|"edits tags"| node_windows_tags
node_windows_list -->|"opens settings"| node_windows_settings
node_windows_tray -->|"loads entries"| node_entries_store
node_windows_tray -->|"checks occurrences"| node_upcoming
node_windows_tray -->|"formats reminders"| node_reminder_text
node_windows_tray -->|"reads settings"| node_settings_model
node_windows_list -->|"loads and saves"| node_entries_store
node_windows_list -->|"imports and exports"| node_csv
node_windows_calendar -->|"renders entries"| node_entry
node_windows_calendar -->|"reads event types"| node_catalogs
node_user -->|"uses app"| node_mobile_main
node_mobile_main -->|"edits entries"| node_mobile_editor
node_mobile_main -->|"opens calendar"| node_mobile_calendar
node_mobile_main -->|"opens settings"| node_mobile_settings
node_mobile_main -->|"loads entries"| node_entries_store
node_mobile_main -->|"imports and exports"| node_csv
node_mobile_main -->|"checks reminders"| node_mobile_reminders
node_mobile_main -->|"checks updates"| node_mobile_update
node_mobile_calendar -->|"renders entries"| node_entry
node_mobile_calendar -->|"reads event types"| node_catalogs
node_mobile_editor -->|"edits entries"| node_entry
node_mobile_editor -->|"reads tags"| node_catalogs
node_mobile_reminders -->|"loads entries"| node_entries_store
node_mobile_reminders -->|"schedules checks"| node_upcoming
node_mobile_reminders -->|"formats notice"| node_reminder_text
node_mobile_reminders -->|"posts notifications"| node_android
node_mobile_update -->|"downloads release"| node_release_service
node_mobile_update -->|"installs package"| node_android
node_mobile_main -->|"shares entries"| node_exchange
node_exchange -->|"reads and writes"| node_entries_store
node_entry -->|"uses date rules"| node_dates
node_upcoming -->|"calculates occurrences"| node_entry
node_csv -->|"converts rows"| node_entry
node_entries_store -->|"serializes entries"| node_entry

click node_windows_tray "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/TrayApp.cs"
click node_windows_list "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/MainWindow.xaml.cs"
click node_windows_calendar "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/CalendarView.cs"
click node_windows_events "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/EventsWindow.cs"
click node_windows_tags "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/TagsWindow.cs"
click node_windows_settings "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/SettingsWindow.cs"
click node_mobile_main "https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/MainPage.xaml.cs"
click node_mobile_editor "https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/EditorPage.xaml.cs"
click node_mobile_calendar "https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/CalendarPage.cs"
click node_mobile_settings "https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/SettingsPage.cs"
click node_mobile_reminders "https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/Platforms/Android/Reminders.cs"
click node_mobile_update "https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/Platforms/Android/SelfUpdate.cs"
click node_entry "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/Entry.cs"
click node_dates "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/EventDate.cs"
click node_upcoming "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/Upcoming.cs"
click node_reminder_text "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/ReminderText.cs"
click node_catalogs "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/TagCatalog.cs"
click node_settings_model "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/AppSettings.cs"
click node_entries_store "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/EntryStorage.cs"
click node_csv "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/EntryCsv.cs"
click node_exchange "https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/EntryExchange.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_windows_tray,node_windows_list,node_windows_calendar,node_windows_events,node_windows_tags,node_windows_settings,node_user toneBlue
class node_mobile_main,node_mobile_editor,node_mobile_calendar,node_mobile_settings,node_mobile_reminders,node_mobile_update toneAmber
class node_entry,node_dates,node_upcoming,node_reminder_text,node_catalogs,node_settings_model toneMint
class node_entries_store,node_csv,node_exchange toneRose
class node_android,node_release_service toneIndigo
```

## Components

### Windows app

- [Tray app](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/TrayApp.cs): `src/BirthdayChecker.App/TrayApp.cs`
- [Entry list](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/MainWindow.xaml.cs): `src/BirthdayChecker.App/MainWindow.xaml.cs`
- [Calendar](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/CalendarView.cs): `src/BirthdayChecker.App/CalendarView.cs`
- [Events editor](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/EventsWindow.cs): `src/BirthdayChecker.App/EventsWindow.cs`
- [Tags editor](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/TagsWindow.cs): `src/BirthdayChecker.App/TagsWindow.cs`
- [Settings](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.App/SettingsWindow.cs): `src/BirthdayChecker.App/SettingsWindow.cs`

### Android app

- [Mobile list](https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/MainPage.xaml.cs): `mobile/BirthdayChecker.Mobile/MainPage.xaml.cs`
- [Entry editor](https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/EditorPage.xaml.cs): `mobile/BirthdayChecker.Mobile/EditorPage.xaml.cs`
- [Calendar](https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/CalendarPage.cs): `mobile/BirthdayChecker.Mobile/CalendarPage.cs`
- [Settings](https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/SettingsPage.cs): `mobile/BirthdayChecker.Mobile/SettingsPage.cs`
- [Notifications and widget](https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/Platforms/Android/Reminders.cs): `mobile/BirthdayChecker.Mobile/Platforms/Android/Reminders.cs`
- [Self-update](https://github.com/raptar212/birthday-checker/blob/main/mobile/BirthdayChecker.Mobile/Platforms/Android/SelfUpdate.cs): `mobile/BirthdayChecker.Mobile/Platforms/Android/SelfUpdate.cs`

### Shared domain

- [Entry model](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/Entry.cs): `src/BirthdayChecker.Core/Entry.cs`
- [Event dates](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/EventDate.cs): `src/BirthdayChecker.Core/EventDate.cs`
- [Occurrence calculation](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/Upcoming.cs): `src/BirthdayChecker.Core/Upcoming.cs`
- [Reminder formatting](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/ReminderText.cs): `src/BirthdayChecker.Core/ReminderText.cs`
- [Tags, events, columns](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/TagCatalog.cs): `src/BirthdayChecker.Core/TagCatalog.cs`
- [App settings](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/AppSettings.cs): `src/BirthdayChecker.Core/AppSettings.cs`

### Persistence and exchange

- [Entries file](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/EntryStorage.cs): `src/BirthdayChecker.Core/EntryStorage.cs`
- [CSV import/export](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/EntryCsv.cs): `src/BirthdayChecker.Core/EntryCsv.cs`
- [Cross-device exchange](https://github.com/raptar212/birthday-checker/blob/main/src/BirthdayChecker.Core/EntryExchange.cs): `src/BirthdayChecker.Core/EntryExchange.cs`

### Other components

- **User**
- **Android system**
- **Release service**

## Connections

- User → Tray app: opens
- Tray app → Entry list: opens list (evidence: `src/BirthdayChecker.App/TrayApp.cs`)
- Entry list → Calendar: opens calendar (evidence: `src/BirthdayChecker.App/MainWindow.xaml.cs`)
- Entry list → Events editor: edits events (evidence: `src/BirthdayChecker.App/MainWindow.xaml.cs`)
- Entry list → Tags editor: edits tags (evidence: `src/BirthdayChecker.App/MainWindow.xaml.cs`)
- Entry list → Settings: opens settings (evidence: `src/BirthdayChecker.App/MainWindow.xaml.cs`)
- Tray app → Entries file: loads entries (evidence: `src/BirthdayChecker.App/TrayApp.cs`)
- Tray app → Occurrence calculation: checks occurrences (evidence: `src/BirthdayChecker.App/TrayApp.cs`)
- Tray app → Reminder formatting: formats reminders (evidence: `src/BirthdayChecker.App/TrayApp.cs`)
- Tray app → App settings: reads settings (evidence: `src/BirthdayChecker.App/TrayApp.cs`)
- Entry list → Entries file: loads and saves (evidence: `src/BirthdayChecker.App/MainWindow.xaml.cs`)
- Entry list → CSV import/export: imports and exports (evidence: `src/BirthdayChecker.App/MainWindow.xaml.cs`)
- Calendar → Entry model: renders entries (evidence: `src/BirthdayChecker.App/CalendarView.cs`)
- Calendar → Tags, events, columns: reads event types (evidence: `src/BirthdayChecker.App/CalendarView.cs`)
- User → Mobile list: uses app
- Mobile list → Entry editor: edits entries (evidence: `mobile/BirthdayChecker.Mobile/MainPage.xaml.cs`)
- Mobile list → Calendar: opens calendar (evidence: `mobile/BirthdayChecker.Mobile/MainPage.xaml.cs`)
- Mobile list → Settings: opens settings (evidence: `mobile/BirthdayChecker.Mobile/MainPage.xaml.cs`)
- Mobile list → Entries file: loads entries (evidence: `mobile/BirthdayChecker.Mobile/MainPage.xaml.cs`)
- Mobile list → CSV import/export: imports and exports (evidence: `mobile/BirthdayChecker.Mobile/MainPage.xaml.cs`)
- Mobile list → Notifications and widget: checks reminders (evidence: `mobile/BirthdayChecker.Mobile/MainPage.xaml.cs`)
- Mobile list → Self-update: checks updates (evidence: `mobile/BirthdayChecker.Mobile/MainPage.xaml.cs`)
- Calendar → Entry model: renders entries (evidence: `mobile/BirthdayChecker.Mobile/CalendarPage.cs`)
- Calendar → Tags, events, columns: reads event types (evidence: `mobile/BirthdayChecker.Mobile/CalendarPage.cs`)
- Entry editor → Entry model: edits entries (evidence: `mobile/BirthdayChecker.Mobile/EditorPage.xaml.cs`)
- Entry editor → Tags, events, columns: reads tags (evidence: `mobile/BirthdayChecker.Mobile/EditorPage.xaml.cs`)
- Notifications and widget → Entries file: loads entries (evidence: `mobile/BirthdayChecker.Mobile/Platforms/Android/Reminders.cs`)
- Notifications and widget → Occurrence calculation: schedules checks (evidence: `mobile/BirthdayChecker.Mobile/Platforms/Android/Reminders.cs`)
- Notifications and widget → Reminder formatting: formats notice (evidence: `mobile/BirthdayChecker.Mobile/Platforms/Android/Reminders.cs`)
- Notifications and widget → Android system: posts notifications (evidence: `mobile/BirthdayChecker.Mobile/Platforms/Android/Reminders.cs`)
- Self-update → Release service: downloads release (evidence: `mobile/BirthdayChecker.Mobile/Platforms/Android/SelfUpdate.cs`)
- Self-update → Android system: installs package (evidence: `mobile/BirthdayChecker.Mobile/Platforms/Android/SelfUpdate.cs`)
- Mobile list → Cross-device exchange: shares entries
- Cross-device exchange → Entries file: reads and writes (evidence: `src/BirthdayChecker.Core/EntryExchange.cs`)
- Entry model → Event dates: uses date rules (evidence: `src/BirthdayChecker.Core/Entry.cs`)
- Occurrence calculation → Entry model: calculates occurrences (evidence: `src/BirthdayChecker.Core/Upcoming.cs`)
- CSV import/export → Entry model: converts rows (evidence: `src/BirthdayChecker.Core/EntryCsv.cs`)
- Entries file → Entry model: serializes entries (evidence: `src/BirthdayChecker.Core/EntryStorage.cs`)
