For Windows and macOS desktop users · The Task Widget That Stays Out of Your Way

DeskTasks

Your task list, pinned behind every window on the desktop.

DecisionPin the widget behind every window, not on top of them, and refuse attention: accountless, local-first, no dock icon.

Instead of a floating widget that notifies and badges.Cost: macOS can only float it like Stickies, and Windows needs a once-a-second z-order check.

Status
LiveHosted v1.3.1 line is frozen; v2 alpha runs locally
Ownership
Solo · product, design and engineering
Evidence
Tested: automated tests, no usage data
Checked
Last verified

A local-first desktop widget pinned behind every window, for Windows and macOS, with a companion phone app. Two release lines: a hosted v1.3 line (frozen Sep 2026) and a serverless v2 alpha.

Role
Solo Builder · Product & Engineering
Timeline
Aug 2026 – Sep 2026 (last commit 19 Sep 2026)
Team
Solo
My part
Everything: product, design, and engineering. Solo build (all commits authored by me).
Stack and tools5

Electron · JavaScript · IndexedDB · PWA · Supabase (v1.3 line only)

Three DeskTasks widget panels on a dark ground: the pinned task list, natural-language quick-add parsing a date, time and tag, and a filtered search.

TL;DR

Todo apps compete for your attention; DeskTasks refuses it. The widget sits at the bottom of the window stack, visible when you glance at your desktop and invisible while you work. Local-first and accountless, with a one-line quick-add parser and honest calendar import/export. The hosted v1.3.1 line syncs through opt-in Supabase and was frozen in Sep 2026; the main line (v2.0.0-alpha.9) replaces the server with a hub on your own Wi-Fi. Gate run on 15 Sep 2026: 531 logic, 206 sync and 271 end-to-end tests, zero failures.

0Failures at the 15 Sep 2026 release gate (531 logic, 206 sync, 271 e2e)
6Tagged releases (v1.1.0 to v1.3.1)
Chapters

Problem

Every task manager makes the same bet: to be used, it must be seen, so it floats, badges and notifies. Checking your tasks becomes another context switch.

The gap: a task list that is there when you glance at the desktop and gone while you work, with no window, dock icon or account to manage.

Users

Desktop users on Windows and macOS who keep a short running list and want it visible without it asking for attention. There was no user study behind DeskTasks; I built it for myself first. The plan came from one observation and one rule.

The desktop wallpaper is glanced at dozens of times a day without meaning to. A widget pinned behind every window inherits that attention without asking for it.

The rule: a local-first product is only trustworthy if it never loses a task and never quietly changes one. Never approximate.

Decision

The second decision came later, in September 2026: freeze the hosted Supabase line at v1.3.1 and move the main line to sync over the user's own Wi-Fi, with the widget itself acting as the hub. A local-first product that needs a hosted database to reach your phone was carrying a server it did not need. The Supabase path is frozen, not deleted, and still documented.

Trade-offs

Local-first, accountless. Data lives in one portable JSON file; the product is complete without a network.

Capture is one line. pay rent tomorrow 4pm !high #home every month becomes a titled, tagged, scheduled, prioritised, recurring task.

Never approximate. A calendar rule that cannot round-trip honestly imports as a clearly labelled single task or exports with an explaining note, instead of silently drifting.

OptionStatusWhy
Pin behind every window, z-order check once a secondChosenShipped. Survives Win+D. A workaround.
Wallpaper-layer reparenting as the defaultDeferredMore robust; the focus-loss trade-off needs a cleaner answer.
Native macOS rewriteRejectedWould have held the release. macOS shipped floating like Stickies instead, a documented limit.
Multiple concurrent timersRejectedOne timer, capped at 8 hours, banked when the task is ticked off.
Opt-in Supabase sync (v1.3 line)ChosenShipped first; frozen at v1.3.1 in Sep 2026, still documented.
Sync through a hub on the user's own Wi-Fi (v2 alpha)ChosenNo server to run or pay for; the widget is the hub.

What shipped

The panels in the header image (select it to open full size) show the pinned list, quick-add turning one line into a dated, timed and tagged task, and a filtered search.

Capture is one line; the parser reads date, time, priority, tag and recurrence out of it, so a task never needs a form. Reminders come as toast notifications with repeat nudges, a morning summary and an end-of-day recap. One timer runs at a time, and completion banks the time.

