Skip to content

gstarkg/BookFlow

Repository files navigation

页间

页间是一款面向个人阅读场景的 iOS 阅读 App。它关注纸质书和电子书之间的衔接:用户可以导入自己的 TXT / EPUB 文件阅读,也可以用纸书页面照片辅助定位电子书位置,并把阅读时的想法沉淀为卡片。

当前项目仍处于早期 TestFlight 阶段,功能和交互还在持续打磨。

功能

  • TXT / EPUB 本地导入
  • EPUB 封面解析和书架展示
  • 分页阅读和滚动阅读
  • 目录跳转和阅读进度恢复
  • 原生文本选择
  • 选中文字后进入 AI 聊天
  • AI 对话保存为读书卡片
  • 卡片详情、删除和回到原文
  • 纸书拍照 / 相册 OCR 定位
  • 电子书章节到纸质书页码范围映射
  • 跟随 iOS 系统浅色 / 深色模式

技术栈

  • React Native 0.85
  • React 19
  • TypeScript
  • iOS 原生 TextKit / Vision
  • SQLite: @op-engineering/op-sqlite
  • EPUB 解析: jszip + fast-xml-parser
  • AI: App -> 后端代理 -> DeepSeek

目录

src/
  components/
  screens/
  services/
  storage/
  theme/
  types/
ios/
  BookFlow/
serverless/
  deepseek-proxy/
docs/

本地运行

先安装依赖:

npm install

安装 iOS Pods:

bundle install
cd ios
bundle exec pod install
cd ..

复制环境变量:

cp .env.example .env

启动 Metro:

npm start

运行 iOS:

npm run ios

运行真机时可以指定设备:

npx react-native run-ios --device "你的 iPhone 名称"

AI 代理

客户端不直接保存 DeepSeek API Key。App 只读取:

AI_PROXY_BASE_URL=
AI_PROXY_CLIENT_TOKEN=

AI_PROXY_BASE_URL 指向你自己的后端代理。DeepSeek Key 应该只放在服务端环境变量里。

仓库提供了一个最小代理示例:

serverless/deepseek-proxy

代理环境变量:

DEEPSEEK_API_KEY=你的 DeepSeek API Key
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_MODEL=deepseek-chat
AI_PROXY_CLIENT_TOKEN=可选内测 token

AI_PROXY_CLIENT_TOKEN 只能作为内测期间的基础防误用措施,不应当成真正机密。

测试

npm test -- --runInBand
npm run lint
npx tsc --noEmit

TestFlight 前的手动回归清单见:

docs/TESTFLIGHT_REGRESSION_CHECKLIST.md

文档

  • docs/PRD.md
  • docs/TECH_SPEC.md
  • docs/DEVELOPMENT_PLAN.md
  • docs/APP_STORE_RELEASE_PLAN.md
  • docs/PRIVACY_POLICY_DRAFT.md
  • docs/TESTFLIGHT_REGRESSION_CHECKLIST.md

公开仓库注意事项

  • .env 不应提交。
  • 本地测试书籍、截图和临时文件放在 temp/,不会提交。
  • DeepSeek API Key 不应进入客户端或 Git 历史。
  • App Store / TestFlight 发布需要自己的 Apple Developer Team 和签名配置。

状态

当前已进入 TestFlight 测试准备阶段。正式上架前仍需要继续做稳定性回归、隐私政策发布、App Store 元数据和截图准备。

About

Local EPUB reader with paper book sync and reading cards

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors