Brian Duffy

Work

Plainly

In development

A daily planner for people with ADHD, built on the principle that a missed day is information rather than failure.

Summary

A calm, private daily planner for adults with ADHD and related executive-function difficulties. Routines, tasks and notes, done properly. No streaks, no confetti, no mascot, no guilt mechanics, and your data on your own device by default.

Built solo. Shipped as a personal tool first and now being taken to market.

The problem

Almost every productivity app is built on shame. Streaks that break, counters that reset, a character who is disappointed in you. For the user this is aimed at, that is not motivating – it is the exact mechanism that gets the app deleted in week three.

Removing the shame is easy to say and hard to build, because it is not one feature. It is a constraint on every single thing in the product: counts that only go up, no red anywhere, notifications that state a fact once and never nag, and copy that reads like a well-made tool rather than a therapist.

What I built

All of it. Local-first data, the routine and task model with versioning, the calendar and statistics views, notes, categories, optional cloud sync with row-level security, the installable mobile app, and the reminder system.

Reminders were the hardest part and the design is worth stating. Notifications are opt-in per item rather than per type, each carrying its own time, because a per-type default silently eats reminders the user meant to get. Items sharing a time coalesce into one notification, which is the only real defence against volume – “one per item per day” still lets fifteen through. And completion suppression happens in the scheduler by not sending at all, rather than in the service worker by receiving and staying silent, because a worker that shows nothing gets the browser’s own “this site has been updated in the background” notice displayed in its place.

Technical detail

Local-first: IndexedDB on the client, fully functional offline with no account, permanently, including on the free tier. Sync is optional and additive rather than assumed. Cloud sync is Supabase over HTTPS with row-level security and multi-user-per-device safety.

Shipped as a static bundle on Cloudflare Pages, a Tauri desktop application, and an installable progressive web app. Push payloads carry no titles, because they pass through third-party push services on the way to the device.