Two release lines exist side by side:

  • Hosted line, v1.3.1 (tags v1.3.0 and v1.3.1, 8 to 9 Sep 2026). Windows and macOS builds plus a companion PWA that syncs through Supabase when the user opts in. Frozen in Sep 2026. The hosted PWA is live at task-manager-one-sandy-94.vercel.app (HTTP 200 on 30 Sep 2026).
  • Main line, v2.0.0-alpha.9 (latest commit 19 Sep 2026). The same widget, but the phone app loads from the widget over the local network and syncs with no server at all.

Other shipped pieces: three import/export formats (.ics with RRULE, CSV with BOM, Markdown), zero telemetry, zero accounts, and a data file that is portable by hand. Widget and phone share one parser, so they cannot disagree about what "biweekly" means.

Under the hoodArchitecture and implementation

Single writer. The Electron main process owns all state: every mutation goes through IPC to one store, and the renderer re-renders from a single broadcast. UI and disk can never disagree, which is what makes crash recovery boring.

Storage. One portable JSON file with atomic writes (temp file, fsync, .bak, rename), 7 daily snapshots and automatic corruption recovery with a visible banner.

Parser. Relative times, ranges, day words and recurrence, including last friday of month and every N days after done.

Z-order. On Windows the widget is pinned with HWND_BOTTOM; a once-per-second check keeps it there through Win+D. A wallpaper-layer reparenting mode is more robust but trades focus. On macOS Electron offers no window level below normal, so DeskTasks floats like Stickies, and focus detection leans on a best-effort OS file, documented as fragile.

Links. Notes allow only http, https and mailto; file:, shell: and javascript: are refused outright.

Companion PWA. Vite, IndexedDB and a service worker, reusing the shared modules (parser, recurrence, dates, CSV). On the v1.3 line it syncs through a single Supabase records table when the user opts in; on the v2 alpha it is served by the widget's local hub over HTTPS after a QR pairing step.

Formats. .ics with RRULE, CSV with BOM, Markdown; UID-based dedupe on re-import. A "2nd Tuesday" rule the engine cannot represent, or "after done" recurrence with no calendar equivalent, imports as a labelled single task or exports with a note.

Validation

Reliability was tested rather than assumed. The acceptance gate recorded in the project roadmap ran on 15 Sep 2026, on the debug-sweep tree over commit 1feaa5a plus the hub branch (so before the last v2 alpha commits of 19 Sep), with zero failures:

  • Logic: 531 tests
  • Sync: 206 tests, plus 177 sync-transport tests
  • Companion PWA suites: list 20, store 202, editor 76
  • End-to-end: 271 tests that restart the real app to prove persistence and crash recovery, asserting on renderer state and on the bytes on disk

Those counts are from that dated run, not a promise about the next one.

Limits and next

  • No usage data. Zero telemetry means I cannot say how many people run DeskTasks. The evidence is that the product survives its own tests and that tagged builds shipped on two platforms.
  • The hosted line is frozen. v1.3.1 still works but is not the path to pick for a new setup; the v2 line is still an alpha.
  • Licence. package.json declares MIT, but the repository has no LICENSE file yet, and the repository is private.
  • Next bet: a code-signing certificate. Unsigned builds are the real adoption tax and matter more to first-run experience than the next feature.
  • Open question: whether wallpaper-layer reparenting can become the Windows default; its focus-loss trade-off needs a cleaner answer.

Credits

Solo build: product, design and engineering are mine, and every commit in the repository is authored by me. The repository is private, so this page links the hosted v1.3.1 PWA (task-manager-one-sandy-94.vercel.app) rather than the code.

  • Product

    ExperimentHub

    Self-hosted A/B testing with deterministic variant assignment.

    Decision: Let the statistics engine say no: return a sequential verdict such as keep running, not a bare p-value.

    Solo · product and architecture

    Local build · not deployedEvidence: Built

    ContinueSequential verdict at p = 0.0337 (synthetic demo)

  • Product

    Better-Half

    Cycle-aware daily guidance for long-distance couples.

    Decision: Enforce consent in the database, not the interface: every sharing choice maps to a row-level security policy.

    Solo · product and engineering

    PrivateEvidence: Tested

    575RLS policy checks (test suite)