搭建你的个人主页(Homepage+Heatmap Tracker)

搭建了一个主页并在主页上搭建一些工具去记录和串联 Obsidian 仓库内的所有笔记。最终的效果如下图所示:

image.png

技术实现:Obsidian 丰富的插件

主要借助 3 个插件实现:

1. 主页本页(Homepage插件)
• 实时年度进度追踪
• 跨文档统计看板

2. 创作热力图(Heatmap Tracker插件)
• 中英文混合字数统计
• 创作强度五级可视化
• 自动/手动刷新数据

3. 记忆引擎(Dataview插件及)
• 时光机:那年今日
• 每日随机:每日盲盒推荐

热力图的需求拆解

• 给AI投喂Heatmap Tracker example code
• 用思维导图描述理想中的热力图样式
• 确定「按字数深浅着色」的核心需求

那年今日

同样是将需求和example 的 code 一起投喂给 AI,然后最终的语句如下

// 今天是2025年4月6日,2025 年已经过去了95天。
今天是`=dateformat(date(today), "yyyy年M月d日")`,`=date(today).year` 年已经过去了`=(date(today)-date(date(today).year + "-01-01")).days`天。


// 你总共在42天留下了足迹,继续加油!
dataviewjs
const pages = dv.pages('""')
const dates = [...new Set(pages.map(p => p.file.ctime.toISODate()))]
dv.paragraph(`- 你总共在${dates.length}天留下了足迹,继续加油!`)

// 那年今日table
TABLE WITHOUT ID
    file.link AS "Article",
    dateformat(file.ctime, "yyyy-MM-dd (EEE)") AS "创建时间",
    dateformat(file.mtime, "yyyy-MM-dd HH:mm:ss") AS "最后修改时间"
FROM ""
WHERE dateformat(file.ctime, "MM-dd") = dateformat(date(today), "MM-dd")
SORT file.ctime DESC
LIMIT 100

今日随机推荐

实现的语句如下

// 获取所有有效笔记(排除模板和系统文件)
const allNotes = dv.pages('""').file
    .filter(f => f.path.endsWith(".md") && 
           !f.path.includes("Templates/") &&
           !f.path.includes("_attachments/"));

// 基于当天日期生成随机种子(确保每日结果一致)
const today = new Date().toISOString().slice(0, 10); // "YYYY-MM-DD"
const seed = parseInt(today.replace(/-/g, "")); 
const randomIndex = Math.floor(Math.sin(seed) * allNotes.length);

// 获取随机笔记
const randomNote = allNotes[randomIndex];

// 显示可点击的链接(带友好提示)
dv.header(2, "今日随机推荐");
dv.paragraph(`[[${randomNote.path}|${randomNote.name}]]`);
dv.paragraph(`*"${randomNote.path.split("/").slice(0, -1).join("/")}" 中的笔记*`);

正好给启动页面再加点负担

:joy: :joy:,Ob启动应该也算挺快了