feat: add built-in Kanban board to web UI#42
feat: add built-in Kanban board to web UI#42chetan-guevara wants to merge 1 commit intomoazbuilds:masterfrom
Conversation
Adds a three-column Kanban board (To Do / In Progress / Done) directly into the ClaudeClaw web UI with no external server, iframe, or hardcoded localhost URLs. Board state persists to .claude/claudeclaw/kanban.json via new GET/POST /api/kanban endpoints. Includes tab navigation between Dashboard and Kanban views, an add-task modal, clear-done action, and 10-second polling for live agent-driven updates.
- Kanban board with Todo/In Progress/Done columns - Persistent storage via /api/kanban endpoints - Task creation modal, drag-and-drop ready - Integrated as third tab alongside Dashboard and Chat Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
TerrysPOV
left a comment
There was a problem hiding this comment.
This is a useful addition, but I still see a blocking correctness issue before merge:
-
The current Kanban persistence flow is unsafe for concurrent updates. POST /api/kanban blindly overwrites the entire board with whatever JSON the browser sends, and the browser is posting a stale in-memory snapshot of kanbanData. With polling, multiple tabs, or agent-driven updates, it is very easy to lose changes through last-write-wins clobbering. This needs narrower mutation endpoints or some kind of version / merge protection rather than whole-board replacement.
-
I also checked the linked commit 01bb65d that was referenced as part of this work. That exact commit is not present in the PR branch history, although parts of its changes may have been reworked into the branch. If that commit is intended to address earlier integration concerns, please make that explicit in this PR branch by either rebasing/cherry-picking the missing pieces clearly or pointing to the exact diff/lines here that preserve the intended behavior.
I’d suggest:
- replace whole-board POST /api/kanban writes with narrower operations such as add task, move card, clear done, etc., or add versioned/merge-safe writes
- make sure the intended UI integration changes from the linked work are clearly present in this PR branch, not just in an external commit reference
- add automated coverage for:
- board initialization when kanban.json is missing or corrupt
- add task persistence
- clear-done behaviour
- concurrent update safety / no lost writes after refresh or polling
I was able to run bunx tsc --noEmit successfully in the PR worktree after installing local deps, but I didn’t find automated tests covering this Kanban persistence path. Please consider adding these in.
|
Hey @chetan-guevara — this is a great feature. We've decided it's a better fit for ClaudeClaw+ (our sister repo for heavier web UI features) where it pairs with the agent lifecycle events tab that's already there. Ported to TerrysPOV/ClaudeClaw-Plus#10. Your contribution is fully credited in the port — thank you for the clean architecture and the integration hook with PR #41. Closing this on the upstream side. |
Three-column board (To Do / In Progress / Done) as a native tab in the ClaudeClaw+ web UI. State persists to .claude/claudeclaw/kanban.json. Auto-refreshes every 10 seconds. Integrates with the existing Dashboard/Chat tab system. Exposes /api/kanban GET+POST endpoints backed by src/ui/services/kanban.ts (readKanban, writeKanban, addCardToColumn, moveCard helpers). The Kanban service is standalone but designed to pair with the agent lifecycle events tab (PR #41) already in ClaudeClaw-Plus for auto-tracking sub-agent activity. Ported from moazbuilds/claudeclaw#42. Co-authored-by: Chetan Nandakumar <chetan-guevara@users.noreply.github.com>
Summary
Adds a built-in Kanban board as a native tab in the ClaudeClaw web UI — no external server, no iframe, no configuration required. Task state is persisted to
.claude/claudeclaw/kanban.jsonalongside existing ClaudeClaw data.Features
+ Add taskbutton)Architecture
New service:
src/ui/services/kanban.tsHandles all reads/writes to
.claude/claudeclaw/kanban.json:readKanban()— reads the board, initialises missing columns gracefullywriteKanban(board)— persists to diskaddCardToColumn(column, card)— atomic addmoveCard(id, toColumn, patch?)— atomic move across columnsNew API endpoints in
server.tsGET /api/kanban— returns the full board JSONPOST /api/kanban— writes the full board JSONBoard data schema
{ "columns": { "todo": [], "in_progress": [], "done": [] } }Each card:
Note on agent auto-tracking
The kanban service is self-contained and works standalone. When combined with PR #41 (agent lifecycle tracking), the
server.tschat endpoint can calladdCardToColumn/moveCardto automatically track sub-agent activity — but this PR does not depend on #41 and can be merged independently.Test plan
http://127.0.0.1:4632, click the Kanban tabkanban.json.claude/claudeclaw/kanban.jsonis written correctly after each action