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

+16
View File
@@ -11,6 +11,7 @@ use jiff::{Timestamp, ToSpan, civil::Date, tz::TimeZone};
mod boards;
mod plans;
mod tasks;
mod time;
use super::Page;
use crate::{script::Step, ui::keep};
@@ -42,6 +43,14 @@ const SCRIPT: &[Step] = &[
Step::UpAt("project-board", 360.0, 110.0),
Step::Wait(300),
Step::Shot("board-dropped"),
Step::DownAt("project-database", 105.0, 17.0),
Step::UpAt("project-database", 105.0, 17.0),
Step::Wait(300),
Step::Shot("database-board"),
Step::DownAt("project-database", 349.0, 17.0),
Step::UpAt("project-database", 349.0, 17.0),
Step::Wait(300),
Step::Shot("database-timeline"),
];
/// What a demo says it did, under it.
@@ -100,12 +109,14 @@ fn work(today: Date) -> Vec<Task> {
.issue(IssueId::new("ARC", 41))
.status(Status::InProgress)
.priority(Priority::Urgent)
.starts(day(-9))
.due(day(-1))
.assignee(who("ana"))
.label(tag("client")),
Task::new("samples", "Order plaster samples")
.issue(IssueId::new("ARC", 44))
.priority(Priority::High)
.starts(day(-3))
.due(day(0))
.assignee(who("ben"))
.label(tag("budget")),
@@ -113,6 +124,7 @@ fn work(today: Date) -> Vec<Task> {
.issue(IssueId::new("ARC", 38))
.status(Status::InReview)
.priority(Priority::Medium)
.starts(day(-5))
.due(day(3))
.assignee(who("chloe"))
.label(tag("site"))
@@ -125,6 +137,7 @@ fn work(today: Date) -> Vec<Task> {
.issue(IssueId::new("ARC", 29))
.status(Status::Done)
.priority(Priority::Medium)
.starts(day(-16))
.due(day(-4))
.assignee(who("dev"))
.label(tag("site")),
@@ -152,5 +165,8 @@ fn render(window: &mut Window, cx: &mut App) -> AnyElement {
.child(plans::burndown(cx))
.child(plans::milestones(cx))
.child(plans::workload(cx))
.child(time::tracker(window, cx))
.child(time::pomodoro(window, cx))
.child(time::database(window, cx))
.into_any_element()
}