// the find
Open-Dev-Society/OpenStock
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.
OpenStock is a Next.js App Router stock-watchlist app built on top of a paid YouTube tutorial — TradingView widgets for charts, Finnhub for quotes, MongoDB/Better Auth for accounts, and Inngest for scheduled emails. It's for developers who want a self-hostable watchlist/alerts app or a reference for wiring together real third-party integrations in a full-stack Next.js project, not for anyone looking for a novel architecture.
Inngest is used for actual work, not a demo: an event-driven welcome email on signup and a Monday cron job for weekly summaries, both durable/retryable instead of fire-and-forget. The AI provider layer (lib/ai-provider.ts) supports Gemini/MiniMax/Siray with an explicit fallback path so a missing or rate-limited key doesn't break onboarding email generation. Route groups cleanly separate auth/marketing/app concerns, and server actions are split by domain (finnhub, watchlist, alert, profile) instead of dumped in one file. It has a real vitest suite covering AI provider fallback, alert actions, and market-clock logic — unusual for a repo this README-heavy.
The "real-time" pitch is soft: free-tier Finnhub delays non-US quotes by 15+ minutes, and actual real-time refresh plus price alerts are gated behind the still-unshipped paid "OpenStock Cloud" tier, so the open-source version isn't real-time. MongoDB/Mongoose backs watchlists and alerts, which are inherently relational (per-user-per-symbol uniqueness, multi-document consistency) and end up enforced in application code instead of the database. The project structure and feature set closely track the tutorial it's credited from rather than an independently designed architecture. Test coverage is a handful of unit tests for utils and actions — nothing exercises the Inngest workflows, Better Auth flows, or the stock detail page end-to-end.