Dashboard
Opens here each time Obsidian launches (Settings โ About โ Startup โ Default note = _meta/dashboard).
Queries below require the Dataview Obsidian community plugin.
๐ด Lint errors (actionable)
TABLE WITHOUT ID
file.link AS "Page",
namespace AS "Namespace",
"โ ๏ธ " + string(default(issue, "โ")) AS "Issue"
FROM ""
WHERE contains(tags, "lint-error") OR status = "reject"
SORT file.mtime DESC
LIMIT 20
๐ค Agent writes โ last 24 hours
TABLE WITHOUT ID
file.link AS "Page",
namespace AS "Namespace",
type AS "Type",
authors AS "Agents"
FROM ""
WHERE any(authors, (a) => startswith(a, "agent-"))
AND file.mtime >= date(today) - dur(1 day)
SORT file.mtime DESC
LIMIT 15
๐ฐ๏ธ Stale pages (active, not reviewed in 180+ days)
TABLE WITHOUT ID
file.link AS "Page",
namespace AS "Namespace",
date(last_reviewed) AS "Last reviewed",
review_owner AS "Owner"
FROM ""
WHERE status = "active"
AND last_reviewed != null
AND date(last_reviewed) < date(today) - dur(180 days)
SORT last_reviewed ASC
LIMIT 20
๐ฅ _inbox โ awaiting human promotion
TABLE WITHOUT ID
file.link AS "Page",
type AS "Type",
date(created) AS "Created",
default(confidence, "โ") AS "OCR conf"
FROM "_inbox"
WHERE file.name != "_index"
SORT created ASC
LIMIT 30
๐ฅ Recently modified (any author, last 7 days)
TABLE WITHOUT ID
file.link AS "Page",
namespace AS "Namespace",
type AS "Type",
authors AS "Authors",
dateformat(file.mtime, "yyyy-MM-dd HH:mm") AS "Modified"
FROM ""
WHERE file.mtime >= date(today) - dur(7 days)
AND file.name != "_index"
AND namespace != null
SORT file.mtime DESC
LIMIT 25
๐ Pages by type (across whole vault)
TABLE WITHOUT ID
type AS "Type",
length(rows) AS "Count",
length(filter(rows, (r) => r.status = "active")) AS "Active",
length(filter(rows, (r) => r.status = "draft")) AS "Draft"
FROM ""
WHERE type != null AND file.name != "_index"
GROUP BY type
SORT length(rows) DESC
๐งฎ Pages per namespace
TABLE WITHOUT ID
namespace AS "Namespace",
length(rows) AS "Total pages",
length(filter(rows, (r) => r.status = "active")) AS "Active",
length(filter(rows, (r) => r.status = "draft")) AS "Draft",
length(filter(rows, (r) => r.status = "archived")) AS "Archived"
FROM ""
WHERE namespace != null AND file.name != "_index"
GROUP BY namespace
SORT namespace ASC
Vault navigation
๐ Relationships
graph LR
dashboard["dashboard"]:::self
dashboard --> style_guide["style-guide"]
dashboard --> lint_report["lint-report"]
dashboard --> ingest_log["ingest-log"]
classDef self fill:#715EE3,color:#fff,stroke:#291F50;