b2970e4c-45a2-423e-b84d-257.../docs/reviews/2026-05-19-product-review.md
徐翔宇 f485093a52 docs: add 2026-05-19 product + code review
- product-review.md: UX 完整度、竞品对比、上架前 P0/P1 清单
- code-review.md: 26 文件审视,标出 Toast.swift:64 truncate bug、
  ETFClient LOF 误路由、dead K 线代码等 P0 项

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 17:34:33 +08:00

6.8 KiB
Raw Permalink Blame History

看盘侠 — 产品 Review

日期: 2026-05-19 审视版本: v0.3.0 (feat/v0.3.0-toast-confirm-feedback @ 63c7c0b) 装机验证: ~/.config/codeisland/plugins/fund.bundle v0.3.0 build 3 已在 Mio Island 3.0.0 运行


一、核心价值主张

维度 评分 说明
差异化 8/10 基金 + 黄金跨品类合一,刘海常驻,无服务端依赖
价值密度 7/10 持仓 P&L 实时算 + 黄金分钟线 + 多市场对比 pill 一屏内
上手摩擦 8/10 持仓 shares/cost 可不填graceful 降级到 watchlist 模式

强项

  1. 跨品类合一 — 市面上养基宝只看基金,跟谁学只看金价。同时看一屏没几个。
  2. 零服务端架构 — 数据全走天天/东方财富/新浪公开端点,永远不会因为后端关停就死。代价:没法做服务端聚合或推送。
  3. 持仓非强制WatchlistFund.shares / costNav 都是 Double?,没填也能用 watchlist 模式(HoldingsView.swift:142-175 hero card 自动 fallback "X 只基金")。降低 onboarding 摩擦。

弱项

  1. README pricing 是空头支票 — README.md:98-105 写了 ¥49 once / ¥99 yearly 的 Pro tier 表格 + AI 解盘v0.3.0 全免费、license 系统不存在。要么删定价段,要么尽快做 license gating —— 否则上架审核员看到会困惑,用户看到会觉得"骗"。
  2. "看盘侠"名字 vs 实际功能 mismatch — 名字暗示"看 K 线深度"(同花顺/雪球级别),实际是基金估值 + 金价。第一次打开的用户期待会被拉低。
  3. 黄金为什么挂在基金 tracker 里? — 概念上不重叠。如果用户只想看金价不看基金,"持仓 tab + 添加 tab" 都是 dead weight。

二、UX 流程完整度

走通 happy pathv0.3.0 新增反馈环)

  1. 持仓空状态 → 点 "去添加" → tab 切到添加 ✓
  2. 搜 "易方达蓝筹" → tap + → 绿 toast「已添加「xxx」到自选」✓v0.3 新)
  3. 回持仓 tab → 看见 row → tap 展开 PositionEditor → 填份额+成本 → 绿 toast ✓
  4. Hero card 自动算 总市值 / 今日盈亏 / 累计盈亏 / 收益率 ✓
  5. hover row → 出 ✕ → tap → 红色 ConfirmDialog → 确认/取消 ✓v0.3 新,防误删)

断点与边缘 case

  1. 搜索失败 silent swallowAddView.swift:138
    do { hits = try await FundClient.shared.search(q) }
    catch { hits = [] }
    
    用户搜 "易方达" 网超时,看到"未找到匹配的基金"。实际是 15s 超时不是没结果。P0error path 加错误 toast。
  2. 没"搜索历史" — 用户搜过一次就丢,下次重启又要打字。AddView state 完全 ephemeral。P15 个 recent searches 就够。
  3. 黄金 K 线产品意图不明GoldView 实际渲染的是 goldMinuteLine(当日分钟线),但 README 还在讲"1月/3月/1年/全部" 日 K 切换,Models.swift:181 GoldRange enum 也还在。两套数据流并存只渲染一套。要么把日 K 切换的 UI 找回来,要么砍 dead code。
  4. "添加" tab 已添加 rowSearchRow.swift:182 .disabled(alreadyAdded) 与 v0.3 新加的"再点弹 info toast"逻辑冲突 — disabled 状态会吃掉 tapinfo toast 永远不触发。需 cleanup。
  5. 黄金持仓 vs 基金持仓 UX 不一致 — 基金 PositionEditor 在 row 下方展开 (HoldingsView.swift:99);黄金 GoldPositionCard 在 card 内 toggle (GoldPositionCard.swift:32-43)。同一概念两种交互。
  6. footer "更新于 X 分前"误读ExpandedView.swift:210 显示上次刷新时间,但盘后实际 cadence 是 30 min。用户看到"更新于 25 分前"会以为坏了。建议:盘后改成"下次刷新 N 分后"或"盘后空闲"。

