© 开放开发社会。该项目根据 AGPL-3.0 获得许可;如果您修改、重新分发或部署它(包括作为 Web 服务),则必须在同一许可证下发布源代码并注明原始作者。
开放库存
OpenStock 是昂贵市场平台的开源替代品。跟踪实时价格、设置个性化提醒并探索详细的公司见解 – 为所有人公开构建,永久免费。
注意:OpenStock 是社区构建的,而不是经纪公司。市场数据可能会根据提供商规则和您的配置而延迟。这里没有任何财务建议。
📋 目录
- ✨ 介绍
- 🌍 开放开发协会宣言
- ⚙️ 技术栈
- 🔋 特征
- 🤸 快速入门
- 🐳 Docker 设置
- 🔐 环境变量
- 🧱 项目结构
- 📡 数据与集成
- 🧪 脚本和工具
- 🤝 贡献
- 🛡️ 安全
- 📜 许可证
- 🙏 确认
✨ 介绍
OpenStock 是一款现代股票市场应用程序,由 Next.js(App Router)、shadcn/ui 和 Tailwind CSS、用于身份验证的 Better Auth、用于持久性的 MongoDB、用于市场数据的 Finnhub 以及用于图表和市场视图的 TradingView 小部件提供支持。
🌍 开放开发协会宣言
我们生活在一个知识隐藏在付费墙后面的世界。工具锁定在订阅中的位置。信息因偏见而扭曲的地方。新来者被告知他们“不够好”,无法建造。
我们相信有更好的方法。
- 我们的信念:技术应该属于每个人。知识应该是开放的、自由的和可访问的。社区应该以信任而不是把关的方式欢迎新来者。
- 我们的使命:构建真正与众不同的免费开源项目:
- 专业人士和学生可以无障碍使用的工具。
- 永远免费学习的知识平台。
- 每个初学者都受到指导而不是评判的社区。
- 依靠信任而不是利润运行的资源。
- 我们的承诺:我们永远不会锁定知识。我们绝不会收取访问费用。我们永远不会用信任换取金钱。我们依靠透明度、捐款和社区的力量来运作。
- 我们的呼吁:如果您曾经觉得自己没有归属感,难以寻找免费资源,或者想要建立一些有意义的东西,那么您就属于这里。
因为未来属于那些公开建设它的人。
⚙️ 技术栈
核心
- Next.js 15(应用程序路由器)、React 19
- 打字脚本
- Tailwind CSS v4(通过 @tailwindcss/postcss)
- shadcn/ui + Radix UI 基元
- Lucide 图标
身份验证和数据
- 使用 MongoDB 适配器进行更好的身份验证(电子邮件/密码)
- MongoDB + 猫鼬
- 用于符号、配置文件和市场新闻的 Finnhub API
- TradingView 可嵌入小部件
自动化与通信
- Inngest(事件、cron、通过 Gemini 进行的 AI 推理)
- Nodemailer(Gmail 传输)
- next-themes, cmdk(命令面板), react-hook-form
语言构成
- TypeScript (~93.4%)、CSS (~6%)、JavaScript (~0.6%)
🔋 特征
- 认证
- 使用 Better Auth + MongoDB 适配器进行电子邮件/密码身份验证
- 通过Next.js中间件强制执行的受保护路由
- 全局搜索和 Command + K 调色板
- 由 Finnhub 支持的快速股票搜索
- 闲置时热门股票;去抖动查询
- 关注列表
- 存储在 MongoDB 中的每用户监视列表(每个用户的唯一符号)
- 库存详情
- TradingView 交易品种信息、烛台/高级图表、基线、技术面
- 公司简介和财务小部件
- 市场概况
- 热图、报价和头条新闻(TradingView 小部件)
- 个性化入职
- 收集国家、投资目标、风险承受能力、首选行业
- 电子邮件和自动化
- 人工智能个性化欢迎电子邮件(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.git
cd OpenStock
# choose one:
pnpm install
# or
npm install
配置环境
- 创建一个文件(请参阅环境变量)。
.env - 验证数据库连接:
pnpm test:db
# or
npm run test:db
运行开发
# Next.js dev (Turbopack)
pnpm dev
# or
npm run dev
在本地运行 Inngest(工作流、cron、AI)
npx inngest-cli@latest dev
生成和启动(生产)
pnpm build && pnpm start
# or
npm run build && npm start
打开 http://localhost:3000 以查看应用程序。
🐳 Docker 设置
您可以使用 Docker Compose 轻松运行 OpenStock 和 MongoDB。
-
确保已安装 Docker 和 Docker Compose。
-
docker-compose.yml包括两项服务:
- OpenStock(此应用程序)
- mongodb(具有持久卷的 MongoDB 数据库)
- 创建您的(请参阅下面的示例)。对于 Docker 设置,请使用本地连接字符串,例如:
.env
MONGODB_URI=mongodb://root:example@mongodb:27017/openstock?authSource=admin
- 开始堆栈:
# from the repository root
docker compose up -d mongodb && docker compose up -d --build
- 访问应用程序:
- 应用程序:http://localhost:3000
- MongoDB 可在 Docker 网络内使用,主机为 mongodb:27017
笔记
- 应用服务depends_on mongodb 服务。
- 凭据在 Compose 中为 MongoDB root 用户定义;root的连接字符串上需要authSource=admin。
- 数据在通过 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:
🔐 环境变量
在项目根目录下创建。选择托管的 MongoDB (Atlas) URI 或本地 Docker URI。.env
托管(MongoDB Atlas):
# Core
NODE_ENV=development
# Database (Atlas)
MONGODB_URI=mongodb+srv://<user>:<pass>@<cluster>/<db>?retryWrites=true&w=majority
# Better Auth
BETTER_AUTH_SECRET=your_better_auth_secret
BETTER_AUTH_URL=http://localhost:3000
# Finnhub
FINNHUB_API_KEY=your_finnhub_key
# Optional client-exposed variant if needed by client code:
NEXT_PUBLIC_FINNHUB_API_KEY=
FINNHUB_BASE_URL=https://finnhub.io/api/v1
# Inngest AI (Gemini)
GEMINI_API_KEY=your_gemini_api_key
# Email (Nodemailer via Gmail; consider App Passwords if 2FA)
NODEMAILER_EMAIL=youraddress@gmail.com
NODEMAILER_PASSWORD=your_gmail_app_password
本地(Docker Compose)MongoDB:
# Core
NODE_ENV=development
# Database (Docker)
MONGODB_URI=mongodb://root:example@mongodb:27017/openstock?authSource=admin
# Better Auth
BETTER_AUTH_SECRET=your_better_auth_secret
BETTER_AUTH_URL=http://localhost:3000
# Finnhub
FINNHUB_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
# Email (Nodemailer via Gmail; consider App Passwords if 2FA)
NODEMAILER_EMAIL=youraddress@gmail.com
NODEMAILER_PASSWORD=your_gmail_app_password
笔记
- 尽可能将私有密钥保留在服务器端。
- 如果使用变量,请记住它们会向浏览器公开。
NEXT_PUBLIC_ - 在生产环境中,与个人 Gmail 相比,更喜欢专用的 SMTP 提供商。
- 不要在 Dockerfile 中对机密进行硬编码;use 和 Compose。
.env
🧱 项目结构
app/
(auth)/
layout.tsx
sign-in/page.tsx
sign-up/page.tsx
(root)/
layout.tsx
page.tsx
help/page.tsx
stocks/[symbol]/page.tsx
api/inngest/route.ts
globals.css
layout.tsx
components/
ui/… # shadcn/radix primitives (button, dialog, command, input, etc.)
forms/… # InputField, SelectField, CountrySelectField, FooterLink
Header.tsx, Footer.tsx, SearchCommand.tsx, WatchlistButton.tsx, …
database/
models/watchlist.model.ts
mongoose.ts
lib/
actions/… # server actions (auth, finnhub, user, watchlist)
better-auth/…
inngest/… # client, functions, prompts
nodemailer/… # transporter, email templates
constants.ts, utils.ts
scripts/
test-db.mjs
types/
global.d.ts
next.config.ts # i.ibb.co image domain allowlist
postcss.config.mjs # Tailwind v4 postcss setup
components.json # shadcn config
public/assets/images/ # logos and screenshots
📡 数据与集成
-
芬兰中心
- 股票搜索、公司简介和市场新闻。
- 设置 and(默认值:https://finnhub.io/api/v1)。
FINNHUB_API_KEYFINNHUB_BASE_URL - 免费套餐可能会返回延迟报价;尊重速率限制和条款。
-
交易视图
- 用于图表、热图、报价和时间线的可嵌入小部件。
- 中的外部图像已列入允许列表。
i.ibb.conext.config.ts
-
更好的身份验证 + MongoDB
- 带有 MongoDB 适配器的电子邮件/密码。
- 通过中间件进行会话验证;大多数路由都受到保护,但 、 、 资产 和 Next 内部结构除外。
sign-insign-up
-
Inngest
- 工作流程:
app/user.created→ AI 个性化欢迎电子邮件- Cron →每位用户每日新闻摘要
0 12 * * *
- 本地开发:。
npx inngest-cli@latest dev
- 工作流程:
-
电子邮件(Nodemailer)
- Gmail 传输。更新凭据或切换到您的 SMTP 提供商。
- 欢迎和新闻摘要电子邮件的模板。
🧪 脚本和工具
打包脚本
dev:带有 Turbopack 的Next.js开发服务器build:量产版本(涡轮增压组)start:运行生产服务器lint: ESLinttest:db:验证数据库连接
开发人员体验
- TypeScript 严格模式
- Tailwind CSS v4(无需单独的 tailwind.config)
- 带有 Radix 原语的 shadcn/ui 组件
- cmdk 命令面板、next-themes、lucide-react 图标


没有回复内容