Windows tray app for one-shot, repeating, and burst-interval reminders. Shows Windows toast notifications and persists reminders as local JSON.
I built it to practice layered .NET architecture on a tool I actually run at my desk. Simple "drink water every 30 minutes" reminders were harder to find than they should be, so I made one.
- One-shot reminders at a specific date and time
- Repeating reminders inside a daily window (including overnight windows such as 22:00 to 02:00)
- Burst sessions with short intervals, optional breaks, and cycle limits
- System tray icon with dashboard and quick add
- Optional sound with each toast
- JSON persistence under
%AppData%\ChronosDesk\reminders.json
- Windows 10 or later
- .NET 10 SDK to build from source
dotnet run --project ChronosDesk.Ui -c ReleaseThe app starts in the system tray. Double-click the icon to open the dashboard, or use the tray menu to add a reminder.
Release executable after build:
ChronosDesk.Ui\bin\Release\net10.0-windows10.0.17763.0\ChronosDesk.Ui.exe
dotnet test ChronosDesk.sln -c Release27 unit tests cover persistence, trigger-time logic, burst state transitions, and scheduler ticks. Details: testing.
Self-contained single-file Windows build:
.\publish.ps1Output:
ChronosDesk.Ui\bin\Release\net10.0-windows10.0.17763.0\win-x64\publish\ChronosDesk.Ui.exe
Four projects: ChronosDesk.Core (domain and scheduler), ChronosDesk.Infrastructure (JSON and Windows toasts), ChronosDesk.Ui (WPF and tray), and ChronosDesk.Core.Tests.
App.xaml.cs is the manual composition root: it wires the repository, notification service, and scheduler, then passes the scheduler into WPF windows by constructor.
More detail: architecture · known limitations
C# / .NET 10, WPF, WinForms tray icon, xUnit, System.Text.Json, Windows toast APIs
