前言概述
OpenStock 是一个面向股票市场信息展示、行情跟踪、图表分析、新闻浏览与个性化监控的开源股票市场平台。项目定位是“昂贵市场平台的开源替代方案”,目标是让用户能够以开放、免费、可自部署的方式查看市场价格、关注股票、设置个性化提醒,并获取公司与市场相关信息。
项目介绍
OpenStock 是一个开源、免费、可自部署的股票行情平台,基于 Next.js、TailwindCSS 和 MongoDB 构建。项目聚焦行情展示与数据分析,集成 TradingView 图表、Finnhub 市场数据,支持实时行情、K 线图、市场热力图、股票搜索、自选股管理、价格提醒、新闻资讯和公司资料展示。平台不提供交易功能,适合用于金融数据看板、全栈项目学习和股票市场信息监控。
应用场景
该项目非常适合作为全栈开发学习案例。它覆盖了 Next.js App Router、React Server Components、Server Actions、MongoDB/Mongoose、第三方 API 集成、认证、前端组件化、图表 Widget 集成、Docker 部署、环境变量管理、异步任务与邮件服务等典型场景。对于希望学习金融信息类产品架构的开发者,OpenStock 提供了一个较完整的实战范例。
功能模块
功能模块 | 主要内容 | 面向用户 | 数据/依赖来源 | 说明 |
首页 Dashboard | 市场概览、热力图、新闻、市场数据等 | 所有访问者 | TradingView、Finnhub | 用于快速了解市场整体情况 |
股票搜索 | 股票代码和公司名称搜索 | 所有访问者/登录用户 | Finnhub Search API | 支持搜索并进入个股详情 |
个股详情 | 股票信息、K 线图、Baseline 图、技术分析、公司资料、财务信息、情绪洞察 | 所有访问者/登录用户 | TradingView、Finnhub、Adanos 可选 | 以单只股票为核心进行展示 |
用户认证 | 注册、登录、会话管理、忘记密码、重置密码 | 注册用户 | Better Auth、Nodemailer | 支撑个性化功能 |
自选股 Watchlist | 添加、移除、查看关注股票 | 登录用户 | MongoDB、Finnhub | 用户个性化股票跟踪 |
价格提醒 Alerts | 创建提醒、查看提醒、删除提醒、启用/停用提醒 | 登录用户 | MongoDB、Server Actions | 默认包含 90 天有效期 |
新闻资讯 | 通用市场新闻、自选股相关新闻 | 所有访问者/登录用户 | Finnhub News API | 自选股页面优先展示相关股票新闻 |
邮件与通知基础 | 重置密码邮件、潜在提醒通知能力 | 注册用户 | Nodemailer | 项目已包含邮件基础设施 |
异步任务/工作流 | 用户创建事件、定时任务、AI 或洞察相关流程 | 系统后台 | Inngest | 用于后端工作流与自动化 |
API 文档页 | 项目 API 与架构说明页面 | 开发者 | 项目内置页面 | 用于开发者理解系统能力 |
帮助/关于/条款页面 | 产品说明、帮助内容、条款信息 | 所有访问者 | 项目静态页面 | 完善产品信息结构 |
功能特点
OpenStock 是一个开源、免费、可自部署的股票行情平台,采用 AGPL-3.0 协议,适合学习、研究和二次开发。项目定位清晰,专注于行情展示、图表分析、新闻资讯、公司资料和个性化监控,不提供交易、资金账户或订单撮合功能。
项目技术栈
分类 | 技术/工具 | 项目中的作用 | 备注 |
前端框架 | Next.js 15.5.7 | 应用框架、路由、服务端渲染、构建 | 使用 App Router |
UI 框架 | React 19.1.0 | 构建交互式用户界面 | 与 Next.js 配套 |
开发语言 | TypeScript 5 | 类型约束与工程可维护性 | 项目主要语言 |
样式方案 | Tailwind CSS 4 | 原子化 CSS 与主题样式 | 配合 PostCSS |
UI 组件 | shadcn/ui、Radix UI | Button、Dialog、Select、Dropdown 等组件 | 强调可组合性 |
数据库 | MongoDB | 用户数据、自选股、提醒数据存储 | 可本地或云端部署 |
ODM | Mongoose 8.19.0 | MongoDB 模型定义与查询 | 定义 Watchlist、Alert 等模型 |
认证 | Better Auth 1.3.25 | 注册、登录、会话管理 | 支撑个性化功能 |
市场数据 | Finnhub API | 股票报价、公司资料、搜索、新闻 | 需要 API Key |
图表组件 | TradingView Widgets | K 线图、热力图、技术分析、市场概览 | 第三方嵌入式组件 |
异步任务 | Inngest 3.47.0 | 工作流、定时任务、后台自动化 | 本地可运行 Inngest Dev |
邮件服务 | Nodemailer 7.0.6 | 邮件发送、密码重置邮件 | 需要邮件服务配置 |
表单处理 | React Hook Form | 表单状态与校验基础 | 用于注册/登录等表单 |
图标 | lucide-react | UI 图标 | 如 Bell、Trash、Trend 图标 |
通知提示 | Sonner | Toast 成功/失败提示 | 如创建提醒提示 |
日期工具 | date-fns | 日期处理 | 辅助新闻日期等场景 |
测试 | Vitest | 单元测试/集成测试 | package scripts 已配置 |
代码规范 | ESLint | 代码检查 | 使用 Next.js ESLint 配置 |
容器化 | Docker、Docker Compose | 应用和 MongoDB 容器化运行 | 便于部署与本地启动 |
分析 | Vercel Analytics | 应用访问分析 | 依赖中包含 |
功能演示
开源地址
https://github.com/Open-Dev-Society/OpenStock