Desktop2023 to 2026
Azkari / Dhikr
One remembrance, every so often, on whichever screen you are at.
- Shipped
Desktop2023 to 2026
One remembrance, every so often, on whichever screen you are at.

In short
A remembrance reminder that has followed me onto every platform I use: a VS Code extension, a macOS app, a Windows tray app, a standalone Apple Watch app, and a Wear OS watch face companion. Each one is native, offline, and deliberately tiny.
The compartments
Built with
Where to find it
This started as a VS Code extension: a small notification during a coding session, dismissible with a keystroke, gone by itself after six seconds. It is the most-starred thing I have written, which says something about how many developers wanted exactly that and nothing more.
Since then it has gone everywhere I work: a macOS app, a Windows tray app in C# and WPF with zero NuGet dependencies, a standalone watchOS app that needs no iPhone companion, and a Wear OS version. The Windows build even ships a self-test flag that prints PASS/FAIL for its own logic.
The design constraint is the same on all five: it must never become an app you have to manage. Interval, list, and nothing else.
بدأ هذا إضافةً لـ VS Code: إشعار صغير أثناء جلسة برمجة، يُغلق بضغطة، ويختفي وحده بعد ست ثوانٍ. وهو أكثر ما كتبته نجومًا، وفي ذلك دلالة على عدد المطورين الذين أرادوا هذا بالضبط ولا شيء أكثر.
ومنذ ذلك الحين ذهب إلى كل مكان أعمل فيه: تطبيق macOS، وتطبيق شريط مهام لويندوز بـ C# وWPF بلا أي اعتمادية NuGet، وتطبيق watchOS مستقل لا يحتاج رفيقًا على iPhone، ونسخة Wear OS. بل تأتي نسخة ويندوز براية اختبار ذاتي تطبع نجاح/فشل لمنطقها.
قيد التصميم واحد في الخمسة: يجب ألا يصير تطبيقًا مضطرًا لإدارته. فاصل زمني، وقائمة، ولا شيء غير ذلك.
Results
Each one opens twice: what went wrong on the left, what I did on the right.
01
Problem
The whole value is frequency, but anything that steals focus while you are typing gets uninstalled within a day. A native system toast is too intrusive and stacks up in notification history.
What I did
Each platform interrupts as little as it can: a frameless transparent popup that fades in over all windows without taking focus or blocking clicks on desktop, a wrist tap on the watch, an editor notification in VS Code. It auto-dismisses, so ignoring it is a valid response.
02
Problem
A watch app that fires reminders all day and costs noticeable battery gets removed regardless of how good the reminders are. Extended runtime sessions and complications were the obvious route and the wrong one.
What I did
The watchOS build uses only system-scheduled local notifications plus opportunistic background refresh: no workout sessions, no complication, no network at all. Reminders survive a reboot and an app update without the user doing anything.
03
Problem
Writing the same tiny app five times in five languages is how side projects die. Every dependency upgrade multiplies by five.
What I did
Each build depends on almost nothing. The Windows version has zero NuGet packages: tray via in-box WinForms, JSON via System.Text.Json, startup via the registry, chime via SystemSounds. Nothing to upgrade means nothing to break.


Next project
assoli.siteMy previous portfolio: one animated page, driven by a command menu.Open it →افتحه ←Shelf
All projectsAll 40, in six compartments.