## πŸ“ 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`*