# antonycorbett/onlyt architecture

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

- Interactive diagram: https://gitdiagram.com/antonycorbett/onlyt
- Repository: https://github.com/antonycorbett/onlyt

## Overview

OnlyT is a Windows meeting-timer application for running talks against a meeting schedule, with manual, file-based, and automatic operating modes. Operators configure schedules and timer behavior, start or adjust talk timers, and display timer/countdown windows; the app also provides reminders, bells, reports, and a web API for remote control and clock access. The graph emphasizes runtime stages and the service layer. Some capabilities are documented by the tree and README but their implementations were not sampled, so unsupported internal links are omitted.

Main entry points: [`OnlyT/App.xaml.cs`](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/App.xaml.cs) (App startup), [`OnlyT/Services/TalkSchedule/TalkScheduleService.cs`](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/TalkSchedule/TalkScheduleService.cs) (Schedule service), [`OnlyT/Services/Options/OptionsService.cs`](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Options/OptionsService.cs) (Options service), [`OnlyT/Windows/MainWindow.xaml.cs`](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Windows/MainWindow.xaml.cs) (Main window)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Application runtime"]
  node_app["App startup<br/>[App.xaml.cs]"]
  node_main["Main window<br/>[MainWindow.xaml.cs]"]
  node_operator_ui["Operator page"]
  node_settings_ui["Settings page"]
end

subgraph group_schedule["Meeting schedule"]
  node_schedule_service["Schedule service"]
  node_schedule_modes["Schedule modes"]
  node_auto_feed["Automatic meeting feed<br/>[TimesFeed.cs]"]
  node_talk_model["Talk schedule items"]
end

subgraph group_timing["Timing and displays"]
  node_timer["Talk timer service"]
  node_adaptive["Adaptive timing"]
  node_countdown["Countdown timer"]
  node_timer_display["Timer display"]
  node_countdown_display["Countdown display"]
  node_clock["Analogue clock control<br/>[ClockControl.cs]"]
  node_reminders["Reminders<br/>[ReminderService.cs]"]
  node_bells["Bell service<br/>[BellService.cs]"]
end

subgraph group_support["Settings and reporting"]
  node_options["Options service<br/>[OptionsService.cs]"]
  node_settings_data["Persisted settings<br/>[Options.cs]"]
  node_timing_store["Timing data store"]
  node_local_db[("Local report database<br/>[LocalData.cs]")]
  node_report["PDF timing report<br/>[PdfTimingReport.cs]"]
end

subgraph group_remote["Remote access"]
  node_http_server["HTTP server<br/>[HttpServer.cs]"]
  node_timer_api["Timer API"]
  node_system_api["System API"]
  node_web_client["Web clock client<br/>[app.js]"]
end

node_operator(("Meeting operator"))
node_web_user(("Remote user"))

node_operator -.->|"operates"| node_main
node_app -->|"registers"| node_timer
node_app -->|"registers"| node_schedule_service
node_app -->|"registers"| node_options
node_app -->|"registers"| node_timer_display
node_app -->|"registers"| node_countdown_display
node_app -->|"registers"| node_timing_store
node_app -->|"registers"| node_reminders
node_app -->|"registers"| node_bells
node_main -.->|"hosts"| node_operator_ui
node_main -.->|"hosts"| node_settings_ui
node_schedule_service -.->|"uses modes"| node_schedule_modes
node_schedule_modes -.->|"uses feed"| node_auto_feed
node_schedule_service -->|"provides items"| node_talk_model
node_timer -.->|"queries schedule"| node_schedule_service
node_adaptive -->|"queries schedule"| node_schedule_service
node_adaptive -->|"reads settings"| node_options
node_countdown_display -->|"reads settings"| node_options
node_countdown_display -.->|"uses trigger"| node_countdown
node_options -->|"loads and saves"| node_settings_data
node_options -.->|"supplies settings"| node_settings_ui
node_timing_store -->|"stores timing data"| node_local_db
node_timing_store -.->|"generates report"| node_report
node_web_user -.->|"opens clock"| node_web_client
node_web_client -.->|"requests data"| node_http_server
node_http_server -.->|"dispatches requests"| node_timer_api
node_timer_api -->|"controls timer"| node_timer
node_timer_api -->|"reads schedule"| node_schedule_service
node_system_api -->|"reads settings"| node_options

