if​-remindererer


Summary

A 13 pixel tab sits at the top edge of the screen. Hovering it for 120 milliseconds rolls a panel down. On the left, a to-do list whose add field is already focused: type, press Enter, the task drops into place. Tick the box and it glows green and collapses away, with Ctrl+Z to bring it back for the next 10 seconds.

On the right, an unbounded note canvas. Middle drag to pan, scroll to zoom, double click for a text box. Text boxes carry bold, italic, underline, strikethrough, colour, highlight, size, bullets and numbering. Screenshots paste straight in. Rectangles, ellipses, lines and arrows draw on top, and an arrow dropped onto a text box stays attached to it. Canvases live in folders and save themselves 900 milliseconds after the last edit.

Nothing leaves the machine. No account, no sync, no network calls, no telemetry. One SQLite file under %LOCALAPPDATA% holds all of it.

Keys

Ctrl+Alt+R
Roll the panel down, or roll it back up
Ctrl+Shift+Alt+R
One line quick add, centred on screen. The panel never opens
Ctrl+Alt+V
Drop whatever is on the clipboard onto the current canvas

Build process

.NET 10 · WPF
Chosen over Electron for the cold start and over WinUI 3 for the borderless translucent window. Idle cost while hidden is nil: no timers, no rendering, the panel window is hidden rather than transparent. Published as one self-contained 60 MB executable so no runtime has to be present first.
Per arrangement placement
Panel position and size are stored against a SHA-256 of every monitor's EDID device id, resolution, DPI scale and virtual position. Undocking, changing resolution or closing the lid yields a different key, and the tab pulses amber until the panel is placed for that arrangement. Docking emits WM_DISPLAYCHANGE repeatedly for several seconds, so the watcher waits 1.8 seconds of quiet before moving anything.
Win32 interop
A real tool window at the screen edge receives the hover, rather than a WH_MOUSE_LL hook that would cost a callback on every pointer move and trip endpoint protection. RegisterHotKey for the three combinations, reporting refusals instead of failing quietly. SHQueryUserNotificationState keeps the panel hidden behind full screen apps. SM_REMOTESESSION drops the shadow and shortens animations over RDP. Geometry is applied in physical pixels throughout, because WPF's own units shift under mixed DPI.
Canvas engine
Written rather than borrowed. A scale and translate transform over a hosting canvas, so text stays vector sharp at any zoom. The dot grid is a single tiled DrawingBrush rather than thousands of drawn dots. Hit testing runs against the model in world coordinates, which gives thin lines a click tolerance. Rich text is a run based model serialised to JSON, converted to a FlowDocument only while a box is being edited.
SQLite in WAL mode
Tasks, canvases, images, layouts and settings in one file. Every canvas save keeps the previous copy, capped at 50 revisions and restorable from Settings. Pan and zoom persist without generating revisions.
Failure cases, deliberately
A hotkey already claimed (says so, offers a rebind), a second copy launching (mutex, wakes the first), Explorer restarting (re-asserts topmost), the display arrangement changing mid-session (debounced, then repositioned), a full screen app in front (hover suppressed, hotkey still works), the clipboard refusing a read, and a stored document that no longer parses (discarded with a log line rather than a crash).
Inno Setup 6
Per user install with no administrator prompt, an optional Run key entry for start with Windows, and an uninstaller that leaves the data folder alone.
Download for Windows

Windows 11 and Windows 10 build 19041 or newer, 64 bit. Unsigned, so SmartScreen may warn: choose More info, then Run anyway. Installs without administrator rights. Uninstall from Settings, Apps.