Parent
#44
What to build
Full category CRUD: create, rename, delete with guard, empty-category visibility toggle, and JIRA link on categories.
State machine: todoStore gains:
createCategory() — creates with a default name ("New Category") and random color, appended at the end
renameCategory(categoryId, name) — updates the name
setCategoryColor(categoryId, color) — updates the color
setCategoryJiraLink(categoryId, jiraLink) — sets/clears the JIRA link
deleteCategory(categoryId) — only succeeds if the category has zero items with status todo or in-progress. Returns error otherwise.
UI:
- "+" button at the top of the category list to create a new category
- Double-click a category header to rename (inline text input, Enter saves, Escape cancels)
- Right-click context menu on category header with "Delete" option (greyed out if category has active items). Delete shows a confirm dialog.
- Category JIRA link: if set, displays as a clickable ticker/number extracted from the URL. Edit via context menu or detail.
- Color picker (simple palette or hex input) in context menu.
- Empty categories toggle: a small toggle button somewhere at the top hides categories with zero active items (todo or in-progress). Categories with only done items still count as empty for this toggle.
Acceptance criteria
Blocked by
Parent
#44
What to build
Full category CRUD: create, rename, delete with guard, empty-category visibility toggle, and JIRA link on categories.
State machine:
todoStoregains:createCategory()— creates with a default name ("New Category") and random color, appended at the endrenameCategory(categoryId, name)— updates the namesetCategoryColor(categoryId, color)— updates the colorsetCategoryJiraLink(categoryId, jiraLink)— sets/clears the JIRA linkdeleteCategory(categoryId)— only succeeds if the category has zero items with statustodoorin-progress. Returns error otherwise.UI:
Acceptance criteria
bun fmt,bun lint,bun typecheckall passBlocked by