Obsidian Dashboard¶
An interactive visual dashboard that renders your open tasks as a ranked Board and Table inside Obsidian.
Overview¶
The dashboard reads and writes the same tasks/*.md files that the slash-commands use — markdown remains the single source of truth. It requires the Dataview plugin with JavaScript Queries enabled.
What it Is¶
The dashboard (tasks/templates/Dashboard.md) is a DataviewJS block that renders:
- A Summary bar with stat pills: total open, overdue, due this week, per-domain counts
- A Status Board with three columns — TODO (auto-populated from today's plan), IN PROGRESS (drag or select), DONE / WON'T FIX (today's resolutions)
- A Board grouped by priority tier, each column's cards clustered under small project sub-headers (groups ordered by best-ranked task in that project; a trailing "(no project)" group collects unaffiliated cards), each card with Move reprioritize, Done, Won't Fix, Block/Unblock controls, and drag-to-reorder within the same priority column
- A Table grouped by domain (collapsible), each domain's rows further clustered under project sub-header rows (same suppression rule as the Board), each row with inline priority, due, effort, and context editors plus resolve, Block/Unblock, and drag-to-reorder within the same domain and priority run
- A Quick capture form for raw inbox entries
- An Inbox needs triage section listing all open inbox items
Prerequisites¶
- Dataview plugin with "Enable JavaScript Queries" turned on (Settings → Dataview). Without this the interactive block will not execute.
- Optional: Obsidian Tasks plugin — enables checkbox status cycling directly inside notes.
Setup¶
Step 1 — Open the vault
Open the repo root folder (or just the tasks/ sub-folder) as an Obsidian vault.
Step 2 — Install community plugins
Install Dataview and enable JavaScript Queries as described in Installation.
Step 3 — Open the dashboard
Open tasks/templates/Dashboard.md. Dataview renders it live.
The dashboard file is git-tracked and safe to push. Live task data (tasks/*.md) remains gitignored.
Edit Capabilities¶
1. Resolve (Done / Won't Fix)¶
Every board card and table row has Done and Won't Fix buttons. Clicking confirms with a dialog, then rewrites the source task line in place:
- Done — marks the checkbox
[x], appendsresolution:doneandresolved:<date>tags - Won't Fix — marks the checkbox
[-], appendsresolution:wontfixandresolved:<date>tags - Recurring tasks — Done leaves the checkbox
[ ]and updates only thelast:tag to today, rolling the cycle forward (mirrors/clear-taskssemantics). The task appears in the DONE / WON'T FIX column for the rest of the day with a ♻ Recurring badge showing the next cycle interval.
2. Inline Field Editing (Table)¶
Each row exposes live controls:
<select>for priority (seven tiers)- Date picker for
due: - Text input for
effort:(validated against\d+(\.\d+)?[hm]) - Text input for
context:
Changing any control rewrites only that field token in the source line. Clearing a field removes the token entirely.
3. Reprioritize via Board¶
Each board card has a "Move" select listing the seven priority tiers. Changing it rewrites prio: in the source line; on auto-refresh the card moves to the new column.
4. Block / Unblock Toggle¶
Every board card and table row has a "🚫 Block" / "🚫 Unblock" button (compact "🚫" in the table). Clicking it toggles the blocked:true tag directly in the source line — no confirmation dialog. Blocked tasks display a red "🚫 Blocked" badge in the card meta row and next to the task title in the table. Plan panel rows show the badge read-only. Blocked tasks are not hidden or reordered; they remain in their normal position. Dataview auto-refreshes the view after the write.
5. Status Board (Drag-and-Drop Execution Tracking)¶
The Status Board sits below the Plan panels and above Quick capture. It has three columns:
- TODO — auto-populated from tasks that appear in any active plan panel (Today, Tomorrow, This Week, or Weekend), via
scheduledTitles. Tasks move out of this column automatically when marked In Progress. - IN PROGRESS — open tasks with
status:in-progress. Drag a card from TODO here, or use the "Status ▸" select on any card. - DONE / WON'T FIX — tasks resolved today (checkbox
[x]or[-]withresolved:<today>) plus recurring tasks whose cycle was completed today. This column is read-only; cards show a ✓ Done, ✕ Won't Fix, or ♻ Recurring marker. The column clears at midnight rollover.
Within each column, cards are clustered under small project sub-headers (same styling and suppression rule as the Board's priority columns). Sub-headers are display-only; they do not affect drag-and-drop behaviour because drop handlers are attached at the column level.
Drag-and-drop behaviour:
- Drag a TODO card → drop on IN PROGRESS: sets status:in-progress in the source line; checkbox stays [ ].
- Drag an IN PROGRESS card → drop on TODO: clears status: from the source line.
- Drag any card → drop on DONE / WON'T FIX: marks the task done (sets checkbox [x], appends resolution:done and resolved:<date>, clears status:). No confirm dialog on drag. For recurring tasks, dropping on DONE bumps last: to today and rolls the cycle forward — the card appears in the DONE column for the rest of the day with a ♻ Recurring badge, while the underlying line stays - [ ] with last: updated (consistent with /clear-tasks semantics).
Select fallback: each TODO and IN PROGRESS card has a compact "Status ▸" select with options: To do, In progress, Done, Won't fix. Done and Won't fix routes through the standard resolve handler (includes confirm dialog). Won't fix sets checkbox [-] and resolution:wontfix. For recurring tasks, selecting Done fires a "cycle completed" notice and shows the task in DONE for the rest of the day.
The dashboard auto-rebuilds after every write so columns recompute from the source markdown immediately.
6. Drag-to-Reorder (Manual Prioritization)¶
Board cards and Table rows can be reordered by dragging, providing a within-rank manual tiebreak that persists to the source task files.
Board (by Priority column):
- Each card is draggable. Grab a card and drop it above or below another card in the same column to change its position.
- On drop, the dashboard writes a dense order:N tag (1, 2, 3, …) to every task in that priority column in the new visual sequence — "visual sequence" here means the clustered order (project groups in appearance order, no-project group trailing). Cross-project drops are accepted but snap back into the card's own project group when the dashboard rebuilds; clustering wins for display while manual order: persists within a project group.
- Sub-headers are display-only visual separators — no tags are written for them.
- Cross-column drops are no-ops — dragging a card to a different priority column is rejected. Use the "Move ▸" select to change priority rank.
Table (by Domain group):
- Each row has a drag handle (⠿) in the first column. Drag a row and drop it above or below another row to reorder.
- Drop is only valid within the same domain group AND among rows with the same priority rank. Cross-domain or cross-rank drops are no-ops.
- On a valid drop, order:N is written densely to all tasks in that same-rank run within the domain, following the clustered visual top-to-bottom order (project groups in first-appearance order, no-project trailing) — same snap-back semantics as the Board.
Semantics:
- order:N is a within-rank tiebreak: it never overrides the prio rank ladder. A rank-1 task without order: always sorts before any rank-3 task regardless of its order: value.
- Tasks without an order: tag sort after all explicitly ordered tasks within the same rank (treated as Infinity in the comparator), then fall back to the normal due/effort/domain/title tiebreaks.
- The plan commands (/plan-day, /plan-week, /plan-weekend) use order: as their second tiebreak criterion (after prio rank), so the manual order you set in the dashboard carries directly into generated plans.
- order: is written by the dashboard only; do not set it manually.
Capture to Triage Loop¶
- Type a raw thought in the Quick capture form and click "Add to inbox" — appended to
tasks/inbox.mdimmediately. - The Inbox section shows all open items.
- Click "Copy triage command" —
/triage-inboxis copied to your clipboard. - Paste and run
/triage-inboxin Claude Code.
MCP Integration¶
The plugin ships .mcp.json at the repo root, declaring an obsidian MCP server using mcp-obsidian. When active, Claude can read and append to vault notes via mcp__obsidian__* tools.
To enable: install the Local REST API community plugin in Obsidian, copy its API key, and export it:
Default connection: 127.0.0.1:27124. Change via the Local REST API plugin settings if needed.
Caveats¶
- No hard-deletes. This plugin's convention is append-only — retire tasks with resolve buttons or
/clear-tasks. Deleting a line loses history and breaks the audit trail. The dashboard exposes no delete control. - Single-colon tag format. The dashboard parses
key:value(single colon, double-space-separated). Do not switch to Dataview'skey:: valuedouble-colon format unless you intend to update every planning command. - Line-drift guard. Write operations validate that the target line still looks like a task checkbox before applying any edit. If lines shifted due to external edits while the dashboard was open, writes are safely aborted with a notice to reopen the dashboard.
Related¶
- Installation — Dataview and MCP prerequisites
- Capturing Tasks — Quick capture and triage workflow
- Task Line Format — tag format the dashboard reads and writes