click node_app "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/App.xaml.cs"
click node_main "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Windows/MainWindow.xaml.cs"
click node_operator_ui "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Windows/OperatorPage.xaml.cs"
click node_settings_ui "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Windows/SettingsPage.xaml.cs"
click node_schedule_service "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/TalkSchedule/TalkScheduleService.cs"
click node_schedule_modes "https://github.com/antonycorbett/onlyt/tree/master/OnlyT/Services/TalkSchedule"
click node_auto_feed "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/MeetingTalkTimesFeed/TimesFeed.cs"
click node_talk_model "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Models/TalkScheduleItem.cs"
click node_timer "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Timer/TalkTimerService.cs"
click node_adaptive "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Timer/AdaptiveTimerService.cs"
click node_countdown "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/CountdownTimer/CountdownTimerTriggerService.cs"
click node_timer_display "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/OutputDisplays/TimerOutputDisplayService.cs"
click node_countdown_display "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/OutputDisplays/CountdownOutputDisplayService.cs"
click node_clock "https://github.com/antonycorbett/onlyt/blob/master/OnlyT.AnalogueClock/ClockControl.cs"
click node_reminders "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Reminders/ReminderService.cs"
click node_bells "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Bell/BellService.cs"
click node_options "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Options/OptionsService.cs"
click node_settings_data "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Options/Options.cs"
click node_timing_store "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Report/LocalTimingDataStoreService.cs"
click node_local_db "https://github.com/antonycorbett/onlyt/blob/master/OnlyT.Report/Database/LocalData.cs"
click node_report "https://github.com/antonycorbett/onlyt/blob/master/OnlyT.Report/Pdf/PdfTimingReport.cs"
click node_http_server "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/WebServer/HttpServer.cs"
click node_timer_api "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/WebServer/Controllers/TimersApiController.cs"
click node_system_api "https://github.com/antonycorbett/onlyt/blob/master/OnlyT/WebServer/Controllers/SystemApiController.cs"
click node_web_client "https://github.com/antonycorbett/onlyt/blob/master/OnlyT.WebClient/wwwroot/app.js"

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_main,node_operator_ui,node_settings_ui,node_web_user toneBlue
class node_schedule_service,node_schedule_modes,node_auto_feed,node_talk_model toneAmber
class node_timer,node_adaptive,node_countdown,node_timer_display,node_countdown_display,node_clock,node_reminders,node_bells toneMint
class node_options,node_settings_data,node_timing_store,node_local_db,node_report toneRose
class node_http_server,node_timer_api,node_system_api,node_web_client,node_operator toneIndigo
```

## Components

### Application runtime

- [App startup](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/App.xaml.cs): `OnlyT/App.xaml.cs`
- [Main window](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Windows/MainWindow.xaml.cs): `OnlyT/Windows/MainWindow.xaml.cs`
- [Operator page](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Windows/OperatorPage.xaml.cs): `OnlyT/Windows/OperatorPage.xaml.cs`
- [Settings page](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Windows/SettingsPage.xaml.cs): `OnlyT/Windows/SettingsPage.xaml.cs`

### Meeting schedule

- [Schedule service](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/TalkSchedule/TalkScheduleService.cs): `OnlyT/Services/TalkSchedule/TalkScheduleService.cs`
- [Schedule modes](https://github.com/antonycorbett/onlyt/tree/master/OnlyT/Services/TalkSchedule): `OnlyT/Services/TalkSchedule`
- [Automatic meeting feed](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/MeetingTalkTimesFeed/TimesFeed.cs): `OnlyT/MeetingTalkTimesFeed/TimesFeed.cs`
- [Talk schedule items](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Models/TalkScheduleItem.cs): `OnlyT/Models/TalkScheduleItem.cs`

### Timing and displays

- [Talk timer service](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Timer/TalkTimerService.cs): `OnlyT/Services/Timer/TalkTimerService.cs`
- [Adaptive timing](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Timer/AdaptiveTimerService.cs): `OnlyT/Services/Timer/AdaptiveTimerService.cs`
- [Countdown timer](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/CountdownTimer/CountdownTimerTriggerService.cs): `OnlyT/Services/CountdownTimer/CountdownTimerTriggerService.cs`
- [Timer display](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/OutputDisplays/TimerOutputDisplayService.cs): `OnlyT/Services/OutputDisplays/TimerOutputDisplayService.cs`
- [Countdown display](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/OutputDisplays/CountdownOutputDisplayService.cs): `OnlyT/Services/OutputDisplays/CountdownOutputDisplayService.cs`
- [Analogue clock control](https://github.com/antonycorbett/onlyt/blob/master/OnlyT.AnalogueClock/ClockControl.cs): `OnlyT.AnalogueClock/ClockControl.cs`
- [Reminders](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Reminders/ReminderService.cs): `OnlyT/Services/Reminders/ReminderService.cs`
- [Bell service](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Bell/BellService.cs): `OnlyT/Services/Bell/BellService.cs`

### Settings and reporting

- [Options service](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Options/OptionsService.cs): `OnlyT/Services/Options/OptionsService.cs`
- [Persisted settings](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Options/Options.cs): `OnlyT/Services/Options/Options.cs`
- [Timing data store](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/Services/Report/LocalTimingDataStoreService.cs): `OnlyT/Services/Report/LocalTimingDataStoreService.cs`
- [Local report database](https://github.com/antonycorbett/onlyt/blob/master/OnlyT.Report/Database/LocalData.cs): `OnlyT.Report/Database/LocalData.cs`
- [PDF timing report](https://github.com/antonycorbett/onlyt/blob/master/OnlyT.Report/Pdf/PdfTimingReport.cs): `OnlyT.Report/Pdf/PdfTimingReport.cs`

### Remote access

- [HTTP server](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/WebServer/HttpServer.cs): `OnlyT/WebServer/HttpServer.cs`
- [Timer API](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/WebServer/Controllers/TimersApiController.cs): `OnlyT/WebServer/Controllers/TimersApiController.cs`
- [System API](https://github.com/antonycorbett/onlyt/blob/master/OnlyT/WebServer/Controllers/SystemApiController.cs): `OnlyT/WebServer/Controllers/SystemApiController.cs`
- [Web clock client](https://github.com/antonycorbett/onlyt/blob/master/OnlyT.WebClient/wwwroot/app.js): `OnlyT.WebClient/wwwroot/app.js`

### Other components

- **Meeting operator**
- **Remote user**

## Connections

- Meeting operator → Main window: operates
- App startup → Talk timer service: registers (evidence: `OnlyT/App.xaml.cs`)
- App startup → Schedule service: registers (evidence: `OnlyT/App.xaml.cs`)
- App startup → Options service: registers (evidence: `OnlyT/App.xaml.cs`)
- App startup → Timer display: registers (evidence: `OnlyT/App.xaml.cs`)
- App startup → Countdown display: registers (evidence: `OnlyT/App.xaml.cs`)
- App startup → Timing data store: registers (evidence: `OnlyT/App.xaml.cs`)
- App startup → Reminders: registers (evidence: `OnlyT/App.xaml.cs`)
- App startup → Bell service: registers (evidence: `OnlyT/App.xaml.cs`)
- Main window → Operator page: hosts
- Main window → Settings page: hosts
- Schedule service → Schedule modes: uses modes
- Schedule modes → Automatic meeting feed: uses feed
- Schedule service → Talk schedule items: provides items
- Talk timer service → Schedule service: queries schedule
- Adaptive timing → Schedule service: queries schedule (evidence: `OnlyT/Services/Timer/AdaptiveTimerService.cs`)
- Adaptive timing → Options service: reads settings (evidence: `OnlyT/Services/Timer/AdaptiveTimerService.cs`)
- Countdown display → Options service: reads settings (evidence: `OnlyT/Services/OutputDisplays/CountdownOutputDisplayService.cs`)
- Countdown display → Countdown timer: uses trigger
- Options service → Persisted settings: loads and saves (evidence: `OnlyT/Services/Options/OptionsService.cs`)
- Options service → Settings page: supplies settings
- Timing data store → Local report database: stores timing data (evidence: `OnlyT/Services/Report/LocalTimingDataStoreService.cs`)
- Timing data store → PDF timing report: generates report
- Remote user → Web clock client: opens clock
- Web clock client → HTTP server: requests data
- HTTP server → Timer API: dispatches requests
- Timer API → Talk timer service: controls timer (evidence: `OnlyT/WebServer/Controllers/TimersApiController.cs`)
- Timer API → Schedule service: reads schedule (evidence: `OnlyT/WebServer/Controllers/TimersApiController.cs`)
- System API → Options service: reads settings (evidence: `OnlyT/WebServer/Controllers/SystemApiController.cs`)
