本地优先 · BYOK · 无后端
FlashLog 是一款纯单机、AI 驱动的移动端工时 App:语音或文字描述工作内容,经语音识别与大模型自动提炼为结构化「工时卡片」;积累的数据可由 AI 分析工时分布、总结阶段工作并给出改进建议;分析页还支持 语音播报 回复。所有记录仅存本机,LLM / 语音识别 / 语音合成由 App 直连你配置的云服务商(默认火山引擎),不经任何第三方服务器转发。
| 原则 | 说明 |
|---|---|
| Local-First | 工时记录仅存本机 SQLite,支持离线查看与手动录入 |
| BYOK | 用户自带 API Key,费用由用户自行承担 |
| No Backend | 无账号、无云同步、无 API 代理 |
| 页面 | 主要功能 |
|---|---|
| 工作记录 | 文字输入或按住麦克风录音(最长约 3 分钟);火山 ASR 转写 → 流式 AI 总结为一张可编辑工时卡片(任务、工时大类、日期、时长、描述);口述「昨天…」等可解析其他日期;补充说明后重新总结会合并预览,确认保存写入 SQLite |
| 消息 | 统计自启用日起尚未填写工时的中国工作日;Tab 角标显示待补记天数;点击某日跳转工作记录并聚焦输入 |
| 历史 | 列表 / 日历两种视图;单条编辑、删除;按日期范围导出分享(文本、图片、Excel、Word);Android 支持微信、QQ、企业微信定向分享 |
| 分析 | 基于本机工时的 AI 对话助手;自动解析问题中的时间范围;常用问题快捷入口、多轮对话;可选 TTS 语音播报(复用 ASR Key) |
| 设置 | 火山方舟 LLM、豆包 ASR / TTS、定时提醒(工作日 / 每天)、工时大类、浅 / 深色主题、清除本地数据 |
真机录屏,展示录音 → AI 总结 → 保存 → 历史 / 分析主流程。
flowchart TB
subgraph app [FlashLog]
Home[Home]
Messages[Messages]
History[History]
Analysis[Analysis]
Settings[Settings]
end
subgraph local [Device]
SecureStore[SecureStorage]
DB[SQLite]
Notif[LocalNotifications]
end
subgraph volc [Volcengine BYOK]
LLM[Ark LLM]
ASR[Doubao ASR]
TTS[Doubao TTS]
end
Settings --> SecureStore
Home --> LLM
Home --> ASR
Analysis --> LLM
Analysis --> TTS
Home --> DB
History --> DB
Analysis --> DB
Messages --> DB
Settings --> Notif
Notif -->|deeplink| Home
| 项 | 要求 |
|---|---|
| Node.js | LTS 18+ |
| 浏览器开发 | 现代浏览器 + 麦克风(可选) |
| Android 构建 | JDK 17、Android SDK;详见 ANDROID.md |
npm install
npm run dev # http://localhost:5173
npm run build # 生产构建 → dist/
npm run preview # 预览 dist/浏览器开发说明
- 工时数据使用 localStorage 回退(非 SQLite)
- API Key 使用 Preferences 回退(非 Secure Storage)
- ASR WebSocket 经 Vite 代理
/api/openspeech-ws转发至火山
安装 App 或启动开发服务器后,进入 设置 填写凭证:
| 服务 | 必填项 | 默认值 |
|---|---|---|
| LLM | API Key、Model / Endpoint ID | Base URL: https://ark.cn-beijing.volces.com/api/v3 |
| ASR | API Key、Resource ID | volc.seedasr.sauc.duration |
| TTS | 复用 ASR Key、Resource ID、音色 | Resource ID: seed-tts-2.0 |
- LLM Model 可填推理接入点
ep-xxxxxxxx,或模型名如doubao-1-5-pro-32k-250115 - 未配置 LLM Key 时,「AI 总结」不可用,但仍可手动填写卡片并保存
参考文档
Windows 下在项目根目录执行 build-android-debug.bat 即可一键构建 debug APK(前端构建 → Capacitor sync → Gradle 打包):
build-android-debug.bat也可使用 npm run android:debug(内部调用上述脚本)。
产物路径:
android/app/build/outputs/apk/debug/app-debug.apk
安装到真机:
adb install -r android/app/build/outputs/apk/debug/app-debug.apk完整环境配置、Release 签名等见 ANDROID.md。
一键构建 APK 并上传到 GitHub Releases(需先安装 GitHub CLI 并执行 gh auth login):
release-android.bat| 用法 | 说明 |
|---|---|
release-android.bat |
读取 package.json 版本(如 0.1.0),创建 tag v0.1.0 并上传 APK |
release-android.bat 0.2.0 |
指定版本号 |
release-android.bat --draft |
创建为预发布(Draft) |
release-android.bat 0.2.0 --draft |
指定版本 + 预发布 |
流程:构建 debug APK → 复制为 release/FlashLog-v{版本}-debug.apk → gh release create 或覆盖上传已有 Release。
Release 说明模板:scripts/release-notes-template.md
下载链接(发布后可用):https://github.com/CallStorm/FlashLog/releases/latest
src/
pages/ Home, Messages, History, Analysis, Settings
components/ UI 组件(analysis/、ShareWorklogSheet 等)
services/ aiService, asrService, ttsService, export/, analysis/, reminderService
db/ workLogRepository
stores/ settingsStore, draftStore, pendingStore, analysisChatStore, themeStore
plugins/ headerWebSocket, targetedShare(Capacitor 桥接 Android 原生)
constants/ 默认配置、分析 Prompt 等
utils/ 日期、工时大类、音频处理等
assets/
demo/ README 演示 GIF
android/ Capacitor Android 工程
build-android-debug.bat 构建 debug APK
release-android.bat 构建并发布 GitHub Release
| 层级 | 选型 |
|---|---|
| UI | React 19 + TypeScript + Tailwind CSS 4 + Lucide React |
| 构建 | Vite 6 |
| 路由 | React Router 7 |
| 状态 | Zustand 5 |
| 壳 | Capacitor 8(@capacitor/android) |
| 敏感配置 | capacitor-secure-storage-plugin |
| 非敏感配置 | @capacitor/preferences |
| 工时数据 | @capacitor-community/sqlite(浏览器回退 localStorage) |
| 本地提醒 | @capacitor/local-notifications |
| 导出 | docx、xlsx、html-to-image |
自定义 Android 插件
HeaderWebSocketPlugin— ASR WebSocket 握手时写入火山鉴权 HeaderTargetedSharePlugin— 微信 / QQ / 企业微信定向分享
- 工时记录仅存本机,不出网
- 网络请求仅发往用户配置的 LLM / ASR / TTS endpoint
- API Key 存 Secure Storage(Android/iOS);浏览器开发时使用 Preferences
- Settings 页明确提示:第三方 API 调用费用由用户自行承担
FlashLog v0.1.0 · Capacitor + React
