OpenStock  股票数据平台开源了-开源码库社区-开源分享-6协议-村兔网

OpenStock 股票数据平台开源了

 

 

Project Banner © 开放开发社会。该项目根据 AGPL-3.0 获得许可;如果您修改、重新分发或部署它(包括作为 Web 服务),则必须在同一许可证下发布源代码并注明原始作者。      

开放库存

OpenStock 是昂贵市场平台的开源替代品。跟踪实时价格、设置个性化提醒并探索详细的公司见解 – 为所有人公开构建,永久免费。

注意:OpenStock 是社区构建的,而不是经纪公司。市场数据可能会根据提供商规则和您的配置而延迟。这里没有任何财务建议。

📋 目录

  1. ✨ 介绍
  2. 🌍 开放开发协会宣言
  3. ⚙️ 技术栈
  4. 🔋 特征
  5. 🤸 快速入门
  6. 🐳 Docker 设置
  7. 🔐 环境变量
  8. 🧱 项目结构
  9. 📡 数据与集成
  10. 🧪 脚本和工具
  11. 🤝 贡献
  12. 🛡️ 安全
  13. 📜 许可证
  14. 🙏 确认

✨ 介绍

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。

  1. 确保已安装 Docker 和 Docker Compose。

  2. docker-compose.yml包括两项服务:

  • OpenStock(此应用程序)
  • mongodb(具有持久卷的 MongoDB 数据库)
  1. 创建您的(请参阅下面的示例)。对于 Docker 设置,请使用本地连接字符串,例如:.env
MONGODB_URI=mongodb://root:example@mongodb:27017/openstock?authSource=admin
  1. 开始堆栈:
# from the repository root
docker compose up -d mongodb && docker compose up -d --build
  1. 访问应用程序:
  • 应用程序: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: ESLint
  • test:db:验证数据库连接

开发人员体验

  • TypeScript 严格模式
  • Tailwind CSS v4(无需单独的 tailwind.config)
  • 带有 Radix 原语的 shadcn/ui 组件
  • cmdk 命令面板、next-themes、lucide-react 图标

 

请登录后发表评论

    没有回复内容