OpenStock:面向全球市场的开源免费股票平台
英文标题:🔥 Open-Dev-Society/OpenStock
Open Dev Society 推出了 OpenStock,这是一款基于 Next.js、MongoDB、Finnhub 和 TradingView 构建的开源股票市场应用,定位为昂贵商业行情平台的免费替代方案。该项目提供实时或准实时行情跟踪、自选股、个性化提醒、公司信息、市场热图、技术图表及 AI 驱动的邮件摘要等功能,并采用 AGPL-3.0 许可证。OpenStock 支持 30 多家国际证券交易所,但免费数据源对新兴市场覆盖和非美股实时性存在限制,部分行情可能延迟 15 分钟以上。对开发者而言,项目提供了完整的 Docker Compose、本地开发、Inngest 自动化及多 AI Provider 配置,可作为构建金融信息产品的开源基础。
269.5 KB
82.2 KB
中文
Open Dev Society 新项目:kitbash。在开始构建之前,先了解 GitHub 上哪些组件已经存在。借用它们、改造它们,或自行编写其余部分。

© Open Dev Society。本项目采用 AGPL-3.0 许可证;如果你修改、重新分发或部署本项目(包括将其作为 Web 服务部署),必须以相同许可证发布源代码,并注明原始作者。
OpenStock 是昂贵市场平台的开源替代方案。它支持追踪实时价格、设置个性化提醒并查看详尽的公司洞察——以开放方式构建,面向所有人,永久免费。
注意:OpenStock 由社区构建,并非证券经纪商。市场数据可能会因数据提供商规则和你的配置而延迟。本文内容不构成任何投资建议。
- ✨ 简介
- 🌍 Open Dev Society 宣言
- ⚙️ 技术栈
- 🔋 功能
- 🤸 快速开始
- 🐳 Docker 设置
- 🔐 环境变量
- 🧱 项目结构
- 📡 数据与集成
- 🌍 市场支持
- 🧪 脚本与工具
- 🤝 参与贡献
- 🛡️ 安全性
- 📜 许可证
- 🙏 致谢
✨ 简介
OpenStock 是一款现代股票市场应用,采用 Next.js(App Router)、shadcn/ui 和 Tailwind CSS 构建,使用 Better Auth 处理认证、MongoDB 进行持久化、Finnhub 提供市场数据,并通过 TradingView widgets 呈现图表和市场视图。
🌍 Open Dev Society 宣言
我们生活在这样一个世界:知识被隐藏在付费墙后,工具被锁定在订阅服务中,信息因偏见而扭曲,新手被告知自己“不够好”,无法参与构建。
我们相信,存在一种更好的方式。
- **我们的信念:**技术应当属于每一个人。知识应当开放、免费且易于获取。社区应以信任欢迎新手,而不是设置门槛。
- **我们的使命:**构建真正带来改变的免费开源项目:
- 让专业人士和学生都能无障碍使用的工具。
- 学习永久免费的知识平台。
- 每位初学者都会获得指导、而非评判的社区。
- 以信任而非利润为基础运行的资源。
- **我们的承诺:**我们永远不会锁住知识,永远不会为访问权限收费,永远不会用信任交换金钱。我们依靠透明度、捐赠和社区的力量运行。
- **我们的号召:**如果你曾感到自己不属于这里,曾难以找到免费资源,或曾想构建有意义的事物——你就属于这里。
因为未来属于那些以开放方式创造未来的人。
⚙️ 技术栈
核心
- Next.js 15(App Router)、React 19
- TypeScript
- Tailwind CSS v4(通过
@tailwindcss/postcss) - shadcn/ui + Radix UI primitives
- Lucide 图标
认证与数据
- Better Auth(电子邮件/密码),使用 MongoDB adapter
- MongoDB + Mongoose
- Finnhub API,用于证券代码、公司资料和市场新闻
- TradingView 可嵌入 widgets
自动化与通信
- Inngest(事件、cron、通过 Gemini 进行 AI 推理)
- Nodemailer(Gmail transport)
- next-themes、cmdk(命令面板)、react-hook-form
语言构成
- TypeScript(约 93.4%)、CSS(约 6%)、JavaScript(约 0.6%)
🔋 功能
- 认证
- 使用 Better Auth + MongoDB adapter 的电子邮件/密码认证
- 通过 Next.js middleware 强制执行受保护路由
- 全局搜索与 Command + K 面板
- 由 Finnhub 驱动的快速股票搜索
- 空闲时显示热门股票;查询采用防抖处理
- 自选股列表
- 每位用户的自选股存储在 MongoDB 中(每位用户的证券代码唯一)
- 股票详情
- TradingView 证券信息、K 线/高级图表、基准线和技术指标
- 公司资料和财务 widgets
- 可选的跨来源情绪洞察,覆盖 Reddit、X.com、新闻和 Polymarket
- 市场概览
- 热图、报价和头条新闻(TradingView widgets)
- 个性化引导
- 收集所在国家、投资目标、风险承受能力和偏好行业
- 电子邮件与自动化
- AI 个性化欢迎邮件(通过 Inngest 调用 Gemini)
- 每日新闻摘要邮件(cron),依据用户自选股进行个性化生成
- 精致 UI
- shadcn/ui 组件、Radix primitives、Tailwind v4 设计 token
- 默认启用深色主题
- 键盘快捷键
- 使用 Cmd/Ctrl + K 快速执行操作或搜索
🤸 快速开始
前置条件
- Node.js 20+,以及 pnpm 或 npm
- MongoDB 连接字符串(MongoDB Atlas,或通过 Docker Compose 在本地运行)
- Finnhub API key(支持免费套餐;实时数据可能需要付费)
- 用于电子邮件的 Gmail 账户(或更新 Nodemailer transport)
- 可选:Google Gemini API key(用于 AI 生成的欢迎语)
克隆并安装
git clone https://github.com/Open-Dev-Society/OpenStock.git cd OpenStock
选择其一:
pnpm install
或
npm install
配置环境
pnpm test:db
或
npm run test:db
运行开发环境
Next.js 开发服务器(Turbopack)
pnpm dev
或
npm run dev
在本地运行 Inngest(工作流、cron、AI)
npx inngest-cli@latest dev
构建并启动(生产环境)
pnpm build && pnpm start
或
npm run build && npm start
打开 http://localhost:3000 查看应用。
🐳 Docker 设置
你可以借助 Docker Compose 轻松运行 OpenStock 和 MongoDB。
-
确保已安装 Docker 和 Docker Compose。
-
docker-compose.yml包含两个服务:
openstock(本应用)mongodb(使用持久化卷的 MongoDB 数据库)
- 创建
.env(参见下面的示例)。对于 Docker 设置,请使用如下本地连接字符串:
MONGODB_URI=mongodb://root:example@mongodb:27017/openstock?authSource=admin
- 启动服务栈:
在仓库根目录中执行
docker compose up -d mongodb && docker compose up -d --build
- 访问应用。
注意事项
- 应用服务通过
depends_on依赖mongodb服务。 - MongoDB root 用户的凭据在 Compose 中定义;root 用户连接字符串必须包含
authSource=admin。 - 数据通过 Docker volume 在重启后继续保留。
可选:本项目使用的 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://:@/?retryWrites=true&w=majority
Better Auth
BETTER_AUTH_SECRET=your_better_auth_secret BETTER_AUTH_URL=http://localhost:3000
Finnhub
注意:部署到 Vercel 时需要 NEXT_PUBLIC_FINNHUB_API_KEY
NEXT_PUBLIC_FINNHUB_API_KEY=your_finnhub_key FINNHUB_BASE_URL=https://finnhub.io/api/v1
情绪洞察(可选)
ADANOS_API_KEY=your_adanos_api_key
ADANOS_API_BASE_URL=https://api.adanos.org
AI Provider(可选,默认值:"gemini")
支持:"gemini"、"minimax"、"siray"
AI_PROVIDER=gemini
Gemini
GEMINI_API_KEY=your_gemini_api_key
MiniMax(可选,在 AI_PROVIDER=minimax 时使用,或作为回退方案)
在 https://platform.minimaxi.com 获取你的 key
MINIMAX_API_KEY=your_minimax_api_key
Inngest Signing Key(部署到 Vercel 时需要)
在 Inngest dashboard 获取:https://app.inngest.com/env/settings/keys
INNGEST_SIGNING_KEY=your_inngest_signing_key
电子邮件(通过 Gmail 使用 Nodemailer;若启用 2FA,请考虑使用 App Password)
NODEMAILER_EMAIL=youraddress@gmail.com NODEMAILER_PASSWORD=your_gmail_app_password
本地 MongoDB(Docker Compose)
核心
NODE_ENV=development
数据库(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
注意:部署到 Vercel 时需要 NEXT_PUBLIC_FINNHUB_API_KEY
NEXT_PUBLIC_FINNHUB_API_KEY=your_finnhub_key FINNHUB_BASE_URL=https://finnhub.io/api/v1
情绪洞察(可选)
ADANOS_API_KEY=your_adanos_api_key
ADANOS_API_BASE_URL=https://api.adanos.org
AI Provider(可选,默认值:"gemini")
支持:"gemini"、"minimax"、"siray"
AI_PROVIDER=gemini
Gemini
GEMINI_API_KEY=your_gemini_api_key
MiniMax(可选,在 AI_PROVIDER=minimax 时使用,或作为回退方案)
在 https://platform.minimaxi.com 获取你的 key
MINIMAX_API_KEY=your_minimax_api_key
Inngest Signing Key(部署到 Vercel 时需要)
在 Inngest dashboard 获取:https://app.inngest.com/env/settings/keys
INNGEST_SIGNING_KEY=your_inngest_signing_key
电子邮件(通过 Gmail 使用 Nodemailer;若启用 2FA,请考虑使用 App Password)
NODEMAILER_EMAIL=youraddress@gmail.com NODEMAILER_PASSWORD=your_gmail_app_password
注意事项
- 尽可能将私钥保留在服务端。
- 如果使用
NEXT_PUBLIC_变量,请注意它们会暴露给浏览器。 - 在生产环境中,建议使用专用 SMTP provider,而不是个人 Gmail。
- 不要在 Dockerfile 中硬编码密钥;请使用
.env和 Compose。
🧱 项目结构
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 等) 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 图片域名 allowlist postcss.config.mjs # Tailwind v4 postcss 设置 components.json # shadcn 配置 public/assets/images/ # logos 和 screenshots
📡 数据与集成
OpenStock 支持 30 多家国际证券交易所,包括 NSE、LSE、TSX 等。但请注意,基于所使用的数据提供商,平台存在重要限制。
快速信息:
- ✅ Finnhub 支持大多数全球交易所
- ⚠️ TradingView 免费套餐对新兴市场存在限制(印度 NSE、越南等)
- 📊 免费套餐中,非美国股票的实时数据会延迟 15 分钟以上
请查看 MARKET_SUPPORT.md 以了解:
- 完整的支持交易所列表
- 已知限制和解决方案
- 为什么会出现“此证券代码仅在 TradingView 中可用”
- 如何升级以获得更广泛的市场覆盖
- 未来计划中的改进
如需了解最新支持的证券代码和交易所,请参阅 Finnhub 的交易所列表。
🧪 脚本与工具
Package scripts
dev:使用 Turbopack 启动 Next.js 开发服务器build:生产构建(Turbopack)start:运行生产服务器lint:ESLinttest:db:验证数据库连接
开发者体验
- TypeScript 严格模式
- Tailwind CSS v4(无需单独的 tailwind.config
English / 原文
New from Open Dev Society: kitbash. Before you build, find out which parts already exist on GitHub. Borrow them, adapt them, or write the rest.

© Open Dev Society. This project is licensed under AGPL-3.0; if you modify, redistribute, or deploy it (including as a web service), you must release your source code under the same license and credit the original authors.
OpenStock is an open-source alternative to expensive market platforms. Track real-time prices, set personalized alerts, and explore detailed company insights — built openly, for everyone, forever free.
Note: OpenStock is community-built and not a brokerage. Market data may be delayed based on provider rules and your configuration. Nothing here is financial advice.
- ✨ Introduction
- 🌍 Open Dev Society Manifesto
- ⚙️ Tech Stack
- 🔋 Features
- 🤸 Quick Start
- 🐳 Docker Setup
- 🔐 Environment Variables
- 🧱 Project Structure
- 📡 Data & Integrations
- 🌍 Market Support
- 🧪 Scripts & Tooling
- 🤝 Contributing
- 🛡️ Security
- 📜 License
- 🙏 Acknowledgements
OpenStock is a modern stock market app powered by Next.js (App Router), shadcn/ui and Tailwind CSS, Better Auth for authentication, MongoDB for persistence, Finnhub for market data, and TradingView widgets for charts and market views.
🌍 Open Dev Society Manifesto
We live in a world where knowledge is hidden behind paywalls. Where tools are locked in subscriptions. Where information is twisted by bias. Where newcomers are told they’re not “good enough” to build.
We believe there’s a better way.
- Our Belief: Technology should belong to everyone. Knowledge should be open, free, and accessible. Communities should welcome newcomers with trust, not gatekeeping.
- Our Mission: Build free, open-source projects that make a real difference:
- Tools that professionals and students can use without barriers.
- Knowledge platforms where learning is free, forever.
- Communities where every beginner is guided, not judged.
- Resources that run on trust, not profit.
- Our Promise: We will never lock knowledge. We will never charge for access. We will never trade trust for money. We run on transparency, donations, and the strength of our community.
- Our Call: If you’ve ever felt you didn’t belong, struggled to find free resources, or wanted to build something meaningful — you belong here.
Because the future belongs to those who build it openly.
Core
- Next.js 15 (App Router), React 19
- TypeScript
- Tailwind CSS v4 (via @tailwindcss/postcss)
- shadcn/ui + Radix UI primitives
- Lucide icons
Auth & Data
- Better Auth (email/password) with MongoDB adapter
- MongoDB + Mongoose
- Finnhub API for symbols, profiles, and market news
- TradingView embeddable widgets
Automation & Comms
- Inngest (events, cron, AI inference via Gemini)
- Nodemailer (Gmail transport)
- next-themes, cmdk (command palette), react-hook-form
Language composition
-
TypeScript (~93.4%), CSS (~6%), JavaScript (~0.6%)
-
Authentication
- Email/password auth with Better Auth + MongoDB adapter
- Protected routes enforced via Next.js middleware
-
Global search and Command + K palette
- Fast stock search backed by Finnhub
- Popular stocks when idle; debounced querying
-
Watchlist
- Per-user watchlist stored in MongoDB (unique symbol per user)
-
Stock details
- TradingView symbol info, candlestick/advanced charts, baseline, technicals
- Company profile and financials widgets
- Optional cross-source sentiment insights for Reddit, X.com, news, and Polymarket
-
Market overview
- Heatmap, quotes, and top stories (TradingView widgets)
-
Personalized onboarding
- Collects country, investment goals, risk tolerance, preferred industry
-
Email & automation
- AI-personalized welcome email (Gemini via Inngest)
- Daily news summary emails (cron) personalized using user watchlists
-
Polished UI
- shadcn/ui components, Radix primitives, Tailwind v4 design tokens
- Dark theme by default
-
Keyboard shortcut
- Cmd/Ctrl + K for quick actions/search
Prerequisites
- Node.js 20+ and pnpm or npm
- MongoDB connection string (MongoDB Atlas or local via Docker Compose)
- Finnhub API key (free tier supported; real-time may require paid)
- Gmail account for email (or update Nodemailer transport)
- Optional: Google Gemini API key (for AI-generated welcome intros)
Clone and install
git clone https://github.com/Open-Dev-Society/OpenStock.git
cd OpenStock
# choose one:
pnpm install
# or
npm install
Configure environment
pnpm test:db
# or
npm run test:db
Run development
# Next.js dev (Turbopack)
pnpm dev
# or
npm run dev
Run Inngest locally (workflows, cron, AI)
npx inngest-cli@latest dev
Build & start (production)
pnpm build && pnpm start
# or
npm run build && npm start
Open http://localhost:3000 to view the app.
You can run OpenStock and MongoDB easily with Docker Compose.
-
Ensure Docker and Docker Compose are installed.
-
docker-compose.yml includes two services:
- openstock (this app)
- mongodb (MongoDB database with a persistent volume)
- Create your
.env(see examples below). For the Docker setup, use a local connection string like:
MONGODB_URI=mongodb://root:example@mongodb:27017/openstock?authSource=admin
- Start the stack:
# from the repository root
docker compose up -d mongodb && docker compose up -d --build
- Access the app:
Notes
- The app service depends_on the mongodb service.
- Credentials are defined in Compose for the MongoDB root user; authSource=admin is required on the connection string for root.
- Data persists across restarts via the docker volume.
Optional: Example MongoDB service definition used in this project:
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:
Create .env at the project root. Choose either a hosted MongoDB (Atlas) URI or the local Docker URI.
Hosted (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
# Note: NEXT_PUBLIC_FINNHUB_API_KEY is required for Vercel deployment
NEXT_PUBLIC_FINNHUB_API_KEY=your_finnhub_key
FINNHUB_BASE_URL=https://finnhub.io/api/v1
# Sentiment insights (optional)
ADANOS_API_KEY=your_adanos_api_key
# ADANOS_API_BASE_URL=https://api.adanos.org
# AI Provider (optional, default: "gemini")
# Supported: "gemini", "minimax", "siray"
# AI_PROVIDER=gemini
# Gemini
GEMINI_API_KEY=your_gemini_api_key
# MiniMax (optional, used when AI_PROVIDER=minimax or as fallback)
# Get your key at https://platform.minimaxi.com
# MINIMAX_API_KEY=your_minimax_api_key
# Inngest Signing Key (required for Vercel deployment)
# Get this from your Inngest dashboard: https://app.inngest.com/env/settings/keys
INNGEST_SIGNING_KEY=your_inngest_signing_key
# Email (Nodemailer via Gmail; consider App Passwords if 2FA)
NODEMAILER_EMAIL=youraddress@gmail.com
NODEMAILER_PASSWORD=your_gmail_app_password
Local (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
# Note: NEXT_PUBLIC_FINNHUB_API_KEY is required for Vercel deployment
NEXT_PUBLIC_FINNHUB_API_KEY=your_finnhub_key
FINNHUB_BASE_URL=https://finnhub.io/api/v1
# Sentiment insights (optional)
ADANOS_API_KEY=your_adanos_api_key
# ADANOS_API_BASE_URL=https://api.adanos.org
# AI Provider (optional, default: "gemini")
# Supported: "gemini", "minimax", "siray"
# AI_PROVIDER=gemini
# Gemini
GEMINI_API_KEY=your_gemini_api_key
# MiniMax (optional, used when AI_PROVIDER=minimax or as fallback)
# Get your key at https://platform.minimaxi.com
# MINIMAX_API_KEY=your_minimax_api_key
# Inngest Signing Key (required for Vercel deployment)
# Get this from your Inngest dashboard: https://app.inngest.com/env/settings/keys
INNGEST_SIGNING_KEY=your_inngest_signing_key
# Email (Nodemailer via Gmail; consider App Passwords if 2FA)
NODEMAILER_EMAIL=youraddress@gmail.com
NODEMAILER_PASSWORD=your_gmail_app_password
Notes
-
Keep private keys server-side whenever possible.
-
If using
NEXT_PUBLIC_variables, remember they are exposed to the browser. -
In production, prefer a dedicated SMTP provider over a personal Gmail.
-
Do not hardcode secrets in the Dockerfile; use
.envand Compose.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
OpenStock supports 30+ international stock exchanges including NSE, LSE, TSX, and more. However, please be aware of important limitations based on our data providers.
Quick Facts :
- ✅ Finnhub supports most global exchanges
- ⚠️ TradingView free tier has restrictions on emerging markets (India NSE, Vietnam, etc.)
- 📊 Real-time data for non-US stocks is delayed by 15+ minutes on free tier
SeeMARKET_SUPPORT.md for:
- Complete list of supported exchanges
- Known limitations and workarounds
- Why "This symbol is only available on TradingView" appears
- How to upgrade for broader market coverage
- Future improvements planned
For the latest supported symbols and exchanges, see Finnhub's exchange list.
Package scripts
dev: Next.js dev server with Turbopackbuild: Production build (Turbopack)start: Run production serverlint: ESLinttest:db: Validate DB connectivity
Developer experience
- TypeScript strict mode
- Tailwind CSS v4 (no separate tailwind.config needed)
- shadcn/ui components with Radix primitives
- cmdk command palette, next-themes, lucide-react icons
You belong here. Whether you’re a student, a self-taught dev, or a seasoned engineer — contributions are welcome.
- Open an issue to discuss ideas and bugs
- Look for “good first issue” or “help wanted”
- Keep PRs focused; add screenshots for UI changes
- Be kind, guide beginners, no gatekeeping — that’s the ODS way
If you discover a vulnerability:
- Do not open a public issue
- Email: opendevsociety@cc.cc
- We'll coordinate responsible disclosure and patch swiftly
OpenStock is and will remain free and open for everyone. This project is licensed under the AGPL-3.0 License - see the LICENSE file for details.
- Finnhub for accessible market data
- TradingView for embeddable market widgets
- shadcn/ui, Radix UI, Tailwind CSS, Next.js community
- Inngest for dependable background jobs and workflows
- Better Auth for simple and secure authentication
- All contributors who make open tools possible
— Built openly, for everyone, forever free. Open Dev Society.
© Open Dev Society. This project is licensed under AGPL-3.0; if you modify, redistribute, or deploy it (including as a web service), you must release your source code under the same license and credit the original authors.
Our Honourable Contributors
- ravixalgorithm - Developed the entire application from the ground up, including authentication, UI design, API and AI integration, and deployment.
- Priyanshuu00007 - Created the official OpenStock logo and contributed to the project’s visual identity.
- chinnsenn - Set up Docker configuration for the repository, ensuring a smooth development and deployment process.
- koevoet1221 - Resolved MongoDB Docker build issues, improving the project’s overall stability and reliability.
- ettoreciolli1 - updated Readme
Siray.ai — The robust AI infrastructure backing OpenStock. Siray.ai ensures our market insights never sleep.
Huge thanks to Adrian Hajdin (JavaScript Mastery) — his excellent Stock Market App tutorial was instrumental in building OpenStock for the open-source community under the Open Dev Society.
GitHub: adrianhajdin YouTube tutorial: Stock Market App Tutorial YouTube channel: JavaScript Mastery