# 技术方案

## 客户端

默认选 Web-first PWA。

技术栈：

- Vue 3 + TypeScript。
- Vite。
- PWA manifest + Service Worker。
- Vue Router。
- Pinia。
- Dexie + IndexedDB。

选择理由：

- 不需要应用商店安装。
- 更新由服务端发布，用户无需手动升级 App。
- 同一套代码覆盖 iOS、Android 和桌面浏览器。
- 账本主要是表单、列表、汇总和同步，Web 足够。

本地存储：

- IndexedDB 是客户端主数据源。
- 所有账目先写本地，再进入同步队列。
- Service Worker 缓存应用壳，使无网络时仍能打开。
- localStorage 只存轻量配置。

## 后端

默认选 Node.js + TypeScript + Fastify + PostgreSQL。

职责：

- 账号登录。
- 设备审批。
- 账本、成员和邀请管理。
- 按账本权限过滤数据访问。
- 同步 push/pull。
- 服务端变更日志。

## 测试

首期只做 Playwright 端到端测试。

覆盖重点：

- 手机视口下的核心操作。
- 账本权限和邀请。
- 离线记账。
- 恢复网络后的同步。

暂不引入单元测试和组件测试。

## 备选

### React Native

仅在这些情况再考虑：

- 必须应用商店分发。
- 必须强后台同步。
- 必须调用大量原生能力。
- PWA 在目标设备上体验不可接受。

### Supabase / Firebase

可以加快早期开发，但离线同步和冲突语义仍要自己把控。当前不作为默认方案。

## 工程结构

```text
apps/
  web/         # PWA Web App
services/
  api/         # Fastify API
packages/
  domain/      # 共享类型、同步操作定义
  db/          # 数据库 schema 和迁移
docs/
```
