OpenStock已上线,免费开源!

OpenStock的介绍

图片OpenStock 是一个开源替代方案,用于替代昂贵的市场平台。它可以跟踪实时价格,设置个性化提醒,并探索详细的公司信息 —— 这个平台完全开放,面向所有人,永久免费使用。

OpenStock 是一款现代化的股票市场应用,采用了 Next.js(App Router)、shadcn/ui 和 Tailwind CSS 技术栈。其认证功能使用 Better Auth,数据持久化使用 MongoDB,市场数据来自 Finnhub,图表和市场视图则通过 TradingView 小部件展示。

注意:OpenStock 是社区共同构建的,不是一个经纪平台。市场数据可能会受到供应商规则和您的配置影响而延迟。这里的内容不构成财务建议

Project Banner

下面就这个平台进行一些介绍和说明。

功能特性

认证

•使用 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:7    container_name: mongodb    restart:unless-stopped    environment:      MONGO_INITDB_ROOT_USERNAME: root      MONGO_INITDB_ROOT_PASSWORD: example    ports:-"27017:27017"    volumes:- mongo-data:/data/db    healthcheck:      test:["CMD","mongosh","--eval","db.adminCommand('ping')"]      interval:10s      timeout:5s      retries:5
volumes:  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-themeslucide-react 图标。

暂无介绍....

延伸阅读:

一套基于ASP.NET 6.0 MVC+SqlSugar + LayUI的框架,源代码完全开源的WMES系统

WMES 是一套基于 ASP.NET 6.0 MVC + SqlSugar + LayUI 构建的开...

guozhiman
2025年12月6日
OpenStock已上线,免费开源!

OpenStock的介绍

guozhiman
2025年11月30日
Fulling.ai 由AI 完成的开源项目突破

项目地址:https://github.com/FullAgent/fullinghttps://fulling.ai从...

guozhiman
2025年11月30日
一款开源免费、功能全面的人力资源管理系统,数据安全可控、高度可定制!

iBizEHR 是一款开源免费(MIT 协议)、功能全面的人力资源管理系统,数据安全可控、高度可定制!平台定位于「开源、...

guozhiman
2025年11月3日
[后台管理系统]推荐一款界面美观、功能强大、前后端分离、开箱即用的后台管理系统

今天刷GitHub的时候,发现了一个挺有意思的项目 —— BuildAdmin。一句话总结:它是一个基于 Th...

guozhiman
2025年9月22日