Build An Obsidian Dashboard That Shows You What You Care
Photo by Luz Mendoza on Unsplash
If you are spending your first 45 minutes opening Slack, email, calendars, and project folders just to figure out what needs to happen today, your lifestyle/economics are broken.

When I am tracking active demand signals and deployment tasks for my webapps, my mornings are never compromised before I wrote a single line of code.

The problem wasn’t that the data didn’t exist, the problem was that you had to manually connect the dots across your entire vault.

A massive teardown on a community blog exposing exactly how to eliminate this friction was read by me and It fixed everything. Hopefully it does the same for you.

By stacking Obsidian, the Dataview plugin, and Claude Code (connected via MCP), they built an autonomous dashboard that surfaces everything that matters today.

You do not update this dashboard.

It reads your vault and updates itself.

Here is the breakdown of how to build it:

The Core Architecture: Read, Not Store

Before you write a query, you must understand the constraint: A dashboard is not another place to put information.

A dashboard has zero content of its own. It is a single note entirely made of queries. It reads structured data from your project files, client notes, and daily logs, rendering the results live. You update a project note once, and the dashboard automatically reflects it.

To execute this, you need two technical foundations:

  1. The Dataview Plugin: A community plugin that functions as a live SQL-like query engine for your Obsidian vault.
  2. YAML Properties: Structured metadata fields at the top of every single note.

If your properties are inconsistent, the dashboard breaks. You must enforce strict YAML frontmatter on your files.

Example Project Note:

---
type: project
status: active
client: ClientName
deadline: 2026-06-15
priority: high
next_action: Write the campaign brief
completion: 40
---

The 6-Query Dashboard Build

Create a new note in your root folder called Dashboard.md. You will never manually type content here again. Paste these six Dataview queries to assemble the engine.

Section 1: Today’s Priorities

This pulls every unfinished task due today. The LIMIT 10 is a strict mechanical constraint. If you have 40 overdue tasks, the dashboard becomes an anxiety engine. Limiting to 10 forces you to ruthlessly prioritize your YAML due dates.

TABLE WITHOUT ID
file.link as "Task",
due as "Due",
project as "Project",
priority as "Priority"
FROM "02 - TASKS"
WHERE type = "task"
AND status != "complete"
AND (due = date(today) OR due < date(today))
SORT priority DESC, due ASC
LIMIT 10

Section 2: Active Projects

This surfaces the next_action property for every active project. You do not need to open the project file to know what the immediate blocker is.

TABLE WITHOUT ID
file.link as "Project",
client as "Client",
completion + "%" as "Done",
deadline as "Deadline",
next_action as "Next Action",
priority as "Priority"
FROM "01 - PROJECTS"
WHERE type = "project"
AND status = "active"
SORT priority DESC, deadline ASC

Section 3: The 7-Day Window

This queries everything like projects, tasks, and deliverables with a deadline in the next seven days, allowing you to act before you are forced to react.

TABLE WITHOUT ID
file.link as "Item",
type as "Type",
deadline as "Deadline",
status as "Status",
client as "Client"
FROM ""
WHERE (deadline >= date(today) AND deadline <= date(today) + dur(7 days))
AND status != "complete"
SORT deadline ASC

Section 4: Client Health Monitor

By sorting health ascending and last_contact ascending, at-risk clients you haven't spoken to recently automatically bubble to the top of the list. It is an automated CRM review.

TABLE WITHOUT ID
file.link as "Client",
health as "Health",
mrr as "MRR ($)",
last_contact as "Last Contact",
next_touchpoint as "Next Touchpoint"
FROM "03 - CLIENTS"
WHERE type = "client"
AND status = "active"
SORT health ASC, last_contact ASC

Section 5: Open Loops

The items that fall through the cracks are the ones that are too small for a formal task but too important to forget. Use the prefix OPEN: in your daily notes (e.g., OPEN: Decision on Q3 content). This query scrapes yesterday's note and surfaces those exact lines today.

LIST
FROM "04 - DAILY"
WHERE type = "daily"
AND date = date(today) - dur(1 day)
FLATTEN file.lists AS item
WHERE contains(string(item), "OPEN:")

Section 6: Revenue Pulse

This gives you your current revenue picture in 15 seconds. Append this inline JavaScript query directly below a standard Dataview table to automatically calculate your total Monthly Recurring Revenue (MRR).

**Total MRR:** `$= dv.pages('"03 - CLIENTS"').where(p => p.type === "client" && p.status === "active").map(p => p.mrr).array().reduce((a,b) => a + b, 0)`

The Intelligence Layer: Claude Code via MCP

A live dashboard is powerful, but connecting it to Claude Code via the Filesystem Model Context Protocol (MCP) completely automates the synthesis.

You can configure an n8n pipeline to run at 6:00 AM every morning. It commands Claude to read your local Obsidian dashboard and output a 300-word natural language briefing into your daily note.

The Briefing Prompt:

“Read my Obsidian dashboard note and every file it references. Synthesize a morning briefing: Tell me the single most important thing to accomplish today, what is at risk if I do not act, the client that needs attention, and one decision sitting open. Do not describe the tables. Tell me what they mean.”

Furthermore, by establishing a convention in your daily note like UPDATE: [Project Name] completion: 65, Claude Code can automatically traverse your vault, find the correct markdown file, update the YAML properties, and close the loop without you ever touching the specific project file.

At 6:00 AM, Claude drops the briefing in your daily note.

At 6:05 AM, you check the dashboard.

At 6:10 AM, you are executing.

No Slack, no email, no orientation lag.

The dashboard delivers immediate value on day one, but the real compounding happens at month two.

By strictly updating your YAML properties and prefixing your open loops, you enforce a ruthless structural discipline on your workflow. You stop dropping the non-urgent tasks.

The build takes one afternoon.
The compounding starts the first morning.

In case we are meeting for the first time, come over here, it’ll be worth the roller coaster of articles that are gonna come up in the next few weeks.

I swear tracking these updates is a job in itself, lately.

Here’s the list which I’ve built and keep adding on.