Open-Dev-Society/OpenStock View GitHub Homepage for Latest Official Releases
開源的股票市場追蹤平台,提供即時價格監控、個人化提醒和詳細的公司分析,完全免費且永久開放
AGPL-3.0TypeScriptOpenStockOpen-Dev-Society 5.5k Last Updated: October 24, 2025
OpenStock 專案介紹
專案概述
OpenStock 是一個現代化的開源股票市場應用程式,旨在為所有人提供免費、開放的市場追蹤工具。它是昂貴市場平台的開源替代方案,支援即時價格追蹤、個人化提醒和詳細的公司洞察分析。
核心理念: 知識應該是開放、免費且可存取的,技術應該屬於每個人。
主要特性
🔐 身份驗證
- 基於 Better Auth + MongoDB 的電子郵件/密碼驗證系統
- 透過 Next.js 中介層保護的路由
- 完整的使用者會話管理
🔍 全域搜尋
- 快速的股票搜尋功能,由 Finnhub API 支援
- 閒置時顯示熱門股票,支援防抖查詢
- Command + K 快捷鍵調出命令面板
⭐ 自選股清單
- 每位使用者的自選股儲存在 MongoDB 中
- 每位使用者對每個股票代碼僅能儲存一次
- 便捷的新增/移除功能
📊 股票詳情
- TradingView 提供的股票代碼資訊
- K線圖/進階圖表、基準圖、技術指標
- 公司資料與財務數據小工具
📈 市場概覽
- 熱力圖、行情報價與頭條新聞
- 使用 TradingView 嵌入式小工具
- 即時市場數據更新
🎯 個人化入門流程
- 收集使用者所在國家、投資目標
- 風險承受能力與偏好產業
- 定製化使用者體驗
📧 郵件與自動化
- AI 個人化歡迎郵件(透過 Inngest 呼叫 Gemini)
- 每日新聞摘要郵件(定時任務)
- 基於使用者自選股的個人化內容
🎨 精緻的使用者介面
- shadcn/ui 元件 + Radix UI 基礎元件
- Tailwind v4 設計系統
- 預設深色主題
- 回應式設計
技術棧
核心技術
- Next.js 15 (App Router)
- React 19
- TypeScript
- Tailwind CSS v4 (透過 @tailwindcss/postcss)
- shadcn/ui + Radix UI 基礎元件
- Lucide 圖示庫
認證與資料
- Better Auth – 電子郵件/密碼認證,搭配 MongoDB 適配器
- MongoDB + Mongoose – 資料持久化
- Finnhub API – 股票代碼、公司資料與市場新聞
- TradingView – 可嵌入的圖表小工具
自動化與通訊
- Inngest – 事件處理、定時任務、AI 推理 (Gemini)
- Nodemailer – 郵件發送 (Gmail 傳輸)
- next-themes – 主題切換
- cmdk – 命令面板
- react-hook-form – 表單處理
語言組成
- TypeScript (~93.4%)
- CSS (~6%)
- JavaScript (~0.6%)
專案結構
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 # Inngest API 端點
├── globals.css
└── layout.tsx
components/
├── ui/ # shadcn/radix 基礎元件
├── forms/ # 表單元件
├── Header.tsx
├── Footer.tsx
├── SearchCommand.tsx
└── WatchlistButton.tsx
database/
├── models/watchlist.model.ts
└── mongoose.ts
lib/
├── actions/ # 伺服器操作
│ ├── auth
│ ├── finnhub
│ ├── user
│ └── watchlist
├── better-auth/
├── inngest/ # Inngest 客戶端與函數
├── nodemailer/ # 郵件發送設定
├── constants.ts
└── utils.ts
scripts/
└── test-db.mjs # 資料庫連線測試
types/
└── global.d.ts
public/assets/images/ # Logo 與截圖
快速開始
前置需求
- Node.js 20+
- pnpm 或 npm
- MongoDB 連接字串 (MongoDB Atlas 或本機 Docker)
- Finnhub API 金鑰
- Gmail 帳戶 (用於寄送郵件)
- 選填:Google Gemini API 金鑰 (用於 AI 生成內容)
安裝步驟
- 複製儲存庫
git clone https://github.com/Open-Dev-Society/OpenStock.git
cd OpenStock
- 安裝依賴
pnpm install
# 或
npm install
- 設定環境變數
建立 .env 檔案:
# 核心設定
NODE_ENV=development
# 資料庫
MONGODB_URI=your_mongodb_connection_string
# 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
# 郵件設定
NODEMAILER_EMAIL=youraddress@gmail.com
NODEMAILER_PASSWORD=your_gmail_app_password
- 驗證資料庫連線
pnpm test:db
- 啟動開發伺服器
pnpm dev
- 啟動 Inngest (用於工作流程與定時任務)
npx inngest-cli@latest dev
- 存取應用程式
開啟瀏覽器並前往 http://localhost:3000
Docker 部署
專案提供 Docker Compose 設定,可快速啟動應用程式與 MongoDB:
# 啟動 MongoDB
docker compose up -d mongodb
# 建置並啟動應用程式
docker compose up -d --build
使用 Docker 時,MongoDB 連接字串應為:
MONGODB_URI=mongodb://root:example@mongodb:27017/openstock?authSource=admin
資料與整合
Finnhub API
- 提供股票搜尋、公司資料與市場新聞
- 免費版本可能回傳延遲行情
- 需注意速率限制
TradingView
- 提供可嵌入的圖表、熱力圖、行情等小工具
- 外部圖片來自
i.ibb.co
Better Auth + MongoDB
- 電子郵件/密碼認證
- MongoDB 適配器用於會話儲存
- 大多數路由受保護,僅登入/註冊頁面除外
Inngest 工作流程
- 使用者建立事件 → AI 個人化歡迎郵件
- 定時任務 (每日中午12點) → 發送新聞摘要郵件
- 本機開發使用
npx inngest-cli@latest dev
郵件發送 (Nodemailer)
- 使用 Gmail 作為傳輸方式
- 提供歡迎郵件與新聞摘要範本
- 建議生產環境使用專業 SMTP 服務
可用腳本
pnpm dev– 啟動開發伺服器 (Turbopack)pnpm build– 生產環境建置pnpm start– 啟動生產伺服器pnpm lint– 執行 ESLintpnpm test:db– 驗證資料庫連線
開發者體驗
- TypeScript 嚴格模式
- Tailwind CSS v4 (無需額外設定檔)
- shadcn/ui 元件庫
- cmdk 命令面板
- next-themes 主題切換
- lucide-react 圖示
Open Dev Society 宣言
我們生活在一個知識被付費牆隱藏的世界,工具被鎖在訂閱服務中,資訊被偏見扭曲,新手被告知他們「不夠好」無法構建。
我們的信念:
- 技術應該屬於每個人
- 知識應該是開放、免費且可存取的
- 社群應該以信任而非門檻來歡迎新手
我們的使命:
- 構建真正有用的免費開源專案
- 讓專業人士與學生皆可無障礙使用的工具
- 學習永遠免費的知識平台
- 引導而非評判初學者的社群
- 基於信任而非利潤運作的資源
我們的承諾:
- 永遠不會封鎖知識
- 永遠不會收取存取費用
- 永遠不會用信任交換金錢
- 在透明度、捐贈與社群力量的基礎上運作
貢獻指南
歡迎所有人貢獻!無論你是學生、自學開發者還是資深工程師。
- 透過 Issue 討論想法與 Bug
- 尋找標記為 "good first issue" 或 "help wanted" 的問題
- 保持 PR 專注,UI 變更請附上截圖
- 友善待人,引導初學者,拒絕門檻 — 這就是 ODS 之道
安全性
若發現安全漏洞:
- 請勿公開提交 Issue
- 寄送電子郵件至:opendevsociety@cc.cc
- 我們將協調負責任的揭露並迅速修補
授權條款
OpenStock 採用 AGPL-3.0 授權條款。若您修改、重新分發或部署此專案(包括作為 Web 服務),您必須在相同授權條款下發布您的原始碼並註明原作者。
致謝
- Finnhub – 提供可存取的市場資料
- TradingView – 提供可嵌入的市場小工具
- shadcn/ui, Radix UI, Tailwind CSS, Next.js 社群
- Inngest – 可靠的後台任務與工作流程
- Better Auth – 簡單安全的認證
- 所有讓開源工具成為可能的貢獻者
特別感謝 Adrian Hajdin (JavaScript Mastery),他出色的股票市場應用程式教學為 Open Dev Society 構建 OpenStock 提供了重要幫助。
構建於開放,為每個人,永遠免費。—— Open Dev Society