一款完全离线的拟物风格电子日记 / 手札应用。暖纸黄灯、皮革木桌、左右双开本, 翻页有风声、写字有沙沙声——像在一本真正的纸质笔记本上书写。
双开本阅读 · 流式分页 · 富文本 · 内联插图与页脚相册 · 旁注批注 · 公历/事件双计时 · 数据全部存在本地
| 功能 | 说明 |
|---|---|
| 双开本阅读 | 像真书一样左右摊开,翻页时书页绕书脊卷动,页角有页码 |
| 流式分页 | 一篇写超一页自动流到下一页,跨页段落按行拆分、上一页填满不留空行 |
| 日期双模式 | 公历(自动生成"公元 X 年 X 月 X 日")或事件计时(如"旅行 Day1、Day2…"自动递增) |
| 元信息 | 天气(预设 + 自由输入)、地点、标题(必填),排布在页眉一行 |
| 富文本 | 加粗/斜体/下划线/删除线/标题/引用/列表/字体/颜色/清除格式,回车即新段落 |
| 图片 | 正文内联插图 + 页脚相册(点击放大)+ 自选图片做心情印章 |
| 旁注批注 | 阅读时选中文字即可添加批注,正文只留高亮与角标,点角标展开批注卡片 |
| 检索 / 统计 | 全文检索(标题/正文/批注/地点),写作统计(篇数、字数、连续天数) |
| 个性化 | 12 种字体、6 种书写颜色、字号、深夜护眼纸色、书名重命名,偏好自动保存 |
| 备份与恢复 | 一键导出全部数据(日记 + 批注 + 图片 + 设置)为 ZIP;支持从 ZIP 恢复(恢复前自动生成当前数据快照,防误覆盖) |
| 刷新不丢位置 | 视图路由基于 URL hash,刷新/重开应用回到原视图 |
| 离线 | 无任何网络依赖,数据存 IndexedDB,只属于你 |
├── app/ # 前端源码(原生 HTML/CSS/JS,无框架、无依赖)
│ ├── index.html
│ ├── css/style.css
│ ├── js/
│ │ ├── main.js # 入口与路由
│ │ ├── store.js # IndexedDB 数据层
│ │ ├── pageflow.js # 分页排版引擎(按行拆分跨页段落、横线基线对齐)
│ │ ├── sanitize.js # HTML 白名单消毒
│ │ ├── editor…/book…/… # 书写、阅读、检索、统计、设置视图
│ │ └── zip.js # 零依赖 ZIP 打包(原生 CompressionStream)
│ └── assets/fonts/ # 手写体字体(不入库,见下方「许可与字体」)
├── launcher/ # C# WinForms 启动器
│ ├── Program.cs # 本地静态服务器 + Edge 应用模式窗口
│ └── Launcher.csproj
├── release/ # 发行目录(exe、使用说明、应用副本;data/ 为运行数据不入库)
├── tools/ # 开发期自动化测试脚本(Node)
└── request.md # 最初的项目需求文档
到 Releases 下载最新的
chennian-diary-vX.X.X-win64.zip,解压到任意位置(桌面、U 盘都行,保持
尘年往事.exe 与 app 文件夹在一起),双击 尘年往事.exe 即可书写。
- 适用 Windows 10/11,无需安装任何运行时(自包含发布)
- 首次打开如被 SmartScreen 拦截,点「仍要运行」即可(应用未做数字签名)
- 「手写体」因第三方字体授权未随包附带,会自动回退到系统楷体;
如你已获得字体授权,可将 TTF 放入
app/assets/fonts/启用
app/ 是纯静态站点,任意静态服务器指向它即可:
cd app
python -m http.server 8080
# 打开 http://localhost:8080注意:数据存于浏览器 IndexedDB,按"协议 + 域名 + 端口"隔离, 换端口/换浏览器数据不互通。迁移数据用设置里的「导出备份」。
cd launcher
dotnet publish -c Release
# 产物为单文件 exe,与 app/ 文件夹放在一起即可运行- 所有日记、批注、图片保存在本机浏览器引擎的 IndexedDB 中,不上传任何服务器;
应用启动时会申请持久存储(
navigator.storage.persist),降低被浏览器自动清理的风险。 - 「设置 → 导出备份为 ZIP」随时导出全量数据(JSON + 原图 + 设置)。
- 「设置 → 从备份 ZIP 恢复」用备份整体替换本机数据;恢复开始前会自动导出一份 当前数据的快照 ZIP,万一恢复错了还能找回。
- 启动器模式下数据保存在
release/data/(Edge 用户数据目录),整文件夹拷走即迁移。
改动前端代码后运行:
powershell -ExecutionPolicy Bypass -File tools\release.ps1脚本会自动把 app/ 同步到 release/app/ 并重新打包 release\尘年往事.exe。
运行数据目录 release/data/ 不会被动到。
- 前端零依赖、零构建:原生 ES Modules + IndexedDB + Web Audio(合成音效)+ Canvas 测量。
- 分页引擎:写入时以不可见节点实测每段行数,按行二分拆分跨页段落; 横线相位用 Canvas 量出字体基线,保证"字坐在线上"。
- 所有用户 HTML 经白名单消毒后入库,防 XSS。
- 启动器:.NET 10 单文件 exe,仅 ~5MB,无安装、无注册表、完全离线。
字体不入库:出于第三方字体授权考虑,本仓库不附带任何字体文件
(.ttf 已在 .gitignore 中)。缺少字体时应用正常工作,「手写体」自动回退到
系统楷体;本地使用时把 TTF 放回 app/assets/fonts/ 即可
(文件名见 css/style.css 的 @font-face,约 3.5MB)。克隆本仓库后请自行
准备字体并确认其授权允许你的使用方式。