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:
ila
2026-06-08 09:21:04 +08:00
co-authored by Claude Sonnet 4.6
parent 866cc0cd71
commit d558da51a6
13 changed files with 943 additions and 13 deletions
+75
View File
@@ -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 测算表一致。
+63
View File
@@ -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
View File
@@ -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/`(模板 + 静态资源),与后端同进程、同部署。
+58
View File
@@ -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、少用第三方原生插件。
- 持仓/分红先手动录入,不接实时行情。
+76
View File
@@ -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**开始:搭骨架 + 「每日打卡」+「目标进度」,在浏览器中先看效果。
+88
View File
@@ -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/
+25
View File
@@ -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「测算器」功能的逻辑原型)
+107
View File
@@ -0,0 +1,107 @@
FIRE(the Financial Independence, Retire Early movement 的缩写),这一运动兴起于美国,愿望是"财务独立,提早退休"。之前这个运动的一个核心法则是:降低物欲、过极简的生活,来迅速攒够一年生活费的25倍。(但这不是本组的核心目的,小组愿景是通过理性消费,资产合理规划,达到家庭收入合理增长,从而实现一定程度的自由/人生选择权,走上热爱生活的路途,做每天微笑的工作。)
================================================================
一、FIRE 的核心理念
================================================================
FIRE 不等于"躺平不工作",而是先用一段时间高强度地积累资产,让被动收入(投资收益、租金等)能够覆盖日常开销,从此"为不为钱而工作"拥有选择权。三个关键词:
1. 开源——提高主动收入(主业、副业、技能变现)。
2. 节流——理性消费,提高储蓄率(这是最可控的变量)。
3. 投资——让钱生钱,靠复利与合理的资产配置长期增值。
储蓄率才是 FIRE 的真正引擎:储蓄率越高,达到 FIRE 所需年限越短。
- 储蓄率 50%,约 17 年可达到财务独立;
- 储蓄率 65%,约 10.5 年;
- 储蓄率 75%,约 7 年。
(以上为经典 FIRE 测算,假设年化约 5% 实际收益,仅供理解储蓄率的威力,并非承诺。)
================================================================
二、4% 法则 / 25 倍法则(以及在中国为什么要打折)
================================================================
经典公式:
FIRE 目标本金 = 年支出 ÷ 4% = 年支出 × 25
例:若家庭一年开销 12 万元,则目标本金 = 12 万 × 25 = 300 万元。
退休后每年从投资组合中提取约 4%(并按通胀逐年微调),理论上 30 年内耗尽资金的概率很低。
⚠️ 重要提醒——4% 法则在中国需要"打折使用":
1. 4% 法则源自美国 1926–1995 年股债历史回测(Trinity Study),基于 60% 股票 + 40% 债券的高长期回报环境。
2. 中国处于相对低利率环境,无风险收益(国债、存款)已降到较低水平,债券端难以支撑 4% 的稳定提取。
3. A 股波动大、长期年化回报不稳定,"序列收益风险"(退休初期遇到熊市)更明显。
4. 缺少美国式的高福利兜底,医疗、养老需要自己预留更多缓冲。
5. 提前退休的人无法领取社保养老金(需到法定退休年龄),中间是"空窗期"。
✅ 适合中国的更稳健做法:
- 把提取率从 4% 下调到 3%~3.5%,即目标本金提高到 年支出 × 28~33 倍。
例:年支出 12 万,按 3.5% 计 = 343 万;按 3% 计 = 400 万。
- 单独预留一笔"医疗 + 应急基金"(建议 1~2 年支出的现金/货基),不计入投资本金。
- 房贷、子女教育、父母赡养等大额刚性支出,单独建模,不要笼统塞进"年支出"。
================================================================
三、FIRE 的几种类型(按"退休后状态"区分,选最适合自己的)
================================================================
1. Lean FIRE(极简型)
极低开支、极简生活,所需本金最少,但生活弹性也最小。适合物欲低、单身或无房贷人群。
2. Fat FIRE(富足型)
退休后仍维持中产甚至更高的生活水准,所需本金最大(往往年支出 ×30 以上)。适合高收入、愿意多积累几年的人。本组愿景更接近这一方向——不牺牲生活质量。
3. Barista FIRE(咖啡师型 / 半退休)
资产覆盖大部分开销,剩余缺口靠一份低压力的兼职/灵活工作补上。既有现金流又有社交与节奏,是中国语境下最现实、最推荐的过渡形态。
4. Coast FIRE(滑行型)
趁年轻尽早投入足够本金,之后即使不再追加投资,靠复利到法定退休年龄也能自然滚大;期间只需赚够当下开销即可,工作压力骤减。非常适合 30 岁出头、有一定积蓄的家庭。
================================================================
四、适合中国家庭的实操路径
================================================================
第 1 步:算清家底
- 统计真实年支出(含房贷、保险、教育、赡养、旅行等),区分"刚性"与"弹性"。
- 估算现有净资产、负债、被动收入。
第 2 步:定 FIRE 数字
- 用 年支出 × 28~33 倍 设目标(比经典 25 倍更保守稳健)。
- 另设"医疗应急金"与"过渡期现金流"两个独立账户。
第 3 步:提高储蓄率(最关键)
- 记账,砍掉非必要消费,但避免极端节俭损害生活与健康。
- 主动收入增长 + 副业,远比抠门更能加速。
第 4 步:资产配置(参考方案,非投资建议)
- 经典股债:沪深300/中证A500 等宽基指数基金 50%~60% + 10年/30年国债ETF 40%~50%,定期再平衡。
- "永久投资组合"(适合厌恶波动者):股票、长期国债、黄金、现金各 25%,能较平稳地穿越繁荣/衰退/通胀/通缩四种周期。
- 适度全球分散:在合规渠道下配置部分港股/海外资产(如红利、纳指相关 QDII),降低单一市场风险。
- 现金/货基:留足 1~2 年生活费,避免熊市被迫卖资产。
第 5 步:买对保险,堵住最大风险敞口
- 医疗险(百万医疗 + 必要时中端医疗)、重疾险、定期寿险,是 FIRE 后没有单位福利时的"地基"。
第 6 步:退休后动态管理
- 采用"动态提取":行情好的年份正常提取,熊市年份主动削减弹性支出,保护本金。
- 关注社保衔接:提前退休期间可考虑以灵活就业身份继续缴纳社保医保,保证将来能领养老金、享医保报销。
================================================================
五、中国国情下的现实挑战(务必正视)
================================================================
- 收入与房价:一线城市生活成本高,房贷往往是最大刚性支出,"先上岸还是先 FIRE"需要权衡。
- 低利率 + 市场波动:稳健收益越来越难,纯靠理财利息养老不现实。
- 社保空窗:法定退休年龄前领不到养老金,医保也需自行接续。
- 教育与养老:子女教育、父母赡养是难以压缩的长期支出。
- 心理与社会层面:第一批 FIRE 的人中,不少因为脱离社会节奏、价值感缺失、通胀超预期而"返岗"。说明 FIRE 不只是钱的问题,更是生活方式与意义感的重建。
结论:在中国,纯粹的"30 多岁彻底不工作"门槛极高、风险大;更现实、更可持续的是 Barista FIRE / Coast FIRE——先实现"财务半独立",赎回人生的选择权,做喜欢且低压力的工作。这正契合本组愿景:理性消费、合理规划、收入稳健增长,走向"每天微笑工作"的自由生活。
================================================================
参考资料(来源链接)
================================================================
- FIRE运动 - 维基百科:https://zh.wikipedia.org/zh-hans/FIRE%E8%BF%90%E5%8A%A8
- 加入FIRE运动,为了精简与自由(知乎):https://zhuanlan.zhihu.com/p/673875086
- 浅谈FIRE:这事儿在中国可行吗?(豆瓣):https://www.douban.com/note/777382439/
- FIRE运动讲的4%法则真的能让你财务自由吗?(知乎):https://zhuanlan.zhihu.com/p/495131850
- 第一批财务自由、提前退休的80后,回来上班了(36氪):https://36kr.com/p/3120404623872262
- 35岁提前退休,他们过得好吗?(澎湃新闻):https://www.thepaper.cn/newsDetail_forward_15939514
- FIRE族提前退休计划:消费降级,但有bug?(澎湃新闻):https://www.thepaper.cn/newsDetail_forward_8520836
- "4%养老法则"助力年轻人提前退休(新浪财经):https://finance.sina.cn/2024-01-03/detail-imzzsqhy3526680.d.html
- 永久投资组合:25%配置策略应对经济周期(新浪财经):https://finance.sina.com.cn/roll/2025-06-19/doc-infarnmh1567165.shtml
- A股永久投资组合实践(知乎):https://zhuanlan.zhihu.com/p/2004636439053366227
- The 4% Rule Is Under Fire(Motley Fool):https://www.fool.com/retirement/2026/04/14/the-4-rule-is-under-fire-heres-why/
- The Safe Withdrawal Rate Series(Early Retirement Now):https://earlyretirementnow.com/safe-withdrawal-rate-series/
- Does the 4% Rule Still Work(Prudential):https://www.prudential.com/financial-education/4-percent-rule-retirement
Binary file not shown.
+136
View File
@@ -0,0 +1,136 @@
# -*- coding: utf-8 -*-
"""生成可调参数的 FIRE(Barista 半退休) 测算表。改黄色参数格,结果用 Excel 公式自动重算。"""
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.utils import get_column_letter
wb = Workbook()
ws = wb.active
ws.title = "FIRE测算"
# ---- 样式 ----
title_font = Font(name="微软雅黑", size=14, bold=True, color="FFFFFF")
title_fill = PatternFill("solid", fgColor="2F5597")
head_font = Font(name="微软雅黑", size=11, bold=True, color="FFFFFF")
head_fill = PatternFill("solid", fgColor="4472C4")
sect_font = Font(name="微软雅黑", size=11, bold=True, color="2F5597")
input_fill = PatternFill("solid", fgColor="FFF2CC") # 黄色=可改
input_font = Font(name="微软雅黑", size=11, bold=True, color="C00000")
calc_fill = PatternFill("solid", fgColor="E2EFDA") # 绿色=自动算
normal_font = Font(name="微软雅黑", size=11)
ok_fill = PatternFill("solid", fgColor="C6E0B4")
thin = Side(style="thin", color="BFBFBF")
border = Border(left=thin, right=thin, top=thin, bottom=thin)
center = Alignment(horizontal="center", vertical="center")
left = Alignment(horizontal="left", vertical="center")
def put(cell, value, font=normal_font, fill=None, align=left, fmt=None, bd=True):
c = ws[cell]
c.value = value
c.font = font
if fill: c.fill = fill
c.alignment = align
if fmt: c.number_format = fmt
if bd: c.border = border
return c
# ---- 标题 ----
ws.merge_cells("A1:F1")
put("A1", "FIRE 半退休 (Barista) 可调参数测算表", title_font, title_fill, center, bd=False)
ws.row_dimensions[1].height = 28
ws.merge_cells("A2:F2")
put("A2", "用法:只改【黄色格子】里的数字,右侧/下方结果会自动重算。", Font(name="微软雅黑", size=9, italic=True, color="808080"), align=left, bd=False)
# ---- 参数区 ----
put("A3", "① 可修改参数(改这里)", sect_font, bd=False)
params = [
("起始本金(元)", 70000, "#,##0"),
("每月定投(元)", 1500, "#,##0"),
("年开支(元)", 65000, "#,##0"),
("兼职年收入(元)", 40000, "#,##0"),
("安全提取率", 0.035, "0.0%"),
("收益率-保守", 0.04, "0.0%"),
("收益率-中性", 0.06, "0.0%"),
("收益率-乐观", 0.08, "0.0%"),
]
r = 4
for name, val, fmt in params:
put(f"A{r}", name, normal_font, input_fill, left)
put(f"B{r}", val, input_font, input_fill, center, fmt)
r += 1
# 记下行号
ROW = {"本金":4, "月投":5, "开支":6, "兼职":7, "提取率":8, "保守":9, "中性":10, "乐观":11}
# ---- 自动计算:目标本金 ----
put("A13", "② 自动计算结果", sect_font, bd=False)
put("A14", "年缺口(开支-兼职,元)", normal_font, calc_fill)
put("B14", f"=B{ROW['开支']}-B{ROW['兼职']}", normal_font, calc_fill, center, "#,##0")
put("A15", "目标本金(元)", Font(name="微软雅黑", bold=True), calc_fill)
put("B15", f"=B14/B{ROW['提取率']}", Font(name="微软雅黑", bold=True, color="C00000"), calc_fill, center, "#,##0")
put("A16", "目标本金(万元)", Font(name="微软雅黑", bold=True), calc_fill)
put("B16", "=B15/10000", Font(name="微软雅黑", bold=True, color="C00000"), calc_fill, center, "0.0")
# ---- 逐年测算表 ----
put("A18", "③ 逐年资产测算(含分红复投;第一个出现 ✅ 的年份≈达成 Barista FIRE)", sect_font, bd=False)
headers = ["年数", "保守(元)", "中性(元)", "乐观(元)", "中性(万)", "是否达标(中性)"]
hr = 19
for i, h in enumerate(headers):
put(f"{get_column_letter(i+1)}{hr}", h, head_font, head_fill, center)
start = hr + 1
for y in range(1, 31):
rr = start + (y - 1)
put(f"A{rr}", y, normal_font, None, center, "0")
# FV(年化/12, 年数*12, -月投, -起始本金) -> 正数
put(f"B{rr}", f"=FV($B${ROW['保守']}/12, A{rr}*12, -$B${ROW['月投']}, -$B${ROW['本金']})", normal_font, None, center, "#,##0")
put(f"C{rr}", f"=FV($B${ROW['中性']}/12, A{rr}*12, -$B${ROW['月投']}, -$B${ROW['本金']})", normal_font, None, center, "#,##0")
put(f"D{rr}", f"=FV($B${ROW['乐观']}/12, A{rr}*12, -$B${ROW['月投']}, -$B${ROW['本金']})", normal_font, None, center, "#,##0")
put(f"E{rr}", f"=C{rr}/10000", normal_font, None, center, "0.0")
put(f"F{rr}", f'=IF(C{rr}>=$B$15,"✅达标","")', Font(name="微软雅黑", bold=True, color="548235"), None, center)
# ---- 列宽 ----
widths = [22, 14, 14, 14, 12, 16]
for i, w in enumerate(widths):
ws.column_dimensions[get_column_letter(i+1)].width = w
# ---- 说明页 ----
ws2 = wb.create_sheet("说明")
notes = [
"【这张表怎么用】",
"1. 在『FIRE测算』页,只改黄色格子里的数字(本金、月投、开支、兼职收入、提取率、收益率)。",
"2. 绿色格子和下方表格会自动重算,不用动公式。",
"",
"【目标本金怎么来的】",
"目标本金 =(年开支 − 兼职年收入)÷ 安全提取率",
"例:开支6.5万、兼职4万、提取率3.5% → (65000-40000)/3.5% = 约71万。",
"兼职每多赚1万,目标本金大约少29万。",
"",
"【提取率为什么用 3.5%】",
"美国常用4%,但中国低利率、市场波动大、社保有空窗,打折到3%~3.5%更稳健。",
"想更保守可把提取率改成 0.03。",
"",
"【收益率怎么理解】",
"已包含分红再投资(总回报口径)。参考组合:红利ETF/工行50-60% + 宽基指数30% + 货基/国债10-15%。",
"保守4% / 中性6% / 乐观8% 为假设值,不是承诺。",
"",
"【达成年限怎么看】",
"看『是否达标(中性)』列,第一个出现 ✅ 的年份,就是按中性收益大约达成的年数。",
"想看保守/乐观,可对比 保守(元)、乐观(元) 两列与目标本金B15的大小。",
"",
"【加速的关键】",
"把『每月定投』从1500改成3000试试,会看到达成年限大幅缩短——提高储蓄率比纠结收益率更有效。",
"",
"⚠️ 本表为个人理性测算与学习参考,不构成投资建议,收益率为假设值、不保证实现。",
]
for i, line in enumerate(notes, start=1):
c = ws2[f"A{i}"]
c.value = line
if line.startswith("【") or line.startswith("⚠️"):
c.font = Font(name="微软雅黑", bold=True, color="2F5597")
else:
c.font = Font(name="微软雅黑", size=10)
ws2.column_dimensions["A"].width = 95
out = "/mnt/d/opc_project/fire_goal/FIRE可调测算表.xlsx"
wb.save(out)
print("saved:", out)
+133
View File
@@ -0,0 +1,133 @@
# 我的 FIRE 半退休计划与建议
> 整理日期:2026-06-07
> 这是一份把咨询对话整理成的"大白话"版本,方便自己和家人看懂。
> ⚠️ 全文是基于个人情况的理性分析和学习参考,收益率为假设值,**不构成投资建议,也不是收益承诺**。
---
## 一、我现在的情况
- 拿出 **7 万元** 启动 FIRE 计划。
- 以后每个月可以再投入 **1,500 元**。
- 已经买了 **1000 股工商银行**,市值约 7,800 元,成本价 7.19 元。
- 计划:持续买入、想把成本降到 5.0;以后分红和炒股收入都复投工行。
- 家庭一年开支约 **6.5 万元**;现在 **40 岁以上**。
- 目标:**Barista FIRE(半退休)**——不彻底不工作,而是靠投资 + 一份轻松兼职覆盖生活。
---
## 二、先纠正一个误区:"把成本降到 5.0"
**现价 7.8 元已经高于我的成本 7.19 元,现在每买一股都会把成本往上拉,而不是往下降。**
想把均价从 7.19 降到 5.0,数学上只有一种可能:**股价大跌、我在很低的位置大量买入**。
| 后续买入价 | 要买多少股才能让均价 = 5.0 | 意味着什么 |
|---|---|---|
| 买在 5.0 | 永远做不到 | 不可能 |
| 买在 4.0 | 约 2190 股 | 股价要先跌约 49% |
| 买在 3.5 | 约 1460 股 | 股价要先腰斩 |
**结论:盯着"成本 5.0"其实是在赌工行跌一半,代价是前面的持仓全套牢。**
✅ 正确的思路:
- FIRE 真正要盯的是 **攒了多少股 + 每年能收多少分红**,不是均价那个数字。
- 用 **股息率 / 估值** 来判断贵不贵:股息率高(比如 > 5%)就多买,低就少买。这叫"按收益率买",比死等某个价格科学得多。
- 真想拉低均价,靠的是"越跌越买的纪律",而不是一句口号。
---
## 三、最大的风险:别把全部身家押在一只股票上 ⚠️
工行是好公司(高股息蓝筹),但 **把整个 FIRE 计划全压在一只银行股上、连分红都只复投它**,是越投越集中,违背了分散原则。银行也有自己的风险:净息差收窄、房地产坏账、政策让利等。
**建议改成"核心 + 卫星"组合:**
| 仓位 | 配什么 | 作用 |
|---|---|---|
| 核心 50–60% | 工行 / 银行ETF / **红利ETF** | 高分红现金流,仍是主力 |
| 卫星 25–35% | 沪深300 / 中证A500 等宽基指数 | 分享整体经济,分散行业风险 |
| 防御 10–15% | 货币基金 / 国债ETF | 应急 + 熊市时的"弹药" |
红利 ETF 一篮子持有几十只高股息股,既保留"高分红"的爽点,又把单一银行的风险摊薄,思路和我一致但更安全。
---
## 四、什么是 Barista FIRE(我选的路线)
简单说:**不用攒到"完全不工作也够花"那么多钱,只要攒到"投资 + 一份轻松兼职"能覆盖生活就行。**
- 既有现金流,又保留社交和生活节奏;
- 需要的本金比"完全退休"少很多;
- 是中国普通人最现实、最可持续的路线。
**我的目标本金 =(年开支 6.5 万 − 兼职收入)÷ 3.5%**
(3.5% 是"中国版"安全提取率,比美国常用的 4% 更稳健。)
| 每年兼职能赚 | 投资要覆盖的缺口 | 需要攒到的本金 |
|---|---|---|
| 5 万 | 1.5 万 | **约 43 万** |
| 4 万 | 2.5 万 | **约 71 万** |
| 3 万 | 3.5 万 | **约 100 万** |
👉 关键启发:**兼职每多赚 1 万,需要的本金就少约 29 万**。所以"保住一份轻松赚钱的能力",比拼命攒钱更划算。
---
## 五、我大概几年能实现?(测算表)
**前提:7 万起步 + 每月 1500 定投,收益已包含分红复投。**
### 资产能滚到多少
| 年数 | 保守(4%) | 中性(6%) | 乐观(8%) |
|---|---|---|---|
| 5 年 | 18.5 万 | 19.9 万 | 21.4 万 |
| 10 年 | 32.5 万 | 37.3 万 | 43.0 万 |
| 15 年 | 49.7 万 | 60.8 万 | 75.1 万 |
| 20 年 | 70.6 万 | 92.5 万 | 122.8 万 |
### 大概几年到达目标(按中性 6% 估算,现在按 42 岁算)
| 目标本金 | 大约需要 | 到那时年龄 |
|---|---|---|
| 43 万(兼职 5 万) | 约 11 年 | 约 53 岁 ✅ 最现实 |
| 71 万(兼职 4 万) | 约 17 年 | 约 59 岁(略紧) |
| 100 万(兼职 3 万) | 约 21 年 | 65 岁+(太慢,不推荐) |
---
## 六、加速的关键:提高每月投入 ⚠️
我现在的瓶颈是**每月只投 1500**(年存 1.8 万,储蓄率偏低)。看看月投提到 3000 的威力(中性 6%):
| 年数 | 月投 1500 | 月投 3000 |
|---|---|---|
| 10 年 | 37.3 万 | **61.9 万** |
| 15 年 | 60.8 万 | **104 万** |
**月投翻倍,达到 71 万的时间从约 17 年缩短到约 11 年,等于早 6 年半退休。**
对 40 岁以上的我来说:**提高储蓄率 / 增加兼职收入,比纠结收益率高低更管用。**
---
## 七、给自己的行动清单 ✅
1. **首选路线**:本金目标定在 **43–50 万**,前提是培养并保住一份能稳定赚 4–5 万/年的低压力兼职。中性收益约 11–13 年可达,53–55 岁半退休。
2. **加速靠攒钱**:尽量把月投从 1500 往 3000 推(重点是开源、增加兼职),这是最有效的杠杆。
3. **资产配置**:红利ETF/工行 50–60% + 宽基指数 30% + 货基/国债 10–15%,别单吊工行。
4. **改掉"成本降到 5.0"的执念**:改成"按股息率/估值持续加仓、滚大分红"。
5. **长期持有省税**:A 股分红持有**超过 1 年免税**,1 个月~1 年扣 10%,不满 1 个月扣 20%。所以别频繁高抛低吸。
6. **接续社保(40+ 尤其重要)**:半退休期以"灵活就业"身份续缴养老 + 医保,保证 60 岁后能领养老金、看病能报销——相当于给计划加了一道国家兜底。
7. **每年复盘一次**:开支会随通胀上涨,目标本金要跟着调;行情好正常提取,熊市压缩弹性开支、暂缓提取。
---
## 八、一句话总结
> 我的方向(定投 + 长期 + 高股息 + 复投)是对的 👍。
> 要改两点:① 别单吊工行,加红利ETF和宽基做分散;② 别赌"成本5.0",改成按估值持续买、滚大分红。
> 路线选 **Barista FIRE**:攒到约 43–50 万 + 一份轻松兼职,争取 53–55 岁实现半退休,把人生选择权赎回来。