add project docs and research materials; update arch doc with WSL2 dev setup
- docs/: 6 development documents (PRD, tech selection, architecture, risks, roadmap, design workflow) - research/: FIRE background materials, personal plan, Excel calculator - 03-架构设计.md: add Section 8 documenting WSL2 → Windows browser dev environment (Vite host config, access URLs, mobile debugging tip) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
# 01 · 需求文档(PRD)
|
||||
|
||||
> 个人 FIRE 自律 App | 版本 v0.1(MVP 定义)
|
||||
|
||||
## 一、背景与目标
|
||||
|
||||
用户已制定个人 FIRE 计划(详见 `../我的FIRE计划与建议.md`),核心诉求是:
|
||||
**"开发一个适合自己情况的、通用的 FIRE App,每天监督自己把行为对齐 FIRE 要求。"**
|
||||
|
||||
现有开源工具(Firefly III 等)偏专业记账、需自托管运维,且不做"每日行为自律"。因此决定自研一个**轻量、跨端、可自托管**的工具。
|
||||
|
||||
## 二、用户画像
|
||||
|
||||
| 维度 | 信息 |
|
||||
|---|---|
|
||||
| 年龄 | 40 岁以上 |
|
||||
| FIRE 路线 | **Barista FIRE(半退休)** |
|
||||
| 目标本金 | 约 43–71 万(中性取 71 万) |
|
||||
| 现状 | 起始本金 7 万,每月定投 1500,持有工商银行等 |
|
||||
| 技术条件 | 有腾讯云 VPS + 域名(certbot/HTTPS)、Synology NAS、可用 Docker;偏好数据自己掌握 |
|
||||
| 平台诉求 | 希望能打包成 **iOS + Android** App,最好不依赖 Mac |
|
||||
|
||||
## 三、产品定位
|
||||
|
||||
> 自托管、跨端的**个人 FIRE 自律工具** = 「自律闹钟」+「目标进度仪表盘」,**不是专业会计软件**。
|
||||
|
||||
设计原则:
|
||||
1. **每天 30 秒能用完** —— 自律优先,低摩擦。
|
||||
2. **绑定个人真实目标** —— 内置用户的 71 万目标、3.5% 提取率等参数。
|
||||
3. **数据自己掌握** —— 本地优先,可同步到自己的服务器(腾讯云 VPS)。
|
||||
4. **够用即可** —— 不追求复式记账级别的专业度。
|
||||
|
||||
## 四、功能需求(MVP 四大模块)
|
||||
|
||||
### 1. 每日行为打卡 🟥 核心
|
||||
- 每日勾选清单:✅记账了 ✅无冲动消费 ✅定投到账 ✅复盘。
|
||||
- 连续打卡天数、本月/本周完成率统计。
|
||||
- 目的:把"对齐 FIRE 行为"变成可坚持的日常习惯。
|
||||
|
||||
### 2. 目标进度 & 净资产
|
||||
- 录入当前资产,自动显示**距离 71 万目标的进度条**。
|
||||
- 储蓄率、净资产曲线。
|
||||
|
||||
### 3. FIRE 测算器
|
||||
- 搬入 `../FIRE可调测算表.xlsx` 的逻辑。
|
||||
- 可调参数:起始本金 / 每月定投 / 兼职收入 / 安全提取率 / 收益率。
|
||||
- 自动计算:目标本金、达成年限(保守/中性/乐观三档)。
|
||||
|
||||
### 4. 持仓 & 分红跟踪
|
||||
- 记录工行等持仓的成本/市值/股息率/分红。
|
||||
- 提醒:按估值加仓、分红复投。
|
||||
- ⚠️ 第一版**手动录入**,不接实时行情(见风险文档)。
|
||||
|
||||
## 五、非功能需求
|
||||
|
||||
- **跨端**:H5(网页/PWA)、App(iOS/Android),小程序可选(后置)。
|
||||
- **用户端骨架**:基于开源脚手架 **unibest**(uni-app + Vue3)。
|
||||
- **后端**:Go + Gin + GORM + SQLite,部署在用户腾讯云 VPS(Docker + Nginx + certbot HTTPS);NAS 可作备份/备选。
|
||||
- **管理端**:**Web 管理后台(无构建)**,Gin html/template + HTMX + Alpine + **Tabler**(Bootstrap5 后台皮肤),由 Go 进程直接托管(并入 `server/`),电脑端登录,用于数据增删改查、报表、参数调整;与用户端共用同一后端与数据库。单人自管,不做多用户权限。
|
||||
- **离线可用**:本地优先,联网时同步。
|
||||
- **隐私**:财务数据不经第三方云。
|
||||
|
||||
## 六、范围边界(本期不做)
|
||||
|
||||
- ❌ 复式记账 / 多账户专业账本(用 Firefly III 那类)。
|
||||
- ❌ 实时股票行情接入(数据源不稳定,先手动录入)。
|
||||
- ❌ 微信小程序首发(HTTPS 已就绪,但仍需域名 ICP 备案,故本期后置,见风险文档)。
|
||||
- ❌ 多用户 / 社交功能(个人自用)。
|
||||
|
||||
## 七、验收标准(MVP)
|
||||
|
||||
1. 浏览器(H5)中四大模块可用,数据本地持久化。
|
||||
2. 能打出可安装的 Android 包并在手机使用。
|
||||
3. 「打卡 + 目标进度」形成每日可用闭环。
|
||||
4. 测算器结果与 Excel 测算表一致。
|
||||
@@ -0,0 +1,63 @@
|
||||
# 02 · 技术选型
|
||||
|
||||
> 记录"如何把一套代码打包成 iOS + Android"的方案对比与最终决策。
|
||||
|
||||
## 一、候选方案对比
|
||||
|
||||
| 方案 | 原理 | iOS 免 Mac | 出微信小程序 | 自托管当网页 | 生态 |
|
||||
|---|---|---|---|---|---|
|
||||
| **uni-app** ✅选定 | Vue 语法,一套代码多端,HBuilderX 云打包 | ✅ 云打包 | ✅ | ✅(H5) | 中文/Vue |
|
||||
| Capacitor + React | 网页 App 套原生壳 | ❌ 需 Mac | ❌ | ✅(更原生) | React/英文 |
|
||||
| Flutter | Dart 编译双端原生 + Web | ❌ 需 Mac | ❌ | 一般 | Dart |
|
||||
| React Native / Expo | JS 原生组件,Expo 可云构建 | ⚠️ 可云构建 | ❌ | ❌ | React |
|
||||
|
||||
## 二、最终决策
|
||||
|
||||
**前端框架:经典 uni-app(Vue 3)**
|
||||
|
||||
选它的三个决定性理由(贴合用户约束):
|
||||
1. **iOS 能云打包,不用 Mac** —— 直接解决用户"没有 Mac 也想出 iOS 包"的痛点。
|
||||
2. **一套代码可顺手出微信小程序** —— 方便分享给家人/组员,免安装。
|
||||
3. **中文生态、文档、社区**,Vue 上手快,图表库(uCharts/qiun-data-charts)成熟。
|
||||
|
||||
> 为什么不用 uni-app x:性能更强但插件生态不成熟,财务仪表盘类用经典版(Vue)更省事。
|
||||
|
||||
## 三、必须明确的现实约束(iOS 相关)
|
||||
|
||||
uni-app 云打包能省掉 **Mac 电脑**,但**苹果的规矩绕不开**:
|
||||
|
||||
1. **Apple 开发者账号 $99/年** —— 想装到 iPhone(哪怕自用)就得有,框架无法豁免。
|
||||
2. **iOS 证书**(`.p12` + `.mobileprovision`)—— 没 Mac 也能生成,用在线工具(香蕉云编 / Appuploader)配合苹果开发者后台。
|
||||
3. **云打包在 HBuilderX 中操作** —— 需 DCloud 账号;此步由用户在 HBuilderX 点击完成,无法从命令行触发。
|
||||
|
||||
> 结论:uni-app 让"无 Mac 出 iOS 包"成立,但 $99/年苹果账号免不了。预算未定前,先用 H5/PWA + Android 自用。
|
||||
|
||||
## 四、技术栈清单
|
||||
|
||||
| 层 | 选型 |
|
||||
|---|---|
|
||||
| 用户端骨架 | **unibest**(uni-app + Vue3 + Vite + TS + UnoCSS + wot-ui,命令行开发不依赖 HBuilderX) |
|
||||
| 用户端页面 | 普通 vue 页面(**不用 nvue**) |
|
||||
| 图表 | qiun-data-charts(多端兼容封装) |
|
||||
| 用户端目标 | H5(网页/PWA) + App(iOS/Android 云打包) +(可选/后置)微信小程序 |
|
||||
| **后端** | **Go + Gin + GORM + SQLite(modernc 纯 Go 驱动)+ JWT**,Docker 部署于腾讯云 VPS;Nginx + certbot 提供 HTTPS |
|
||||
| **管理后台** | **无构建**:Gin html/template + HTMX + Alpine.js + **Tabler**(Bootstrap5 后台皮肤) + Chart.js,由 Go 进程直接托管(`//go:embed`),并入 `server/` |
|
||||
| 同步 | REST API(HTTPS) + 本地缓存(离线优先),简单时间戳同步策略 |
|
||||
| 鉴权 | 单用户 JWT |
|
||||
|
||||
### 后端语言决策:Go vs Node
|
||||
|
||||
选 **Go(Gin + GORM + SQLite)**。理由:单二进制部署、内存占用小、Docker 镜像极小,**更适合常驻的小 VPS 自托管**;前后端经 REST/JSON 解耦,后端用什么语言对 unibest 前端无影响。
|
||||
|
||||
**管理端形态:API + Web 管理后台,且管理后台采用「无构建」方案** —— Gin html/template + HTMX + Alpine + **Tabler 后台模板**,由 Go 进程直接渲染托管。Tabler(MIT,Bootstrap5)自带登录/侧边栏/仪表盘/表格等现成页面,是 admin 端等价于 unibest 的"带基本模块骨架",且 CSS/JS 预编译、无需 build。放弃 Vue3+Element Plus(需独立 build/子项目) 与 gin-vue-admin/GoFrame(偏重),换来零 Node 工具链、单二进制、仓库更简单。
|
||||
|
||||
## 五、开发分工
|
||||
|
||||
- **AI(在 WSL)**:基于 unibest 搭用户端、写四大功能、H5 实时预览;写 Go(Gin) 后端 + 无构建管理后台(html/template+HTMX);给出 VPS 部署 + certbot HTTPS 步骤。
|
||||
- **用户**:装 HBuilderX 导入项目 → 点云打包出 App;按教程办苹果账号/生成证书;在腾讯云 VPS 跑后端容器(如需小程序则办域名备案)。
|
||||
|
||||
## 六、用户需准备(按阶段)
|
||||
|
||||
- 现在:HBuilderX(免费)+ DCloud 账号。
|
||||
- 出 Android:基本零成本。
|
||||
- 出 iOS:Apple 开发者账号 $99/年(界面稳定、确定要上 iOS 时再办)。
|
||||
+169
@@ -0,0 +1,169 @@
|
||||
# 03 · 架构设计
|
||||
|
||||
> 用户端(uni-app 多端) + 管理后台(Web) + 腾讯云 VPS 后端(Go·域名·certbot HTTPS) + 本地优先同步。
|
||||
|
||||
## 一、整体架构图
|
||||
|
||||
```
|
||||
用户端(unibest / uni-app · Vue3) 后端(腾讯云 VPS · Docker · HTTPS)
|
||||
┌─────────────────────────────┐ ┌────────────────────────────┐
|
||||
│ ① 每日打卡 │ │ 域名 + Nginx + certbot │
|
||||
│ ② 目标进度 & 净资产曲线 │ HTTPS │ Go + Gin + GORM │
|
||||
│ ③ FIRE 测算器 │ ─REST→ │ ├─ JWT 单用户鉴权 │
|
||||
│ ④ 持仓 & 分红跟踪 │ ←同步─ │ ├─ API: 打卡/快照/持仓/设置 │
|
||||
│ 本地缓存(离线优先) │ │ └─ SQLite(纯Go驱动·可备份) │
|
||||
└─────────────────────────────┘ └────────────────────────────┘
|
||||
│ 由同一个 Go 进程托管 ▲
|
||||
├─ 浏览器 → 网页 / PWA │ html/template
|
||||
├─ 云打包 → Android (.apk/.aab) │ 渲染(共用DB)
|
||||
└─ 云打包 → iOS (.ipa,需苹果账号) ┌─────────────────────────┐
|
||||
│ 管理后台(Web · 电脑端) │
|
||||
│ Gin html/template + │
|
||||
│ HTMX + Alpine + Tabler │
|
||||
│ 无构建·数据增删改查/报表 │
|
||||
└─────────────────────────┘
|
||||
```
|
||||
|
||||
## 二、前端结构
|
||||
|
||||
- **页面**:四大模块各一主页面 + 设置页,普通 vue 页面(不碰 nvue)。
|
||||
- **图表**:统一用 qiun-data-charts,图表页避免 nvue,数据做抽稀。
|
||||
- **状态/数据层**:本地优先,所有读写先走"存储抽象层",再异步同步到后端。
|
||||
|
||||
### 存储抽象层(关键设计)
|
||||
|
||||
各端存储能力不同,必须封装统一接口,内部用条件编译分端实现:
|
||||
|
||||
| 端 | 底层实现 | 注意 |
|
||||
|---|---|---|
|
||||
| H5 | IndexedDB(大数据)/ localStorage | localStorage ~5MB 上限 |
|
||||
| App | uni.storage / 原生 SQLite 插件 | 历史快照/流水量大时用 SQLite |
|
||||
| 小程序 | uni.storage | 总量约 10MB,存流水易爆 |
|
||||
|
||||
```
|
||||
interface Store {
|
||||
get(key), set(key, val), query(table, filter), bulkSave(...)
|
||||
}
|
||||
// #ifdef H5 → IndexedDB 实现
|
||||
// #ifdef APP-PLUS → SQLite/uni.storage 实现
|
||||
// #ifdef MP → uni.storage 实现
|
||||
```
|
||||
|
||||
## 三、后端结构(腾讯云 VPS · Go)
|
||||
|
||||
- **技术栈**:**Go + Gin(Web)+ GORM(ORM)+ SQLite**(纯 Go 驱动 `modernc.org/sqlite`,免 CGO,编译/部署最省心)+ **JWT** 鉴权。
|
||||
- **部署**:编译为**单个静态二进制**,Docker 化部署到腾讯云 VPS;前置 **Nginx 反向代理**,由 **certbot(Let's Encrypt)** 签发并自动续期 HTTPS。
|
||||
- **域名**:使用用户已有域名,解析到 VPS 公网 IP。
|
||||
- **数据表(初版)**:`checkins`(打卡)、`snapshots`(资产快照)、`holdings`(持仓)、`settings`(参数)、`users`(单用户)。
|
||||
- **接口**:标准 REST(增删改查 + 拉取增量),全程 HTTPS;用户端与管理后台**共用同一套 API**。
|
||||
- **备份**:SQLite 单文件,定时备份到对象存储/本地。
|
||||
|
||||
> 为什么用 Go 而非 Node:单二进制、内存占用小、Docker 镜像可压到几 MB,**更适合常驻的小 VPS 自托管**;前后端经 REST/JSON 解耦,后端语言对 uni-app 前端无影响。
|
||||
|
||||
## 三-B、管理后台(Web 管理端 · 无构建)
|
||||
|
||||
- **定位**:电脑端网页,给本人用来**增删改查数据、查看报表、调整参数**(如目标本金、提取率、收益率假设)。
|
||||
- **技术(无构建)**:**Gin html/template 服务端渲染 + HTMX(局部刷新)+ Alpine.js(小交互)+ Tabler 后台模板(Bootstrap5,自带登录/侧边栏/仪表盘/表格/表单皮肤)+ Chart.js(图表)**。全部走 `<script>`/`<link>` 引入,**不需要 Node 工具链、不需要 build**。
|
||||
- **骨架**:直接采用 **Tabler** 现成页面(登录、侧边栏布局、仪表盘卡片、表格表单),相当于 admin 端的 unibest。
|
||||
- **托管**:由**同一个 Go 进程**直接渲染并提供(路由如 `/admin/*`);模板与静态资源用 `//go:embed` 打进二进制 → 部署仍是单文件。
|
||||
- **数据**:与用户端**共用同一个 Go 后端与 SQLite**(HTMX 路由返回 HTML 片段,不另起服务)。
|
||||
- **鉴权**:JWT/会话,单用户。
|
||||
- **范围**:单人自管,不做多用户/复杂权限。
|
||||
|
||||
> 为什么不用 Vue3+Element Plus:那需要独立 build 流水线和 `admin/` 子项目。管理端本质是 CRUD+报表,用 HTMX 超媒体方案**零构建、Go 一把托管**,仓库更简单、部署仍单二进制。
|
||||
|
||||
## 四、同步策略(刻意从简)
|
||||
|
||||
单用户场景不追求复杂冲突合并:
|
||||
1. **本地优先**:所有操作先写本地、立即可用、离线可用。
|
||||
2. **时间戳 + 后写覆盖**:每条记录带 `updatedAt`,同步时以较新者为准。
|
||||
3. **后端为历史数据权威源**:本地仅作缓存,换设备从后端拉全量。
|
||||
|
||||
> 不使用 uniCloud(绑定 DCloud 云,非自托管),坚持自建 VPS 后端。
|
||||
|
||||
## 五、各端后端连通性注意
|
||||
|
||||
> 已有「域名 + certbot 正经 HTTPS」后,App / H5 的后端要求**全部满足**;小程序只剩"域名备案 + 配置合法域名白名单"一步。
|
||||
|
||||
| 端 | 对后端要求 | 当前状态(VPS + 域名 + certbot) |
|
||||
|---|---|---|
|
||||
| H5 | 需处理 CORS | ✅ 同域部署或配置 CORS 即可 |
|
||||
| App | 正经 HTTPS | ✅ certbot 证书满足,不再有自签被拒问题 |
|
||||
| 小程序 | 强制 HTTPS + **备案域名** + 合法域名白名单 | ⚠️ HTTPS 已满足;仅需**域名 ICP 备案**(腾讯云可办)+ 小程序后台配 request 合法域名 |
|
||||
|
||||
## 六、HTTPS 与安全(腾讯云 VPS)
|
||||
|
||||
- **HTTPS**:域名解析到 VPS → Nginx 占用 80/443 → `certbot --nginx` 签发证书 → 自动续期(`certbot renew` cron/timer)。
|
||||
- **安全加固(后端已暴露公网,务必做)**:
|
||||
- 仅开放必要端口(80/443/SSH),其余用腾讯云安全组 + 防火墙关闭;
|
||||
- 强 Token/密码鉴权,接口加速率限制,**强制 HTTPS(HTTP 301 跳转)**;
|
||||
- SSH 改密钥登录、装 fail2ban;
|
||||
- SQLite 定时备份;财务数据在公网,敏感字段可考虑加密存储。
|
||||
|
||||
## 七、部署形态
|
||||
|
||||
- **开发期**:WSL 内 `pnpm dev:h5` 跑 unibest 前端实时预览;`go run` 起 Go 后端(同时托管管理后台 `/admin`,改模板刷新即见,无需 build)。
|
||||
- **自用期**:Go 后端二进制 Docker 跑在**腾讯云 VPS**(Nginx + certbot HTTPS),管理后台由 Go 进程自身托管;用户端 H5 静态文件由 Nginx 同域托管;手机装 PWA。
|
||||
- **App 期**:HBuilderX 云打包出 Android/iOS。
|
||||
|
||||
## 八、WSL2 开发环境配置
|
||||
|
||||
> 在 WSL2 Ubuntu 中开发,Windows 浏览器中预览——这是本项目的标准开发模式。
|
||||
|
||||
### 原理
|
||||
|
||||
WSL2 会自动将内部端口转发到 Windows 的 `localhost`,所以 WSL2 里启动的 dev server,Windows 浏览器直接用 `http://localhost:端口` 访问,热更新也正常生效。
|
||||
|
||||
### 必须的 Vite 配置
|
||||
|
||||
Vite 默认只监听 `127.0.0.1`(WSL2 内部),需改为监听所有网卡,否则 Windows 浏览器无法访问。
|
||||
|
||||
在 `app/vite.config.ts` 中添加:
|
||||
|
||||
```ts
|
||||
server: {
|
||||
host: '0.0.0.0', // 允许 WSL2 外部(Windows)访问
|
||||
port: 5173,
|
||||
},
|
||||
```
|
||||
|
||||
或临时用命令行参数(不改配置时):
|
||||
|
||||
```bash
|
||||
pnpm dev:h5 --host
|
||||
```
|
||||
|
||||
### 访问方式
|
||||
|
||||
| 场景 | 地址 |
|
||||
|---|---|
|
||||
| Windows 浏览器调试 | `http://localhost:5173` |
|
||||
| 手机扫码调试(同 WiFi) | `http://<Windows局域网IP>:5173`(`ipconfig` 查 WiFi 的 IPv4) |
|
||||
|
||||
> 注意:手机调试时用的是 **Windows 的局域网 IP**,不是 WSL2 的内部 IP(`172.x.x.x`)。
|
||||
|
||||
### 开发流程示意
|
||||
|
||||
```
|
||||
WSL2 Ubuntu
|
||||
├─ pnpm dev:h5 --host → Vite 监听 0.0.0.0:5173
|
||||
└─ go run . → Go 后端监听 0.0.0.0:8080
|
||||
↓ WSL2 自动转发
|
||||
Windows
|
||||
├─ Chrome localhost:5173 ✅ 前端热更新正常
|
||||
└─ 接口请求 localhost:8080 ✅ 后端 API 正常
|
||||
```
|
||||
|
||||
## 九、代码仓库结构(建议)
|
||||
|
||||
```
|
||||
fire_goal/
|
||||
├─ app/ # unibest 用户端(uni-app,需 build 出 H5/App)
|
||||
├─ server/ # Go 后端(Gin + GORM + SQLite)
|
||||
│ ├─ templates/ # 管理后台 html/template(无构建)
|
||||
│ └─ static/ # htmx/alpine/tabler/chart.js 等,//go:embed 进二进制
|
||||
├─ deploy/ # Dockerfile / docker-compose / Nginx / certbot 脚本
|
||||
└─ docs/ # 本文档目录
|
||||
```
|
||||
|
||||
> 管理后台不再是独立子项目,已并入 `server/`(模板 + 静态资源),与后端同进程、同部署。
|
||||
@@ -0,0 +1,58 @@
|
||||
# 04 · 风险与避坑
|
||||
|
||||
> uni-app 开发本类 app(自托管财务 + 多端 + 自律打卡)会踩的坑,按对本项目的杀伤力排序。
|
||||
|
||||
## ✅ 已化解:原一级坑「小程序 ✕ 自托管后端」
|
||||
|
||||
> 用户已具备**腾讯云 VPS + 域名 + certbot(Let's Encrypt)HTTPS**,后端从家用 NAS 迁到公网 VPS,此坑基本解除。
|
||||
|
||||
微信小程序对后端的硬性要求:**强制 HTTPS + 域名已备案 + request 合法域名白名单**,**不接受 IP / 内网地址 / 自签证书**。
|
||||
- **现状**:VPS 公网 IP + 正经域名 + certbot 正规证书 → **HTTPS、合法证书、公网域名均满足**;App / H5 后端要求**全部达标**。
|
||||
- **小程序仅剩一步**:**域名 ICP 备案**(腾讯云可办)+ 在小程序后台配 request 合法域名白名单。备案完成后小程序即可纳入。
|
||||
- **遗留注意**:后端已暴露公网,需做安全加固(端口最小化、强鉴权、限流、强制 HTTPS、SSH 密钥 + fail2ban、SQLite 定时备份)——详见架构文档第六节。
|
||||
|
||||
### 2. 跨端"本地存储 + 离线同步"无统一方案
|
||||
各端存储能力不同(H5 IndexedDB / App SQLite / 小程序 storage 约 10MB),且 uni 无现成离线同步轮子(uniCloud 绑 DCloud 云,用不上)。
|
||||
- **规避**:① 做"存储抽象层"分端实现;② 同步用最简单的**时间戳 + 后写覆盖**;③ 历史数据以后端为准,本地仅缓存。
|
||||
|
||||
## 🟡 二级坑:拖慢进度、磨耐心
|
||||
|
||||
### 3. 图表 canvas 坑
|
||||
uCharts/qiun-data-charts 基于 canvas:小程序里 canvas 层级最高会盖住弹窗、数据多会卡、nvue 下行为又不同。
|
||||
- **规避**:统一用 qiun-data-charts;图表页不用 nvue;数据抽稀。
|
||||
|
||||
### 4. iOS 云打包 / 证书第一次必踩
|
||||
`.p12` + `.mobileprovision` + bundleId 配置繁琐,首次几乎一定失败;云打包免费版有排队/次数限制。
|
||||
- **规避**:跟香蕉云编/Appuploader 图文教程走,预留半天踩证书。
|
||||
|
||||
### 5. iOS 审核:金融类是高拒审区
|
||||
工具内容单薄触发 4.2「最低功能」;涉及"理财/投资/收益"可能触发 3.1.1 或被要求金融资质(个人开发者难)。
|
||||
- **规避**:**自用就别上架**(用 ad-hoc / PWA);若上架,措辞避开"投资建议/收益",定位"个人记账与目标管理工具"。
|
||||
|
||||
### 6. 样式多端不一致
|
||||
rpx 换算、iOS 安全区、状态栏、**键盘顶起输入框**、滚动穿透等表现各端不同;测算器输入框多,键盘遮挡尤甚。
|
||||
- **规避**:用 uni 安全区变量、page-meta;表单做键盘适配测试。
|
||||
|
||||
## 🟢 三级坑:知道即可
|
||||
|
||||
- **nvue 陷阱**:只支持 flex、CSS 受限、与 vue 混用割裂 → **全程用普通 vue 页面,不碰 nvue**。
|
||||
- **插件市场质量参差**:收费/失修/文档差,跨端 bug 难定位 → 少依赖第三方原生插件。
|
||||
- **HBuilderX 耦合**:云打包/原生插件偏 GUI;CLI 项目导入偶有适配问题 → 用 HBuilderX 友好的结构搭项目。
|
||||
- **wgt 热更新**:iOS 政策禁止用热更新改核心功能/绕审核,上架要克制(自用可放心)。
|
||||
- **股票行情/分红数据源**:无稳定免费官方 API,第三方不稳、小程序卡白名单 → 持仓页**先手动录入**。
|
||||
|
||||
## 🎯 本项目最该担心的 Top 3(已更新)
|
||||
|
||||
1. ~~小程序 vs 自托管 NAS 的 HTTPS 矛盾~~ → **已由 VPS + 域名 + certbot 化解**;小程序只剩域名备案。
|
||||
2. **跨端存储 + 离线同步要自己造** → 存储抽象层 + 简单时间戳同步。(当前头号难点)
|
||||
3. **iOS 金融类上架/证书** → 自用不上架,走 PWA/ad-hoc,规避资质风险。
|
||||
4. **公网后端安全**(新增)→ VPS 暴露财务数据于公网,须加固(见架构文档第六节)。
|
||||
|
||||
## 避坑总原则
|
||||
|
||||
- 范围先收:**第一版只做 H5(PWA) + 安卓包**(安卓出包免费免账号)。
|
||||
- iOS 等界面稳定后再云打包。
|
||||
- 小程序**待域名备案完成后**即可纳入(不再是硬阻塞)。
|
||||
- 后端上公网即做安全加固。
|
||||
- 全程普通 vue + qiun-data-charts + 存储抽象层;不碰 nvue、少用第三方原生插件。
|
||||
- 持仓/分红先手动录入,不接实时行情。
|
||||
@@ -0,0 +1,76 @@
|
||||
# 05 · 开发计划与路线图
|
||||
|
||||
> 基于风险分析得出的"避坑版"分阶段路线:先能用,再加码。
|
||||
|
||||
## 一、总原则
|
||||
|
||||
把范围收一收,按"平台由易到难"推进(后端已有 VPS + 域名 + certbot HTTPS,连通性不再是阻塞):
|
||||
1. 第一版只做 **H5(PWA) + 安卓包**(安卓免费免账号)。
|
||||
2. iOS 等界面稳定后再云打包。
|
||||
3. 微信小程序**待域名备案完成后**纳入(HTTPS 已就绪,不再硬阻塞)。
|
||||
4. 全程普通 vue + qiun-data-charts + 存储抽象层;不碰 nvue。
|
||||
5. 持仓/分红先手动录入,不接实时行情。
|
||||
6. 后端上公网即做安全加固。
|
||||
|
||||
## 二、分阶段路线图
|
||||
|
||||
### 阶段 1 · 骨架 + 核心两功能(本地优先)
|
||||
- 基于 **unibest** 初始化用户端项目,裁剪到所需结构。
|
||||
- 实现「每日打卡」+「目标进度 & 净资产」。
|
||||
- 数据先存本地(存储抽象层 H5 实现)。
|
||||
- **交付**:WSL 中 `pnpm dev:h5`,浏览器可见可用。
|
||||
|
||||
### 阶段 2 · 补齐另两功能
|
||||
- 「FIRE 测算器」(搬入 Excel 逻辑,结果与测算表一致)。
|
||||
- 「持仓 & 分红跟踪」(手动录入)。
|
||||
- **交付**:四大模块在 H5 完整可用。
|
||||
|
||||
### 阶段 3 · Go 后端 + 同步
|
||||
- **Go + Gin + GORM + SQLite + JWT**,编译单二进制,Docker 部署到腾讯云 VPS。
|
||||
- 配置域名解析 + Nginx + **certbot 签发 HTTPS**(自动续期)。
|
||||
- 用户端接入本地优先 + 时间戳同步;做基础安全加固。
|
||||
- **交付**:多设备数据同步(HTTPS)。
|
||||
|
||||
### 阶段 4 · 管理后台(Web 管理端 · 无构建)
|
||||
- **Gin html/template + HTMX + Alpine + Tabler(Bootstrap5 皮肤) + Chart.js**,基于 Tabler 现成页面骨架开发,由 Go 进程直接托管(`/admin`),并入 `server/`。
|
||||
- 数据增删改查、报表、参数调整(目标本金/提取率/收益率)。
|
||||
- 模板与静态资源 `//go:embed` 进二进制,无 Node 工具链、无 build。
|
||||
- **交付**:电脑端可登录管理数据。
|
||||
|
||||
### 阶段 5 · 打包上手机
|
||||
- 配置 PWA;HBuilderX 云打包出 **Android 包**安装试用。
|
||||
- **交付**:手机可安装使用。
|
||||
|
||||
### 阶段 6(可选)· iOS
|
||||
- 办 Apple 开发者账号、在线生成证书、云打包出 iOS 包。
|
||||
- **前提**:界面稳定、确定要上 iOS。
|
||||
|
||||
### 阶段 7(可选)· 微信小程序
|
||||
- HTTPS 已由 VPS + certbot 就绪;**完成域名 ICP 备案**(腾讯云办理)+ 小程序后台配 request 合法域名后即可纳入。
|
||||
|
||||
## 三、里程碑与验收
|
||||
|
||||
| 里程碑 | 标志 |
|
||||
|---|---|
|
||||
| M1 | 打卡 + 目标进度在浏览器可用,本地持久化 |
|
||||
| M2 | 四大模块齐全,测算器与 Excel 一致 |
|
||||
| M3 | Go 后端跑通(HTTPS),多设备同步 |
|
||||
| M4 | 管理后台可登录、管理数据 |
|
||||
| M5 | 安卓包装机,形成每日使用闭环 |
|
||||
| M6(可选) | iOS 包装机 |
|
||||
|
||||
## 四、分工
|
||||
|
||||
- **AI(WSL)**:搭骨架、写四大功能、H5 预览调试、写后端、给出 VPS 部署 + certbot HTTPS 与打包/证书图文步骤。
|
||||
- **用户**:装 HBuilderX 导入项目点云打包;按需办苹果账号/生成证书;在腾讯云 VPS 跑后端容器(如需小程序则办域名备案)。
|
||||
|
||||
## 五、待用户拍板的事项
|
||||
|
||||
1. 是否按"避坑版"先做 H5 + 安卓(推荐)。
|
||||
2. 后端是第一阶段就上 **腾讯云 VPS**,还是**先纯本地、VPS 缓接**(更快出可用版本)。
|
||||
3. iOS 是否纳入本期(涉及 $99/年苹果账号)。
|
||||
4. 是否办**域名 ICP 备案**以解锁微信小程序端(备案约需数日至数周)。
|
||||
|
||||
## 六、下一步
|
||||
|
||||
待用户确认后,从**阶段 1**开始:搭骨架 + 「每日打卡」+「目标进度」,在浏览器中先看效果。
|
||||
@@ -0,0 +1,88 @@
|
||||
# 06 · 设计协作方案
|
||||
|
||||
> 线上原型/UI 设计服务的选型,以及如何衔接本地开发(unibest 用户端 + Tabler 管理后台)。
|
||||
|
||||
## 一、设计分两个阶段
|
||||
|
||||
1. **原型**:画页面流程、点击跳转、低/高保真线框,先把"有哪些页面、怎么跳"定下来。
|
||||
2. **UI 设计 + 交付**:出高保真视觉稿、设计令牌(颜色/间距/字体),并把规格交付给开发。
|
||||
|
||||
## 二、线上服务选型(国内可用优先)
|
||||
|
||||
> 用户在国内 + 用腾讯云,优先选国产、免费、**支持 MCP**(MCP 是衔接本地开发的关键)。
|
||||
|
||||
| 用途 | 推荐 | 说明 |
|
||||
|---|---|---|
|
||||
| UI 设计主力 | **Pixso / 即时设计 / MasterGo**(三选一) | Figma 国产替代,免费无墙,**均已支持 MCP 设计稿转代码** |
|
||||
| 交互原型 | **墨刀 Modao** | 国产经典快速原型,适合先跑通页面流程/跳转 |
|
||||
| 交付/标注 | **腾讯 CoDesign** | 腾讯自研,与腾讯云生态一致;导入 Figma/MasterGo/Pixso/Axure,自动生成 CSS/iOS/Android 样式 |
|
||||
| 国际备选 | **Figma** | 功能最强,2026-02 已与 Claude Code **官方双向集成**(设计↔代码);国内访问需解决网络 |
|
||||
|
||||
选型建议:单人自用三个国产工具差别不大。**Pixso**(MCP 起步早、文档全)或 **即时设计**(免费额度大、可导入 Figma 文件)优先。
|
||||
|
||||
## 三、衔接本地开发的 4 条路径(从强到弱)
|
||||
|
||||
### ⭐ 路径 1:MCP 直连 Claude Code(最推荐)
|
||||
设计工具开放 **MCP 服务**,Claude Code 直接读取画板:节点树、组件、布局约束、**设计令牌**、切图引用,并生成匹配代码。
|
||||
- **Figma**:桌面端 → Preferences → 启用本地 MCP Server → Dev Mode;Claude Code 装 Figma 插件或 `claude mcp add` 接入。
|
||||
- **Pixso / MasterGo / 即时设计**:各自提供 MCP,按其文档配置进 Claude Code。
|
||||
- 效果:在设计稿选中页面 → AI 读规格 → 落成 **unibest 的 Vue 页面** 或 **Tabler 的 HTML 模板**。
|
||||
|
||||
### 路径 2:Dev Mode / 开发者模式标注交付
|
||||
不接 MCP 时的传统方式:在"开发者模式"量间距、取色值、看字号、导出切图(SVG/PNG),据此手写代码。CoDesign 这一环成熟。
|
||||
|
||||
### 路径 3:设计令牌(Design Tokens)→ CSS 变量
|
||||
把颜色/圆角/间距/字体导出为 **CSS 变量**,让 **unibest 与 Tabler 共用一套主题**,App 与管理后台视觉统一、改主题改一处。**建议必做**。
|
||||
|
||||
### 路径 4:设计转代码插件(仅作参考)
|
||||
Visual Copilot(Builder.io)、Anima、Locofy,及 Pixso/MasterGo 自带转代码。
|
||||
|
||||
## 四、⚠️ 对本项目技术栈的现实提醒
|
||||
|
||||
自动"设计转代码"多输出**通用 React/HTML/Tailwind**,而本项目是 **uni-app(Vue3 + 特有组件 + rpx 单位)** 与 **Tabler(Bootstrap 类名)**——**自动导出的代码基本不能直接用**(类名/组件/单位都对不上)。
|
||||
|
||||
因此**最靠谱的工作流**:
|
||||
|
||||
```
|
||||
设计工具(高保真 + 原型 + 设计令牌)
|
||||
│ MCP 提供"精确规格"
|
||||
▼
|
||||
Claude Code 按规格落地到 unibest / Tabler
|
||||
│
|
||||
▼
|
||||
本地 pnpm dev:h5 / go run 预览 → 迭代
|
||||
```
|
||||
|
||||
**设计工具负责"长什么样"与"令牌",落地到框架由 AI 手写**,保证代码干净可维护。
|
||||
|
||||
## 五、推荐工作流(按投入分档)
|
||||
|
||||
### 轻量档(建议先用)
|
||||
1. **墨刀**画原型,定页面流程;
|
||||
2. **Pixso / 即时设计** 出关键页面高保真 + **设计令牌**;
|
||||
3. 其余交给 Claude Code 用 `ui-ux-pro-max` / `frontend-design` 技能在 unibest/Tabler 中实现。
|
||||
|
||||
### 完整档
|
||||
选一个工具(Pixso/Figma)做全套设计 → **接 MCP 到 Claude Code** → 逐页像素级还原。
|
||||
|
||||
### 零外部工具档
|
||||
跳过设计软件,直接由 Claude Code 用设计技能产出页面,看效果再调。对 4 页面的自用 App 往往最快。
|
||||
|
||||
## 六、落地到本项目的对接规范
|
||||
|
||||
1. **设计令牌统一**:在设计工具里定义并导出 → 生成 `tokens.css`(CSS 变量),unibest 与 Tabler 同时引用。
|
||||
- 命名建议:`--color-primary`、`--color-success`、`--radius-card`、`--space-*`、`--font-size-*`。
|
||||
2. **两套界面共用令牌**:
|
||||
- 用户端(unibest):在全局样式引入令牌;图表色取自令牌。
|
||||
- 管理后台(Tabler):覆盖 Tabler 的 Bootstrap 变量为同一套令牌。
|
||||
3. **切图规范**:图标优先 SVG;位图导出 2x;统一放 `app/static/` 与 `server/static/`。
|
||||
4. **页面清单对齐**:设计稿页面与 PRD 四大模块一一对应(打卡 / 目标进度 / 测算器 / 持仓)。
|
||||
|
||||
## 七、相关链接
|
||||
|
||||
- Figma MCP 指南:https://help.figma.com/hc/en-us/articles/32132100833559-Guide-to-the-Figma-MCP-server
|
||||
- Claude Code 接入 Figma MCP:https://help.figma.com/hc/en-us/articles/39888612464151-Claude-Code-and-Figma-Set-up-the-MCP-server
|
||||
- Figma × Claude Code 双向集成:https://www.figma.com/blog/introducing-claude-code-to-figma/
|
||||
- Pixso MCP:https://pixso.cn/mcp/
|
||||
- MasterGo MCP 转代码:https://help.aliyun.com/zh/lingma/use-cases/use-lingma-mastergo-mcp-to-transforming-mastergo-design-draft-into-front-end-code
|
||||
- 腾讯 CoDesign:https://codesign.qq.com/
|
||||
@@ -0,0 +1,25 @@
|
||||
# FIRE App 开发文档
|
||||
|
||||
> 本目录是「个人 FIRE 自律 App」的开发流程文档,按软件工程标准流程整理自前期需求沟通。
|
||||
> 整理日期:2026-06-08
|
||||
|
||||
## 文档索引
|
||||
|
||||
| 序号 | 文档 | 内容 |
|
||||
|---|---|---|
|
||||
| 01 | [需求文档(PRD)](./01-需求文档-PRD.md) | 用户画像、目标、四大功能、范围边界 |
|
||||
| 02 | [技术选型](./02-技术选型.md) | uni-app vs Capacitor/Flutter/RN,最终决策与理由 |
|
||||
| 03 | [架构设计](./03-架构设计.md) | unibest 用户端、Go 后端(VPS+certbot)、无构建管理后台(HTMX)、存储与同步 |
|
||||
| 04 | [风险与避坑](./04-风险与避坑.md) | uni-app 开发本类 app 的坑及规避策略 |
|
||||
| 05 | [开发计划与路线图](./05-开发计划与路线图.md) | MVP 范围、分阶段排期、分工 |
|
||||
| 06 | [设计协作方案](./06-设计协作方案.md) | 线上原型/UI 服务选型、MCP 衔接本地开发、令牌对接 |
|
||||
|
||||
## 一句话项目定位
|
||||
|
||||
> 一个**自托管、跨端(H5/App/小程序)的个人 FIRE 自律工具**:每天监督自己的理财行为对齐 FIRE 要求,并可视化「距离 Barista FIRE 目标」的进度。
|
||||
|
||||
## 相关背景文档(项目根目录)
|
||||
|
||||
- `../F.I.R.E生活.txt` —— FIRE 理念与中国国情适配资料
|
||||
- `../我的FIRE计划与建议.md` —— 用户的个人 FIRE 计划(Barista 路线、71 万目标等)
|
||||
- `../FIRE可调测算表.xlsx` —— 可调参数测算表(App「测算器」功能的逻辑原型)
|
||||
Reference in New Issue
Block a user