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:
- The Dataview Plugin: A community plugin that functions as a live SQL-like query engine for your Obsidian vault.
- 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 10Section 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 ASCSection 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 ASCSection 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 ASCSection 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.