Gallery › Vibe Tracks › Vibe Tracks feature board

Vibe Tracks feature board

Vibe Tracks' 76 feature notes on a kanban board: one column per vibe-status, in Vibe Tracks' own order, each with its count. Drag a card to another column to propose a new status; drag a column header to reorder the columns, which rewrites the view's groupOrder. The proof board groups by a derived property, so its cards stay put.

Vibe Trackskanbantable4 views of one features.json

The .base file and its data

Every tab above is one entry of this file; the views read these rows. ⋯ in the toolbar copies the current view as YAML.

# Vibe Tracks' 76 feature notes on a board: columns are vibe-status in Vibe Tracks' own order, dragging a card
# proposes a new status, dragging a column rewrites groupOrder below. Obsidian Bases grammar (kanban since 1.14)
# plus data-ui's keys (docs/CONTRACT.md §5). Check it: node bin/data-ui.mjs check <this file> --data features.json
data: features.json
facets:
  - status
  - priority
  - areas
  - proof
views:
  - type: kanban
    name: By status
    order: [title, id, priority, areas]
    groupBy: { property: status }
    groupOrder: [backlog, ready, running, waiting, review, frontier, done, archived]
    columnWidth: 260
    sort:
      - { property: id, direction: ASC }
  - type: kanban
    name: By priority
    order: [title, id, status, areas]
    groupBy: { property: priority }
    groupOrder: [high, medium, low]
    columnWidth: 280
    filters: 'status != "done" && status != "archived"'
    sort:
      - { property: id, direction: ASC }
  - type: kanban
    name: By proof (derived)
    order: [title, id, status, commits, evidence]
    groupBy: { property: proof }
    groupOrder: [none, evidence, commits]
    columnWidth: 300
    sort:
      - { property: commits, direction: DESC }
  - type: table
    name: Table
    order: [id, title, status, priority, areas, proof, depends, evidence, commits, description]
    groupBy: { property: status }
    groupOrder: [backlog, ready, running, waiting, review, frontier, done, archived]
    sort:
      - { property: id, direction: ASC }
// features.json: 76 rows, 25 KB; the first 3
{
 "id": "vibetracks-features",
 "title": "Vibe Tracks features",
 "titleProperty": "title",
 "properties": {
  "id": {
   "type": "text",
   "label": "ID"
  },
  "title": {
   "type": "text",
   "label": "Feature"
  },
  "status": {
   "type": "text",
   "label": "Status",
   "facet": true
  },
  "priority": {
   "type": "text",
   "label": "Priority",
   "facet": true,
   "colors": {
    "high": 8,
    "medium": 4,
    "low": 0
   }
  },
  "areas": {
   "type": "list",
   "label": "Areas",
   "facet": true
  },
  "description": {
   "type": "text",
   "label": "Description"
  },
  "depends": {
   "type": "number",
   "label": "Depends on",
   "note": "notes this feature waits on"
  },
  "evidence": {
   "type": "number",
   "label": "Evidence",
   "note": "evidence links in the note"
  },
  "commits": {
   "type": "number",
   "label": "Commits"
  },
  "proof": {
   "type": "text",
   "label": "Proof",
   "facet": true,
   "derived": "from the note's vibe-commits and vibe-evidence",
   "colors": {
    "commits": 3,
    "evidence": 1,
    "none": 0
   }
  }
 },
 "rows": [
  {
   "id": "VT-001",
   "title": "File-first renderer V0",
   "status": "done",
   "priority": null,
   "areas": [
    "data",
    "renderer",
    "model"
   ],
   "description": "Codex V0: Base-compatible loading, Graph/Kanban/Focus, fenced status writes, pyblocks example.",
   "depends": 0,
   "evidence": 0,
   "commits": 1,
   "proof": "commits"
  },
  {
   "id": "VT-002",
   "title": "Production refactor and dispatcher protocol",
   "status": "done",
   "priority": null,
   "areas": [
    "data",
    "model",
    "writes",
    "agent",
    "renderer"
   ],
   "description": "Fable pass: modular backend, three fenced panel writes, area-catalog memory, init/new/status/comment CLI, /vibetracks skill for Claude and Codex, paper-minimal UI.",
   "depends": 1,
   "evidence": 0,
   "commits": 3,
   "proof": "commits"
  },
  {
   "id": "VT-003",
   "title": "Obsidian plugin wrapper",
   "status": "archived",
   "priority": null,
   "areas": [
    "obsidian"
   ],
   "description": "Register vibetracks-graph/kanban/focus as custom Base views; write through processFrontMatter so live buffers are safe.",
   "depends": 1,
   "evidence": 0,
   "commits": 0,
   "proof": "none"
  }
 ]
}
README.md
# Vibe Tracks feature board

Vibe Tracks' 76 feature notes on a kanban board: one column per `vibe-status`, in Vibe Tracks' own order, each with
its count. Drag a card to another column to propose a new status; drag a column header to reorder the columns, which
rewrites the view's `groupOrder`. The proof board groups by a derived property, so its cards stay put.

- **App:** Vibe Tracks
- **Replaces:** the sunset Obsidian Vibe Kanban plugin's board (its `.base` files in Zach's vault now fall back to a
  stock table grouped by a `formula.status` that hard-codes the column order) and the Board display of Vibe Tracks'
  own home (VT-018), whose rule this board keeps: "derived columns still refuse drops: state is derived, never
  claimed" (VT-025).
- **Shows:** `type: kanban` with Bases' `groupBy`, `groupOrder` (a named status with no features, `frontier`, is
  still a column; a status the order does not name, `todo`, follows it) and `columnWidth`; a card drag as
  `host.propose()`, which lands here because `site.json` makes the page `editable` (the edit lives in memory until
  reload; a read-only page refuses it with its reason); a column drag as `host.setView({groupOrder})`; moving cards and columns from the
  keyboard (Alt+←/→, or M for the Move menu); a derived group property (`proof`) locking the board.
- **Data:** `features.json`, written by `source/make.py` from `~/vibetracks/features/VT-*.md` front matter
  (vibetracks @ 90b71b0). Feature notes carry no KPI figures.

The original UI it replaces

the sunset Obsidian Vibe Kanban plugin's board (its .base files in Zach's vault now fall back to a stock table grouped by a formula.status that hard-codes the column order) and the Board display of Vibe Tracks' own home (VT-018), whose rule this board keeps: "derived columns still refuse drops: state is derived, never claimed" (VT-025).

What it shows

type: kanban with Bases' groupBy, groupOrder (a named status with no features, frontier, is still a column; a status the order does not name, todo, follows it) and columnWidth; a card drag as host.propose(), which lands here because site.json makes the page editable (the edit lives in memory until reload; a read-only page refuses it with its reason); a column drag as host.setView({groupOrder}); moving cards and columns from the keyboard (Alt+←/→, or M for the Move menu); a derived group property (proof) locking the board.

Data

features.json, written by source/make.py from ~/vibetracks/features/VT-*.md front matter (vibetracks @ 90b71b0). Feature notes carry no KPI figures.