足迹 Footprints
个人留痕系统 · 桌面应用(Tauri 2 + React 19 + SQLite)+ 移动端 PWA。
设计文档见仓库根目录 DESIGN.md;同步服务端见 sync-server/。
目录结构
app/
src/ React 前端(时间线 / 记录 / 统计 / 类型 / 字典)
src-tauri/ Tauri 2 桌面壳 + Rust 后端(rusqlite,26 个 IPC 命令 + 同步地基)
public/ PWA 清单 / Service Worker / 图标
server/dev-bridge.mjs 开发桥接:HTTP 暴露与 Tauri IPC 相同的命令契约
server/db.mjs 桥接与种子脚本共用的数据层(node:sqlite)
server/seed.mjs 演示数据(仅当库为空时写入)
schema.sql 数据库 schema(Rust 与 Node 共用同一份,v2 含同步元数据)
tools/pnpm.cjs 自包含 pnpm(本机无全局 npm/pnpm 时使用)
sync-server/ 自建同步服务(Docker 部署,协议已冻结)
浏览器预览(无需 Rust)
node ../tools/pnpm.cjs bridge # 终端 1:数据桥接(含 dist 静态托管)
node ../tools/pnpm.cjs dev # 终端 2:前端热更(http://localhost:5173)
或构建后直接访问桥接托管页:
node ../tools/pnpm.cjs build # tsc 类型检查 + vite 打包(含 PWA 资源)
node server/seed.mjs # 可选:写入演示数据
桌面应用打包(Windows)
前置:Rust stable-msvc(scripts/setup-rust.ps1 一键安装,MSVC Build Tools 需已具备)。
node ../tools/pnpm.cjs build # 先产出 dist
node ../tools/pnpm.cjs tauri build
产物:src-tauri/target/release/bundle/nsis/*-setup.exe(NSIS 安装包)。
开发模式:node ../tools/pnpm.cjs tauri dev。
移动端(PWA)
前端已做响应式与 PWA 改造(manifest + Service Worker + 图标):
- 桌面壳内运行时自动跳过 SW 注册
- 浏览器/手机访问托管页时自动注册 SW,可"添加到主屏幕"离线壳启动
- 同步服务部署后,手机 PWA 直连同一账号数据
原生 Android 壳(Tauri mobile)为可选后续项,需要 Android SDK/NDK;iOS 构建需 macOS。
命令契约
前端统一经 src/lib/api.ts 调用:浏览器模式走 POST /api/<command>(开发桥接),
桌面模式走 Tauri invoke(command, { payload })。两端实现同一组命令,
含多端同步地基:每行携带 uuid/hlc/origin,删除为墓碑,写入进 sync_oplog。
数据与附件位置:桌面版在系统应用数据目录(%APPDATA%/com.footprints.app),
开发预览在 app/.data/。备份 = 复制该目录。