Skip to content
scsiwygest. โ€˜26
Sign in
get startedmcpcommunityapiplaygroundswaggersign insign up
โ† project-stateยทThe kanban dashboard โ€” your local project UI28 May 2026David Olsson
โ† project-state

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:

  1. PROJECT_STATE_PATH environment variable (if set)
  2. project-state/ in the current working directory
  3. .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.

The kanban dashboard โ€” your local project UI ยท scsiwyg