Project · Time and databases: a time tracker, a pomodoro, a database

TimeTracker times a task: a field names it, Start or Enter starts the
clock and Stop ends it, the running time counting up by the executor's
clock; the entries sit under it in hours and minutes with their total.
The owner keeps what runs and what was spent, and a blank name starts
nothing.

PomodoroTimer runs focus, a short break, and after the last round a
long one. A ring counts each phase down around the time left, dots
count the rounds, Pause banks the time gone, and a phase that runs out
moves on, waits for Start, and reaches the owner through window.defer.
motion::ProgressRing gains a size and content inside, its stroke kept
at the theme ring's weight, the content outside the per-turn glide.

DatabaseView shows tasks five ways, switched from a strip that scrolls
when narrow: a table, a board by status whose moves hand on the new
status, a gallery of issue cards, a month calendar by due day, and a
timeline from start to due, which counts the records without dates.
Task gains a start day.

Along the way: table rows, groups and details fill with min_w_full, so
they stretch in the table's column and fill a virtual list alike;
before, a table in a measured column drew rows at their words' width.
The gallery script logs each probe it aims at.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZacharyZhang-NYandClaude Opus 5.5 committed 2026-09-27 06:11:38 -04:00
1 parent 28973fe1d2
commit 6377f926c8
19 files changed
+1294 -23

No files matched your search

+9 -1
View File
@@ -172,7 +172,7 @@ impl Person {
}
}
/// A piece of work: its key, its issue's name if it has one, what it is, where it stands, how urgent, when it is due, who has it, and its labels.
/// A piece of work: its key, its issue's name if it has one, what it is, where it stands, how urgent, when it starts and is due, who has it, and its labels.
#[derive(Clone, Debug, PartialEq)]
pub struct Task {
pub key: SharedString,
@@ -180,6 +180,7 @@ pub struct Task {
pub title: SharedString,
pub status: Status,
pub priority: Priority,
pub start: Option<Date>,
pub due: Option<Date>,
pub assignee: Option<Person>,
pub labels: Vec<Label>,
@@ -193,6 +194,7 @@ impl Task {
title: title.into(),
status: Status::Todo,
priority: Priority::None,
start: None,
due: None,
assignee: None,
labels: Vec::new(),
@@ -214,6 +216,12 @@ impl Task {
self
}
/// The day work begins, for a timeline.
pub fn starts(mut self, day: Date) -> Self {
self.start = Some(day);
self
}
pub fn due(mut self, day: Date) -> Self {
self.due = Some(day);
self