📌 项目地址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 分钟的数据延迟会让你错过重要行情。

我把它记在收藏夹里,等社区把告警和自选股功能补上后再回来看。目前,它是一个“值得关注但不要期待过高”的项目。

这篇文章对你有帮助吗?

发表回复