clemvault internals production

Vault Kanban

A self-aware Kanban board that scans ClemVault and renders all projects as draggable lifecycle cards.

React 19ViteExpressNode.js
Vault Kanban screenshot 1
Vault Kanban screenshot 2

A self-aware Kanban board that scans the ClemVault filesystem and renders all side projects as draggable cards. Dragging a card between columns triggers real filesystem operations: folder creation, PRD generation, agent bootstrapping.

What It Is

Vault Kanban is a local-only dashboard that scans the ClemVault directory and renders all side projects, ideas, and active builds as cards organized by lifecycle stage.

What started as a read-only visualizer evolved into a full command center. The board doesn’t just display state. It creates it. Dragging an idea card into Active Build creates the project folder, writes the PRD, and bootstraps the agent entry point.

It’s self-referential. The Vault Kanban card tracks itself.

Lifecycle Actions

Each Kanban column maps to a lifecycle stage. Moving a card between columns triggers an API call to the Express server, which performs real filesystem operations. No manual folder setup, no copy-pasting templates.

TransitionWhat happens on drop
Ideas → Active BuildCreates project directory, writes prd.md, README.md, and CLAUDE.md from the idea content. Deletes the Inbox note.
Active Build → In ProductionInjects status: production into the project’s PRD frontmatter. Scanner moves the card automatically on next read.
In Production → DeprecRenames the folder to {name}-old. Scanner’s naming convention moves it to Deprec on next scan.

Features

Stack

ToolRole
Vite + React 19Frontend on port 5175
ExpressLifecycle API on port 5000: handles all filesystem operations on drop
Node.jsFilesystem scanner: reads YAML frontmatter, builds board manifest
@dnd-kitDrag and drop with highlight zones and valid-transition enforcement

Development timeline

12 logged updates over 111 days, 26 Mar 2026 to 14 Jul 2026.

  1. Board reflects reality: status source fixed, blocked state addedfix

    The board read stale. The cause was not out-of-date data but how state was derived — nearly every project was piled into Active Build regardless of its real state.

  2. Dev loop fixed: --watch + one server, not twofix

    After the lane fix landed and the scanner CLI verified correct, the board still showed the old lanes. The data and the code were both right.

  3. Legacy Express server deleted; three silent lifecycle bugs fixed firstfix

    Endpoint-for-endpoint the Hono server was already a superset (all 8 legacy routes, plus /graph, /graph/note, /jobs/:id). But matching route names is not matching behavior, and the diff turned up three real bugs.

  4. Network tab (Command Center uplink) restored + two real bugs foundfix

    Regression, caught by the owner: parking the legacy Express server broke the [ NETWORK ] tab. Since both servers bind 5050, the tab worked only when the legacy server happened to win the startup race.

  5. Current prooffeatureunverified

  6. Bug: the scanner was inventing notes that nobody wrotefix

    Even after vault-wide resolution cut the graph from 198 to 106 nodes, some of the survivors were nonsense: wikilink, Idea Name, topics/.md — notes nobody ever wrote.

  7. Graph scanner (TDD) + GET /api/graphfeature

    Built in three TDD commits (parsing helpers → path resolution + clusters → buildGraph), each red-green before the next.

  8. GraphView component + node detail panelfeature

    GraphView.jsx: force-directed canvas, cluster-colored. Node radius scales with the *square

Show the earlier 4 entries
  1. → 2026-07-14 — Bug: half the nodes were unclickable (two attempts)fix

    Small nodes swallowed the click. The node was visibly there; clicking it did nothing.

  2. Graph view: spec before codedocs

    The cluster wikis cross-link heavily with Obsidian [[wikilinks]], and there was no way to see that structure without walking it one file at a time in Obsidian. Decided to build the view inside Vault Kanban rather than lean on Obsidian's…

  3. → 2026-04-29 — Server layer (Hono on :5050)feature

    The periodic-JSON-file design did not survive contact. In practice the board was always one refresh behind the vault.

  4. Promotion + architecturefeature

    Promoted from Inbox to an active project.

Written from this project's decision log as work happened, not afterwards. See every project →

What's next

1 open item

Plans, not promises. Taken from this project's own roadmap.