Project Hub with Kanban board for task/idea tracking
| comps | ||
| data | ||
| public | ||
| src | ||
| .gitignore | ||
| eslint.config.mjs | ||
| next.config.ts | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.mjs | ||
| README.md | ||
| tsconfig.json | ||
Gantt Board
Task and sprint board built with Next.js + Zustand and file-backed API persistence.
Current Product Behavior
Data model and status rules
- Tasks use labels (
tags: string[]) and can have multiple labels. - There is no active
backlogstatus in workflow logic. - A task is considered in Backlog when
sprintIdis empty. - Current status values:
opentodoblockedin-progressreviewvalidatearchivedcanceleddone
- New tasks default to
status: open.
Labels
- Project selection UI for tasks was removed in favor of labels.
- You can add/remove labels inline in:
- New Task modal
- Task Detail modal
- Label entry supports:
- Enter/comma to add
- Existing-label suggestions
- Quick-add chips
- Case-insensitive de-duplication
Backlog drag and drop
Backlog view supports moving tasks between:
- Current sprint
- Other sprint sections
- Backlog
Status behavior on drop:
- Drop into any sprint section:
status -> open - Drop into backlog section:
status -> open sprintIdis set/cleared based on destination
Changes persist through store sync to data/tasks.json.
Kanban drag and drop
Kanban supports drag by visible left handle on each task card.
Columns:
To Docontains statuses:open,todoIn Progresscontains statuses:blocked,in-progress,review,validateDonecontains statuses:archived,canceled,done
Drop behavior:
- Drop on column body: applies that column's default status
To Do->openIn Progress->in-progressDone->done
- Drop on status chip target: applies exact status
- Drop on a task: adopts that task's exact status
During drag, the active target column shows expanded status drop zones for clarity.
Layout
- Left sidebar cards (Current Sprint and Labels quick view) were removed.
- Main board now uses full width for Kanban/Backlog views.
Persistence
- Client state is managed with Zustand.
- Persistence is done via
/api/tasks. - API reads/writes
data/tasks.json(single-file storage).
Run locally
npm install
npm run dev
Open http://localhost:3000.
Scripts
npm run dev
npm run build
npm run start
npm run lint
Notes
- You may see a Next.js warning about multiple lockfiles and inferred workspace root. This is non-blocking for local dev.