## π Core Metrics
| Metric | Count |
|--------|-------|
| Total Notes | `$=dv.pages().length` |
| Total Tags | `$=dv.pages().file.tags.distinct().length` |
| Total Links | `$=dv.pages().file.outlinks.length` |
| Folders | `$=dv.pages().file.folder.distinct().length` |
---
## ποΈ ACE Framework Breakdown
| Area | Notes |
|------|-------|
| Atlas | `$=dv.pages('"Atlas"').length` |
| Calendar | `$=dv.pages('"Calendar"').length` |
| Efforts | `$=dv.pages('"Efforts"').length` |
---
## π― Efforts Detail
| Category | Count |
|----------|-------|
| Active Projects | `$=dv.pages('"Efforts/Projects/Active"').length` |
| Simmering Projects | `$=dv.pages('"Efforts/Projects/Simmering"').length` |
| Sleeping Projects | `$=dv.pages('"Efforts/Projects/Sleeping"').length` |
| Archived Projects | `$=dv.pages('"Efforts/Projects/Archive"').length` |
| Areas | `$=dv.pages('"Efforts/Areas"').length` |
| Works | `$=dv.pages('"Efforts/Works"').length` |
---
## β° Activity Metrics
| Period | Notes Modified |
|--------|----------------|
| Today | `$=dv.pages().where(p => dv.date('today').toMillis() - p.file.mtime.toMillis() < 86400000).length` |
| This Week | `$=dv.pages().where(p => dv.date('today').toMillis() - p.file.mtime.toMillis() < 604800000).length` |
| This Month | `$=dv.pages().where(p => dv.date('today').toMillis() - p.file.mtime.toMillis() < 2592000000).length` |
---
## π·οΈ Top 10 Tags
```dataviewjs
const tagCounts = {};
dv.pages().forEach(p => {
if (p.file.tags) {
p.file.tags.forEach(tag => {
tagCounts[tag] = (tagCounts[tag] || 0) + 1;
});
}
});
const sorted = Object.entries(tagCounts)
.sort((a, b) => b[1] - a[1])
.slice(0, 10);
dv.table(["Tag", "Count"], sorted);
```
---
## π·οΈ Underused Tags (Used Only Once)
```dataviewjs
const tagCounts = {};
dv.pages().forEach(p => {
if (p.file.tags) {
p.file.tags.forEach(tag => {
tagCounts[tag] = (tagCounts[tag] || 0) + 1;
});
}
});
const underused = Object.entries(tagCounts)
.filter(([tag, count]) => count === 1)
.sort((a, b) => a[0].localeCompare(b[0]));
dv.paragraph(`**${underused.length} tags used only once:**`);
dv.table(["Tag", "Count"], underused);
```
---
## π Link Health
| Metric | Count |
|--------|-------|
| Outgoing Links | `$=dv.pages().file.outlinks.length` |
| Incoming Links | `$=dv.pages().file.inlinks.length` |
| Orphans (no backlinks) | `$=dv.pages().where(p => p.file.inlinks.length === 0 && p.file.outlinks.length === 0).length` |
---
## π³ Hierarchy Health
| Metric | Count |
|--------|-------|
| Notes with 'up' property | `$=dv.pages().where(p => p.up).length` |
| Notes missing 'up' | `$=dv.pages().where(p => !p.up).length` |
---
## π
Recent Activity
### Recently Modified (Last 5)
```dataview
TABLE file.mtime as "Modified"
SORT file.mtime DESC
LIMIT 5
```
### Recently Created (Last 5)
```dataview
TABLE file.ctime as "Created"
SORT file.ctime DESC
LIMIT 5
```
---
## π Content Size
```dataviewjs
const pages = dv.pages();
const sizesArray = pages.file.size.array();
const total = sizesArray.reduce((a, b) => a + b, 0);
const avg = Math.round(total / pages.length);
const max = Math.max(...sizesArray);
const min = Math.min(...sizesArray);
dv.table(
["Metric", "Value"],
[
["Total vault size", (total / 1024 / 1024).toFixed(2) + " MB"],
["Average note size", (avg / 1024).toFixed(2) + " KB"],
["Largest note", (max / 1024).toFixed(2) + " KB"],
["Smallest note", (min / 1024).toFixed(2) + " KB"]
]
);
```
---
## π§ Stale Notes (Not Modified in 90+ Days)
| Threshold | Count |
| --------------- | ----------------------------------------------------------------------------------------------------- |
| 90+ days stale | `$=dv.pages().where(p => dv.date('today').toMillis() - p.file.mtime.toMillis() > 7776000000).length` |
| 180+ days stale | `$=dv.pages().where(p => dv.date('today').toMillis() - p.file.mtime.toMillis() > 15552000000).length` |
| 365+ days stale | `$=dv.pages().where(p => dv.date('today').toMillis() - p.file.mtime.toMillis() > 31536000000).length` |
### Stale Notes
![[Stale]]
---
## π Notes by Creation Month (Last 6 Months)
```dataviewjs
const pages = dv.pages();
const months = {};
const now = new Date();
pages.forEach(p => {
const created = p.file.ctime;
const monthsAgo = (now.getFullYear() - created.year) * 12 + (now.getMonth() + 1 - created.month);
if (monthsAgo >= 0 && monthsAgo < 6) {
const key = `${created.year}-${String(created.month).padStart(2, '0')}`;
months[key] = (months[key] || 0) + 1;
}
});
const sorted = Object.entries(months).sort((a, b) => a[0].localeCompare(b[0]));
dv.table(["Month", "Notes Created"], sorted);
```
---
*Last viewed: `$=dv.current().file.mtime`*