Tasks
Tasks flow through three stages — Backlog, In Progress, and Complete — with a hard cap of 6 active tasks to enforce focus.
Task Limit
You can have at most 6 non-completed tasks (backlog + in-progress combined). The + New Task button is disabled when the limit is reached.
Views
Toggle between two layouts, persisted to localStorage:
| View | Description |
|---|---|
| List | Tab panels for Backlog, In Progress, Complete. Each tab shows its count badge. |
| Kanban | Full board with drag-and-drop between columns via KanbanBoard |
Creating Tasks
Click + New Task to create an inline task. The template pre-fills dueDate to 4 days from now and forces the Backlog tab active. Fields:
- Title, description, due date, priority (Urgent / High / Medium / Low), tags, assignee
- Optional: link to a Goal (adds
goalIdto the task)
Tasks can also be created from the AI chat: "Add a task to deploy the API by Thursday."
Tabs
| Tab | Shows |
|---|---|
| Backlog (N) | tasks not yet started |
| In Progress (N) | tasks being worked on |
| Complete (N) | finished tasks, with a Show All toggle to reveal older completions |
Arrow keys (← →) switch between tabs when no input is focused.
Filtering
Click the filter icon to reveal the filter bar:
| Filter | Type | Options |
|---|---|---|
| Priority | chip toggles | Urgent, High, Medium, Low |
| Due date | dropdown menu | All, Today, This Week, Overdue |
| Tags | chip toggles | from existing task tags |
Filters are applied sequentially: priority array → assignee substring → due-date bucket → tags array. A Clear all chip resets everything.
Sorting
| Mode | Behavior |
|---|---|
| Default | server order |
| Recently Worked | sorted by taskTimeService.getAllLastWorked() timestamps |
Continue Where You Left Off
Below the tabs, a horizontal scroll strip shows chips for your 3 most recently worked active tasks (via taskTimeService.getRecentTasks(3)). Click a chip to jump to that task.
Time Tracking
Click the timer icon on any task to start tracking time. The elapsed time syncs to the server every 60 seconds via goSvc.syncTaskTime(taskId, elapsed, date) and is also saved to localStorage for offline resilience.
Task Details
Click any task to expand its detail view with:
- Editable title, description (rich text, DOMPurify-sanitized), priority, due date, tags
- Time tracking controls and history
- Update history timeline
- Linked goal chip
- AI suggestions for subtasks and due dates
Responsive Layout
A ResizeObserver tracks available width and collapses UI elements progressively — labels, count badges, directional buttons, and the "Show All" toggle hide at narrower widths.