The kanban dashboard โ your local project UI
What you need: A populated project-state/ substrate with milestones.
The kanban dashboard is a local web application that renders the substrate as a visual interface. It reads project-state/ directly on every page load โ no database, no sync step, no import process. Change a YAML file and refresh the browser.
Start it
/project-kanban
Or equivalently:
Open the kanban
The skill starts a Next.js 15 dev server on port 3355 and opens your browser to http://localhost:3355.
Starting kanban dashboard...
โ next dev --port 3355
โ Ready on http://localhost:3355
Opened in browser.
The dashboard reads from whichever project-state/ directory exists in the current project root. It detects both project-state/ (standard) and .project-state/ (legacy dot-prefix) automatically.
Five views
Kanban
The default view. Milestones appear as cards in swim lanes by status:
- Not started โ milestones with
status: not_started - In progress โ milestones with
status: in_progress - At risk โ milestones where remaining work exceeds remaining time
- Complete โ milestones with
status: complete
Each card shows the milestone title, percent complete as a progress bar, target date, and owner. Cards in the at-risk lane are computed, not manually placed โ the dashboard compares percent_complete against the date window.
Dashboard
A single-page summary of project health:
- Current phase and phase preset
- Milestone summary (count by status, overall completion percentage)
- Risk register summary (count by severity, open vs mitigated)
- Recent activity (last 20 entries from
activity.ndjson) - Upcoming deadlines from the reporting matrix
Inventory
A searchable, sortable table of every entity in the substrate:
- Milestones with all fields
- Risks with likelihood/impact matrix
- Decisions with date and status
- Changes (log entries and change orders)
- Documents (inbox, references, published)
Each row links to the raw YAML file path for direct editing.
Reports
Lists all generated reports and their publication status:
- Weekly status reports
- Baseline report bundles
- Sprint retrospectives
- Blog posts
- Any artifact produced by a reporting matrix generator
Shows when each was last generated, which surface it was published to, and whether it's current or stale relative to the substrate.
Milestone detail
Click any milestone card to see its full record:
- All YAML fields rendered as a readable card
- Deliverable checklist with status indicators
- Technical progress history
- Activity log entries filtered to this milestone
- Related risks and decisions
No sync step
This is the key architectural decision. The dashboard has no database. It reads YAML, JSON, and NDJSON files from disk on every request using Next.js server components. The substrate is the database.
The consequence: any tool that writes to the substrate โ the milestone manager, the orchestrator, the harvester, a text editor, a script โ immediately shows up in the dashboard on the next page load. There is no "sync" button, no import step, no stale cache to invalidate.
The tradeoff is performance. Reading and parsing YAML on every request is slower than reading from a database. For projects with fewer than 100 entities (which covers most projects), the difference is imperceptible. For larger substrates, Next.js ISR (Incremental Static Regeneration) can cache pages with a configurable revalidation interval.
How it finds the substrate
The dashboard looks for the substrate in this order:
PROJECT_STATE_PATHenvironment variable (if set)project-state/in the current working directory.project-state/in the current working directory (legacy)
For teams using a shared drive, set PROJECT_STATE_PATH to the shared directory path. Every team member's dashboard reads the same files.
Port and lifecycle
The dashboard runs on port 3355 by default. To use a different port:
Start the kanban on port 4000
The process runs in the foreground of the terminal session that started it. Close the terminal (or Ctrl+C) and the dashboard stops. It holds no state of its own, so stopping and restarting it is free โ nothing to save, nothing to restore.
Next step
The dashboard shows your project state. But the substrate also publishes to external systems โ Slack channels, Gmail drafts, blog posts, a project website, calendar holds. Publishing and external comms explains the five surfaces and the review model that governs each one.