一抹安静隐形于桌面的智能磨砂玻璃,个人知识库的神经末梢。
我们厌倦了。
厌倦了每次打开 "待办应用" 都要等 Electron 吃掉 300MB 内存,只为看一眼今天该做什么。厌倦了被复杂的日程管理器用日历视图、看板视图、甘特图淹没,然后在信息过载中忘掉真正紧迫的那件事。厌倦了任务数据被锁死在某个私有数据库里,无法用最朴素的方式——打开一个文本文件——去审视自己的生活。
Phantom Todo 拒绝了一切臃肿。
它没有数据库。没有云同步。没有日历控件。没有注册登录。它只是一块寄生在你 Windows 桌面上的智能磨砂玻璃——以 Windows 11 原生 Mica 材质融入壁纸,以不足 8MB 的内存占用安静驻守,以一个纯文本 Markdown 文件承载全部待办事项。
它的全部数据就是一个你可以用 Obsidian、VS Code、甚至 notepad.exe 打开的 .md 文件。你的待办列表是一份完全属于你的纯文本资产,不依赖任何服务、任何公司、任何格式锁定。
这不是又一个 Todo 应用。 这是一种关于极低交互开销与绝对视觉秩序感的执念。
| 特性 | 实现 |
|---|---|
| Windows 11 Mica 材质 | 通过 DwmSetWindowAttribute 直接调用 DWM API,窗口背景即壁纸的磨砂延伸 |
| DWM 物理圆角裁剪 | DWMWA_WINDOW_CORNER_PREFERENCE = ROUND,从操作系统层面裁剪窗口形状,消灭 CSS 圆角与系统直角的冲突 |
| 动态系统主题色 | 实时读取 Windows 注册表 AccentColor,全局 UI 元素自动匹配你的个性化主题色 |
| 开机静默自启 | 一键配置,随系统启动无感驻留 |
| 系统托盘寄生 | 最小化到托盘,左键显隐切换,右键菜单管理 |
<!-- 桌面幽灵 (Phantom Todo) 任务文件 -->
- [ ] 完成季度报告 @due:2026-06-20T18:00:00+08:00 @id:1718841600000
- [ ] 给导师发邮件 @id:1718842200000
- [x] 买咖啡豆 @id:1718843000000- 实时双向解析标准 GFM Task List 格式
- 与 Obsidian 无缝衔接——同一个
.md文件,两个视图 - 无私有格式、无数据库、无锁定,你的数据永远属于你
| 动效 | 描述 |
|---|---|
| 深渊渐变 (Deep Fade-out) | 列表底部 Alpha 透明度溶解,超出视区的任务渐隐为残影,拒绝生硬切断 |
| 瞬间消散 (Particle Dissolve) | 勾选任务的一瞬——缩放、透明、空间收缩——视觉垃圾在 600ms 内蒸发殆尽 |
| 3 秒后悔药 (Fleeting Undo) | 消散后浮现的幽灵按钮,3 秒后自行隐没,转瞬即逝的安全网 |
| 霓虹突变 (Neon Strike) | 含 ! 的高优任务:左侧霓虹红指示线 + 文字发光 + 独立呼吸动效 |
| 呼吸闪烁 (Breathing Light) | 截止时间 < 1 小时的任务,纯 CSS 驱动的心跳节律,零 JS 开销 |
倒计时信息的降维展示——用最少的视觉元素传递最准确的紧迫感:
剩余 > 24h → 冷淡灰字 "剩余 3 天"
1h ~ 24h → 主题色高亮 "剩余 6 小时"
< 1h → 🔴 警示红 + 呼吸闪烁 + Windows 原生 Toast 通知
倒计时每 60 秒自动重算,精准推送临界状态通知,即使你正在全屏打游戏。
一键锁定窗口——调用 setResizable(false) 从 OS 底层彻底关闭窗口边缘拉伸权限,同时移除 DOM 中的 resize 手柄。不是 CSS 禁用,是物理层面的锁死。
笔记本屏与外接显示器各自独立记忆窗口位置和尺寸。按物理分辨率分 key 存储,拔掉显示器再接回来,窗口自动恢复到上次的位置。
┌─────────────────────────────────────────────┐
│ Phantom Todo │
├─────────────┬───────────────────────────────┤
│ Frontend │ Vue 3 + TypeScript + Vite │
│ Backend │ Rust (Tauri 2) │
│ Storage │ Plain Markdown (.md) │
│ Native API │ Windows DWM + Registry │
│ Build │ Cargo + npm + NSIS/WiX │
└─────────────┴───────────────────────────────┘
| 层级 | 技术 | 职责 |
|---|---|---|
| 渲染引擎 | Tauri 2 (WebView2) | 系统 WebView,无捆绑 Chromium,内存 < 8MB |
| 后端核心 | Rust | 文件 I/O、原子写入、DWM API 调用、系统托盘 |
| 前端框架 | Vue 3 Composition API | 响应式 UI、动效系统、状态管理(零外部依赖) |
| 构建工具 | Vite 5 | 秒级 HMR、Tree-shaking |
| 类型安全 | TypeScript 5 | 前端全量类型覆盖 |
| 原生能力 | windows-rs 0.58 | Mica 材质、圆角、Accent Color 读取 |
| 依赖 | 最低版本 | 安装指引 |
|---|---|---|
| Rust | 1.75+ | rustup.rs |
| Node.js | 18+ | nodejs.org |
| Windows | 11 (22H2+) | Mica 材质需要 Win11 |
# 1. 克隆仓库
git clone https://github.com/YourUsername/phantom-todo.git
cd phantom-todo
# 2. 安装前端依赖
npm install
# 3. 开发模式启动(支持热重载)
npx tauri dev
# 4. 生产环境打包(输出 .exe + .msi + NSIS 安装包)
npx tauri buildsrc-tauri/target/release/
├── phantom-todo.exe # 独立可执行文件
└── bundle/
├── msi/Phantom Todo_0.1.0_x64_en-US.msi # MSI 安装包
└── nsis/Phantom Todo_0.1.0_x64-setup.exe # NSIS 安装包
phantom-todo/
├── src/ # Vue 前端
│ ├── App.vue # 主界面(拖拽、resize、图钉、深渊渐变)
│ ├── api/tasks.ts # IPC 桥接 + 时间漏斗算法
│ ├── store/taskStore.ts # 全局状态(Undo 机制、心跳定时器)
│ ├── components/
│ │ ├── TaskItem.vue # 任务条目(消散动效、霓虹突变、呼吸闪烁)
│ │ ├── QuickInput.vue # 全局快捷键浮窗
│ │ ├── TimeDial.vue # 滑动拨盘时间选择器
│ │ └── UndoToast.vue # 3 秒后悔药
│ └── styles/index.css # 设计 Token 系统
├── src-tauri/ # Rust 后端
│ ├── src/
│ │ ├── main.rs # 入口
│ │ ├── lib.rs # Tauri Builder(Mica、托盘、快捷键)
│ │ ├── commands.rs # IPC 命令层
│ │ ├── storage.rs # 文件 I/O(原子写入 + 窗口状态持久化)
│ │ ├── models.rs # 数据模型 + Markdown 解析器
│ │ └── windows_api.rs # Windows 原生 API 封装
│ ├── capabilities/main.json # Tauri 权限声明
│ └── tauri.conf.json # 应用配置
└── Phantom List.md # 产品需求文档 (PRD)
Phantom Todo 的全部用户数据存储在 Windows AppData 目录下,不在项目目录内:
C:\Users\<你的用户名>\AppData\Roaming\com.phantom-todo\
├── tasks.md # 待办事项(标准 GFM Task List)
└── window_state.json # 窗口位置/尺寸(按屏幕分辨率分 key)
- 寄生,不占有——融入壁纸而非遮挡壁纸
- 文本即数据——拒绝数据库,拥抱纯文本
- 降维,不堆砌——用最少元素传递最大信息量
- 消散,不删除——完成任务是一种视觉愉悦,不是信息清理
- 本地,不云端——你的待办列表是你的私产
MIT License © Phantom Director
你可以自由使用、修改和分发本项目。
Built with obsession. Powered by Rust + Vue.