Goals & OKRs
Set objectives with measurable key results, track progress visually, and let task completions auto-advance your goals.
Dashboard
The top of the Goals page shows summary cards:
| Card | Value |
|---|---|
| Active | count of goals with status active |
| Completed | count of goals with status completed |
| Avg Progress | mean progress % across all goals |
| Overdue | count of goals past their target date (red, shown only when > 0) |
Creating a Goal
Click New Goal to open the dialog.
| Field | Required | Notes |
|---|---|---|
| Objective (title) | yes | disables Save when empty |
| Description | no | multiline |
| Target Date | no | date picker; drives the "days remaining" chip |
Key Results
Add key results manually via + Add, or click AI Suggest to auto-generate measurable KRs from your objective title and description. Each key result has:
| Property | Default |
|---|---|
| Title | empty |
| Target | 100 |
| Current | 0 |
AI Suggest calls goSvc.suggestKeyResults(title, description) and populates the form with the returned suggestions.
Goal Cards
Each goal is rendered as a card with:
- ProgressRing — SVG circular indicator, color-coded by status
- Status toggle — cycles
active → paused → completed → active; transitioning tocompletedforces progress to 100% - Title — strikethrough when completed
- Chips — linked task count (
done/total tasks), days remaining (red if past due, amber if ≤ 7 days, default otherwise) - Key Results — indented list with title,
current/targetlabel, LinearProgress bar (green at 100%, blue otherwise), and a + increment button
Progress Calculation
Overall goal progress is the mean of per-KR completion percentages:
progress = round((Σ min(current/target, 1)) / krCount × 100)
Clicking + on a key result increments current by 1 (capped at target) and recalculates progress immediately.
Status Groups
Goals are grouped by status: Active, Paused, Completed. Each group header is collapsible. Active goals are sorted ascending by progress (lowest first — the ones that need the most work appear at the top).
| Status | Color | Label |
|---|---|---|
| active | #3b82f6 | In Progress |
| paused | #f59e0b | Paused |
| completed | #10b981 | Completed |
Linked Tasks
Each goal card shows a task count chip (done/total tasks). Task counts are fetched per-goal via goSvc.listTasksByGoal(goalId). When a linked task is completed, the backend auto-increments the associated key result progress.
Deleting Goals
Click the delete icon on any card. A window.confirm dialog asks for confirmation before calling goSvc.deleteGoal(id).