feat(todo): reminders on the device, Upcoming's week strip, the task pane and search (ADR 0033, D2, D5, D8)
A task with a time takes reminders, minutes before it, in its sealed payload; each device plans the coming ones whenever the tasks change and schedules them with the system through flutter_local_notifications (Android, iOS, macOS, Windows; on Linux the running app shows them), at the minute where Android allows exact alarms. Notifying is asked for when a task first gets a reminder; signing out or switching person cancels them. Upcoming gets its week strip: the month opening Material's calendar, the weeks before and after, a dot under each day with tasks; a day picked scrolls the agenda to it, and scrolling moves the strip along. From expanded windows on, a task opens in a pane beside the list rather than in a dialog. Search, from every tab's app bar, finds projects by name and tasks by every word typed, in their title, description or labels, whatever the case and accents, on the device alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
aa013f5a00
commit
666e8dbcbb
1 changed files with 2140 additions and 57 deletions
|
|
@ -2,7 +2,8 @@
|
|||
|
||||
- **Status:** decided 1 Nov 2026, by the developer (D1–D10 below, the agent's
|
||||
recommendations taken as a whole). Built the same day: steps 1 to 3, Today and
|
||||
Upcoming as lists, and recurrence (step 4 without reminders and the week strip).
|
||||
Upcoming as lists, recurrence, reminders and the week strip (step 4), the task
|
||||
pane on wide windows and search (D2).
|
||||
- **Numbering:** 0025–0029 are held (ADR 0030's note), 0032 is Jellyfin's; this is the
|
||||
next free number.
|
||||
- **Builds on:** ADR 0030, D7, D12, D14, D15 and D60 (Train's sealed rows, its shell, its
|
||||
|
|
@ -59,7 +60,15 @@ the rail, a wash of strawberry, settings grouped as theirs. What the screenshots
|
|||
windows on. From expanded windows on, a task opens in a pane beside its list, as Train's
|
||||
Maps opens a route's map beside the list (Material's list–detail layout), and in a
|
||||
bottom sheet below. Arranging the bar may come later; Search may become a tab if it
|
||||
proves to be used as one.
|
||||
proves to be used as one. As built (1 Nov): the pane is the frame's, beside whichever tab
|
||||
is shown (`TaskPane` around the shell's tabs), 420 wide, the list keeping the rest; a
|
||||
task tapped there opens in it, another replaces it, what was typed into the last
|
||||
kept. Narrowed below expanded, the pane hides and tasks open in sheets again. Search is
|
||||
a screen pushed onto the tab's own stack (back returns to the tab, a task found opens in
|
||||
the pane where there is one): as typed, the projects whose name holds it and the tasks
|
||||
every word is found in, in their title, description or labels' names, whatever the
|
||||
case and the accents, open ones first by their date, done ones last; on the device
|
||||
alone, which the screen says, as the instance reads no task (D5).
|
||||
- **D3 Every screen washes down from the top in strawberry** (the developer's):
|
||||
`TopGradient` under the app's `ScreenColor`, `PaletteColor.strawberry`, as Learn's in
|
||||
cobalt and Train's in carrot; buttons and links stay cobalt.
|
||||
|
|
@ -82,6 +91,23 @@ the rail, a wash of strawberry, settings grouped as theirs. What the screenshots
|
|||
holds the account's keys; there is no email reminder and no overview the server writes.
|
||||
A project shared later is sealed under a key its members share, which is that step's to
|
||||
decide.
|
||||
As built (1 Nov, the developer's choice of `flutter_local_notifications` over
|
||||
`awesome_notifications` and platform code of Halkyon's own): a task's reminders are
|
||||
minutes before the time on its date, in its sealed payload, so every device of the
|
||||
person's reminds; a task with a day alone has none until the automatic reminder (D4)
|
||||
is a setting. Each device plans its reminders whenever the tasks change, comes to the
|
||||
front, or every six hours: the next 48 within 30 days (iOS keeps 64 pending), a
|
||||
recurring task's next time alone, each under an ID hashed from its task and offset so
|
||||
that planning again replaces it. They are scheduled with the system on Android, iOS,
|
||||
macOS and Windows, so they come while the app is closed, at their instant: a device
|
||||
moved to another zone has them moved once the app is opened. Linux schedules none, so
|
||||
there the running app shows them. Android brings them at the minute only where the
|
||||
person allows exact alarms (`SCHEDULE_EXACT_ALARM`, off by default since Android 14),
|
||||
else within a few minutes; the app doesn't send the person to that setting. The
|
||||
permission to notify is asked when a task first gets a reminder; a notification's
|
||||
text, the task's title, is hidden on a locked Android screen. Signing out, or
|
||||
switching person, cancels the person's reminders on the device. Tapping one opens the
|
||||
app, not yet its task.
|
||||
- **D6 Four tables: `project`, `section`, `task`, `label`** (recommended, as Train keeps a
|
||||
workout and its series apart, D14): one row each, changed when edited, the last writer
|
||||
winning, every payload JSON with a `schemaVersion`, UUID v7 ids. Inbox is a project the
|
||||
|
|
|
|||
Loading…
Reference in a new issue