OpenStock已上线,免费开源!
OpenStock的介绍
OpenStock 是一个开源替代方案,用于替代昂贵的市场平台。它可以跟踪实时价格,设置个性化提醒,并探索详细的公司信息 —— 这个平台完全开放,面向所有人,永久免费使用。
OpenStock 是一款现代化的股票市场应用,采用了 Next.js(App Router)、shadcn/ui 和 Tailwind CSS 技术栈。其认证功能使用 Better Auth,数据持久化使用 MongoDB,市场数据来自 Finnhub,图表和市场视图则通过 TradingView 小部件展示。
注意:OpenStock 是社区共同构建的,不是一个经纪平台。市场数据可能会受到供应商规则和您的配置影响而延迟。这里的内容不构成财务建议。

下面就这个平台进行一些介绍和说明。
功能特性
认证
•使用 Better Auth + MongoDB 适配器 实现电子邮件/密码认证。•通过 Next.js 中间件强制保护路由。•全局搜索和 Command + K 快捷面板。•快速股票搜索,数据由 Finnhub 支持。•在空闲时显示热门股票;查询进行去抖处理。
自选股
•每个用户的自选股保存在 MongoDB 中(每个用户拥有唯一的股票符号)。
股票详情
•TradingView 股票符号信息、K线图/高级图表、基准线和技术分析。•公司资料和财务小部件。
市场概况
•Heatmap(热力图)、报价和热门新闻(使用 TradingView 小部件)。
个性化引导
•收集国家、投资目标、风险承受能力、偏好的行业信息。
邮件与自动化
•AI 个性化欢迎邮件(通过 Gemini 与 Inngest)。•每日新闻摘要邮件(通过定时任务 cron),根据用户的自选股进行个性化定制。
精致的用户界面
•使用 shadcn/ui 组件、Radix 原生组件、Tailwind v4 设计令牌。•默认启用暗黑主题。
键盘快捷键
•快捷操作/搜索:Cmd/Ctrl + K。
🤸 快速开始
前提条件
•Node.js 20+ 和 pnpm 或 npm。•MongoDB 连接字符串(可使用 MongoDB Atlas 或通过 Docker Compose 本地连接)。•Finnhub API 密钥(支持免费层;实时数据可能需要付费)。•Gmail 账户用于邮件(或更新 Nodemailer 传输设置)。•可选:Google Gemini API 密钥(用于 AI 生成的欢迎介绍)。
克隆并安装
git clone https://github.com/Open-Dev-Society/OpenStock.gitcd OpenStock# 选择一个安装方式:pnpm install# 或npm install
配置环境
1.创建一个 .env 文件(请参见环境变量部分)。2.验证数据库连接性:
pnpm test:db# 或者npm run test:db
运行开发环境
Next.js 开发模式(Turbopack)pnpm dev# 或者npm run dev
本地运行 Inngest(工作流、定时任务、AI)
npx inngest-cli@latest dev
构建并启动(生产环境)
pnpm build && pnpm start# 或者npm run build && npm start
打开 http://localhost:3000 查看应用。
Docker 设置
您可以使用 Docker Compose 简单地运行 OpenStock 和 MongoDB。
1.确保已安装 Docker 和 Docker Compose。2.docker-compose.yml 文件包含两个服务:
•openstock(本应用)•mongodb(带有持久化卷的 MongoDB 数据库)
3.创建您的 .env 文件(请参见下面的示例)。对于 Docker 设置,使用本地连接字符串,例如:
MONGODB_URI=mongodb://root:example@mongodb:27017/openstock?authSource=admin
4.启动服务栈:
# 在仓库根目录下执行docker compose up -d mongodb && docker compose up -d --build
5.访问应用
•应用地址: http://localhost:3000•MongoDB 可以通过 Docker 网络内的主机 mongodb:27017 访问。
注意事项
•应用服务依赖于 MongoDB 服务 (depends_on)。•在 Compose 中定义了 MongoDB 根用户的凭证;连接字符串中必须包含 authSource=admin 以进行 root 用户认证。•数据通过 Docker 卷在重启时保持持久化。
可选:项目中使用的 MongoDB 服务示例定义:
services:mongodb:image: mongo:7container_name: mongodbrestart:unless-stoppedenvironment:MONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROOT_PASSWORD: exampleports:-"27017:27017"volumes:- mongo-data:/data/dbhealthcheck:test:["CMD","mongosh","--eval","db.adminCommand('ping')"]interval:10stimeout:5sretries:5volumes:mongo-data:
环境变量
在项目根目录创建 .env 文件。根据需要选择使用托管的 MongoDB(如 Atlas)URI 或本地 Docker URI。
托管 MongoDB(MongoDB Atlas):
# 核心设置NODE_ENV=development# 数据库(Atlas)MONGODB_URI=mongodb+srv://<user>:<pass>@<cluster>/<db>?retryWrites=true&w=majority# Better AuthBETTER_AUTH_SECRET=your_better_auth_secretBETTER_AUTH_URL=http://localhost:3000# FinnhubFINNHUB_API_KEY=your_finnhub_key# 如果客户端代码需要,可以使用客户端暴露的变量:NEXT_PUBLIC_FINNHUB_API_KEY=FINNHUB_BASE_URL=https://finnhub.io/api/v1# Inngest AI(Gemini)GEMINI_API_KEY=your_gemini_api_key# 邮件(通过 Nodemailer 使用 Gmail;如果启用了 2FA,请考虑使用应用密码)NODEMAILER_EMAIL=youraddress@gmail.comNODEMAILER_PASSWORD=your_gmail_app_password
本地 MongoDB(Docker Compose):
# 核心设置NODE_ENV=development# 数据库(Docker)MONGODB_URI=mongodb://root:example@mongodb:27017/openstock?authSource=admin# Better AuthBETTER_AUTH_SECRET=your_better_auth_secretBETTER_AUTH_URL=http://localhost:3000# FinnhubFINNHUB_API_KEY=your_finnhub_keyNEXT_PUBLIC_FINNHUB_API_KEY=FINNHUB_BASE_URL=https://finnhub.io/api/v1# Inngest AI(Gemini)GEMINI_API_KEY=your_gemini_api_key# 邮件(通过 Nodemailer 使用 Gmail;如果启用了 2FA,请考虑使用应用密码)NODEMAILER_EMAIL=youraddress@gmail.comNODEMAILER_PASSWORD=your_gmail_app_password
注意事项
•尽可能将私密密钥保留在服务器端。•如果使用了 NEXT_PUBLIC_ 变量,请记住这些变量会暴露给浏览器。•在生产环境中,建议使用专用的 SMTP 提供商,而不是个人 Gmail 账户。•不要在 Dockerfile 中硬编码密钥;请使用.env 文件和 Docker Compose 进行管理。
数据与集成
Finnhub
•提供股票搜索、公司资料和市场新闻。•设置 FINNHUB_API_KEY 和 FINNHUB_BASE_URL(默认值: https://finnhub.io/api/v1)。•免费层可能会返回延迟的报价;请遵守速率限制和相关条款。
TradingView
•用于图表、热力图、报价和时间线的嵌入式小部件。•从 i.ibb.co 加载的外部图片已在 next.config.ts 中被列入白名单。
Better Auth + MongoDB
•使用 MongoDB 适配器的电子邮件/密码认证。•会话验证通过中间件完成;大多数路由都受到保护,只有注册、登录、资源和 Next.js 内部页面是公开的。
Inngest
•工作流:•app/user.created → AI 个性化欢迎邮件。•Cron 0 12 * * * → 每日新闻摘要邮件(基于用户的自选股)。•本地开发:npx inngest-cli@latest dev。
邮件(Nodemailer)
•使用 Gmail 传输。更新凭证或切换到您的 SMTP 提供商。•欢迎邮件和新闻摘要邮件的模板。
🧪 脚本与工具
包管理脚本
•dev: 启动 Next.js 开发服务器(使用 Turbopack)。•build: 生产环境构建(使用 Turbopack)。•start: 运行生产环境服务器。•lint: 使用 ESLint 检查代码。•test:db: 验证数据库连接。
开发者体验
•启用 TypeScript 严格模式。•使用 Tailwind CSS v4(无需单独配置 tailwind.config)。•使用 shadcn/ui 组件和 Radix 原生组件。•支持 cmdk 命令面板、next-themes、lucide-react 图标。
延伸阅读:
一套基于ASP.NET 6.0 MVC+SqlSugar + LayUI的框架,源代码完全开源的WMES系统
WMES 是一套基于 ASP.NET 6.0 MVC + SqlSugar + LayUI 构建的开...
Fulling.ai 由AI 完成的开源项目突破
项目地址:https://github.com/FullAgent/fullinghttps://fulling.ai从...
一款开源免费、功能全面的人力资源管理系统,数据安全可控、高度可定制!
iBizEHR 是一款开源免费(MIT 协议)、功能全面的人力资源管理系统,数据安全可控、高度可定制!平台定位于「开源、...
[后台管理系统]推荐一款界面美观、功能强大、前后端分离、开箱即用的后台管理系统
今天刷GitHub的时候,发现了一个挺有意思的项目 —— BuildAdmin。一句话总结:它是一个基于 Th...