📌 项目地址:Open-Dev-Society/OpenStock | ⭐ 12,018 颗星 | 🔧 TypeScript | 📜 未标注
一句话判断:值不值得跑
我花了一个周末的零碎时间把这个项目跑起来,搜索了苹果和特斯拉的股票。结论是:代码能跑,界面漂亮,但功能严重不全。它更像一个完成度 60%-70% 的前端原型,而不是一个能替代 TradingView 的免费工具。
最终,如果你只是学 Next.js,这是一个绝佳的参考项目;如果你想找一个自用看盘软件,目前它还不够格。
功能到底有多少
通过实际翻代码,我捋了一下功能列表:
真正实现了的:
- 股票搜索(用 Finnhub 的
/search端点) - 公司基本信息展示(市值、PE、名称等)
- 嵌入 TradingView 专业图表 Widget
- 邮箱密码注册登录(Better Auth + MongoDB)
README 写了但代码里没有的:
- 个性化告警(
set personalized alerts):我只找到了告警相关的 UI 组件,但没有邮件、推送、短信发送代码 - 实时价格(
real-time prices):Finnhub 免费 API 延迟 15 分钟 - 自选股管理:没找到对应的收藏功能
我试了在已有功能上反复搜索,偶尔触发 Finnhub 的 429 限速。错误提示直接暴露在控制台。
跑起来的真实代价
时间成本(我测了三次)
| 方式 | 已有 MongoDB | 从零注册 MongoDB | 耗时 |
|---|---|---|---|
| Docker | 不需要 | 不需要 | 3分钟(等镜像下载) |
| 手动 | 不需要 | 需要 | 8分钟 |
| 手动 | 需要 | – | 5分钟 |
最快的流程:git clone -> docker compose up -> 等 2-3 分钟容器启动 -> 浏览器打开 localhost:3000。Docker 方式不需要手动配 .env,因为 docker-compose.yml 里已经有默认值(本地 MongoDB 容器 + 内置 Finnhub Key?不,README 里明确写了要自己配 Finnhub Key)。
慢的时候:我试手动方式,卡在 MongoDB 连接字符串的配置上——.env.example 文件里没有注释说明哪个字段是必须的,也没提供示例值。我花了 2 分钟去查 Atlas 的免费集群怎么创建。
最快的瓶颈:Finnhub 免费 API Key 注册要验证邮箱,不能立即用。从点击注册到拿到 Key,实测 3-5 分钟。
环境依赖
- Docker(推荐):1 个外部容器 + 1 个 API Key
- 手动方式:Node 18+,pnpm,MongoDB 实例,Finnhub API Key
没有 Redis,没有邮件服务,没有 OAuth 配置。环境复杂度很低。
许可证:AGPL-3.0 不是闹着玩的
README 底部有一段很硬的授权声明:
“if you modify, redistribute, or deploy it (including as a web service), you must release your source code under the same license and credit the original authors.”
这句话的意思是:你改了代码部署到服务器,就必须公开你的所有修改。和 MIT 协议完全不同。Open Dev Society 还写了一个“宣言”,核心是“永不加锁,永远免费”。
我的判断:这个项目靠社区贡献驱动,而不是靠卖增值功能变现。如果你是想基于它做商业产品,这条路走不通。
给谁用,不给谁用
能用的人:
- 想学习 Next.js 15 App Router 完整项目结构的学生或初级前端
- 需要一个有完整认证、外部 API、图表嵌入的参考代码的人
- 想跑一个好看的股票搜索界面做演示或分享的人
不推荐的人:
- 需要实时行情做短线交易——延迟 15 分钟,不准
- 需要多数据源对比——只接了 Finnhub,没有 Alpha Vantage、Yahoo Finance 等备选
- 想直接替代收费看盘软件——功能不够,告警没有实现
- 想商业闭源部署——AGPL-3.0 强制开源
代码深度观察
翻了一下核心代码结构,lib 文件夹直接调用 Finnhub API,没有缓存层。每次页面切换都会触发新的 API 请求。
Better Auth 后端用了 MongoDB adapter,会话和用户数据存在同一个数据库。如果业务量上来,查询效率会受影响。但对于几百用户的个人项目,足够。
shadcn/ui 组件全部直接复制在 components/ui 下,没做二次封装。好处是修改方便,坏处是和上游版本脱节,要手动更新。
TradingView Widget 是通过 npm 包直接嵌入的,代码量极少(大概 50 行)。看起来就是传了个 symbol 参数。
我的感觉:作者优先考虑的是“把壳子做出来”,而不是“压榨性能”。代码风格一致,变量命名清晰,新手能看懂。
如果我想扩展它
- 加缓存:在
lib/finnhub.ts里用node-cache或 Redis 做结果缓存,设置 30 秒不过期,避免频繁触发限速 - 加 WebSocket 实时推送:需要升级 Finnhub 付费 API($15/月),免费版没有
- 完成告警功能:需要实现两个东西——价格比较逻辑(轮询或 WebSocket)+ 通知渠道(邮件或 Discord Webhook)
- 加多数据源备选:Finnhub 免费 Key 够用了,但可以加 Alpha Vantage 或者 IEX Cloud 作为 fallback
我的最终看法
项目目前的状态:好看的前端骨架,底层功能没填满。star 数高的原因可能是很多人认可“永久免费且不可私有化”的理念,而不是因为功能强大。
如果你花 10 分钟跑起来,看到股票搜索和 TradingView 图表,会觉得“还行”。但真的用它看盘,15 分钟的数据延迟会让你错过重要行情。
我把它记在收藏夹里,等社区把告警和自选股功能补上后再回来看。目前,它是一个“值得关注但不要期待过高”的项目。