三、信息架构

强项 弱项
持仓 column header今日/累计)— 一眼看清两列含义 "添加"tab 默认页写"数据源: 东方财富 fund.eastmoney.com" — 偏 dev-y
Hero card graceful 降级("X 只基金" "国内金价 AU9999.SGE" — 普通用户不认这 ticker
黄金 tab 一屏放下:实时 + 分钟线 + 持仓 + 伦敦/纽约 pill 没"全局 status"footer 字段refresh 失败/网异常没 surface
.upDown(value) helper 一致的中国式红涨绿跌 hero card 上 hover 没 affordance用户不知道 row 可点)

四、与竞品对比

看盘侠 养基宝 蛋卷基金 同花顺 Mac
桌面常驻 刘海 App App App
隐私(无登录无服务端)
基金 + 黄金一屏 ⚠️ 不同模块
持仓 P&L
AI 解盘 (计划) ⚠️
K 线深度 ⚠️ 分钟线
多账户
ETF 实时 ⚠️ ⚠️

差异化定位:刘海 + 跨品类 + 隐私。瞄准"已经知道自己持仓、不想再装一个 app 占菜单栏"的轻量用户。不要对标同花顺做深度。


五、上架前必修P0

# 文件 / 位置
1 README pricing 删掉或改成"Pro tier 计划中" README.md:98-105
2 搜索失败要弹 error toast AddView.swift:138 catch 块
3 删 dead K 线代码 OR 把日 K 切换 UI 加回来 GoldKlineClient / goldDailyBars / GoldRange
4 footer 文案盘后改成"下次刷新 N 分后" ExpandedView.swift:209-213
5 SearchRow.disabled vs info toast 二选一 AddView.swift:182

六、建议加P1

  1. 个股 quote tab — 已有 ETFClient (Sina sh/sz endpoint),扩展 A 股股票几乎就是 prefix 路由
  2. 搜索历史 — 5 个 recent searches
  3. 设置面板 — refresh interval 可调、tab 显示偏好(隐藏黄金?)
  4. 每日 P&L 累计 chart — 持仓 hero data 存 SQLite画周线趋势这是 Pro tier 的真正钩子,比 AI 解盘更落地)
  5. drag-reorder 持仓 — Watchlist 已经有 move(from:to:) APIview 没用

七、建议砍P-1

  1. 黄金 K 线 1月/3月/1年/全部 切换 — 代码留着没用上;产品上"长线看金"跟 quick-glance 体验不匹配
  2. MioIsland 主题适配 — HANDOFF.md 自己说没做。固定 lime/gold 配色其实视觉更统一,不要补

八、总评

v0.3.0 上架免费版?
v0.3.0 上架收钱版? pricing 是空头支票AI 解盘没影)
上架前必修项数? 5 个(见上)
最大产品风险 名字"看盘侠" vs 实际功能 mismatch第一印象拉低
最大产品亮点 跨品类 + 刘海常驻 + 隐私三合一

优先级 sequence:修 P0 五项 → tag v0.3.0 → 上架免费 → 做"个股 tab"和"P&L 趋势"作为 Pro 钩子 → 再谈付费。