记忆节律 · Memory Rhythm
一款基于 SM-2 间隔重复算法的本地学习管理工具,让需要长期记住的知识在合适的时间再次出现。
在 GitHub 查看源码 ↗项目截图
记忆节律 · Memory Rhythm

为什么制作
收藏知识很容易,真正困难的是在遗忘之前再次遇见它。记忆节律把零散的知识点整理成一套可持续的复习计划:用户只需记录内容,并在每次复习后选择“忘记、困难、良好或轻松”,系统便会动态安排下一次出现的时间。
它同时回应了我对个人数据所有权的关注。应用不依赖账号、云端服务或网络连接,学习内容保存在本地 SQLite 数据库中;需要跨设备使用时,也可以迁移数据库文件,而不是把数据锁在某个平台里。
核心体验
围绕“记录—复习—回看”这条主线,我设计了今日任务、知识点录入与浏览、学科分类、复习日历和学习统计等功能。四档反馈简化了原始 SM-2 的评分方式;过去 365 天的学习热力图、连续学习天数和复习明细,则让长期积累变得可见。
知识点支持富文本与代码块,并可按学科筛选。整库数据能够以 JSON 导入或导出,既支持覆盖恢复,也支持合并;执行覆盖前,应用还会自动保留当前数据库快照。
我完成的部分
我完成了从产品结构到前后端实现的完整流程:将 SM-2 的复习状态转化为四档易懂的交互,设计今日复习、知识浏览、学科、日历、统计与设置页面,并实现知识点、复习记录、备份恢复和数据库迁移等后端能力。
项目使用 Vue、Element Plus、ECharts、Quill、DOMPurify 等开源组件完成界面、图表、富文本编辑与内容消毒;我的工作重点不是重新制造这些基础组件,而是把它们组织成一套连贯、可离线运行的个人学习工具,并处理数据安全、桌面封装与发布构建。
如何实现
后端使用 FastAPI、SQLAlchemy 与 SQLite,SM-2 调度逻辑被封装为无副作用的纯函数。前端采用 Vue 3、Element Plus、ECharts 与 Quill,不需要构建步骤;所有第三方资源均随应用保存在本地,因此断网后仍可完整运行。
除浏览器版本外,我还通过 PyWebView 将应用封装为 macOS 原生窗口,并支持用 py2app 打包为独立应用。数据库路径可以在运行时切换,方便把数据放到用户自己选择的位置。
遇到的问题与收获
这个项目最需要反复权衡的是“使用方便”与“数据可靠”之间的关系。例如,允许用户随时切换数据库路径很灵活,却也会带来误选文件、符号链接和损坏数据库等风险;覆盖导入很直接,却必须先为当前数据保留可恢复的快照。为此,我为迁移加入目录白名单、SQLite 文件标识检查和错误脱敏,也为备份导入加入严格的数据结构校验。
我由此认识到,“本地运行”并不等于天然安全,“功能能用”也不等于可以放心长期使用。真正可靠的个人工具,需要同时考虑失败后的恢复方式、数据的可迁移性,以及每一个方便功能可能扩大的安全边界。这个项目最终形成的不是一个功能堆叠式的学习面板,而是一套可离线运行、可迁移、可备份的长期记忆工作流。