Architecture
How OpenStock works.
A transparent look at the event-driven, multi-provider system behind your market data and emails.
Market data
Two data modes, one cache.
Charts always stream from TradingView. Everything we price ourselves goes through a shared cache with timeouts, so a slow provider never stalls a page.
Cached
HourlyDefault for the public site. Quotes are fetched once an hour and shared by every user, so cost grows with symbols, not people.
Realtime
Every 15 secondsFor OpenStock Cloud and self-hosting. Set NEXT_PUBLIC_OPENSTOCK_DATA_MODE=realtime and on-screen prices refresh live and email price alerts turn on.
| Market | Charts | Our quotes and alerts |
|---|---|---|
| US stocks, crypto | Live | Yes |
| Forex | Live | No |
| Canada, Australia | Delayed | No |
| India (BSE), Germany | End of day | No |
AI
Emails that don’t go down with a provider.
Welcome emails and news summaries are written by Gemini 2.5 Flash-Lite. If it fails, the request is retried on MiniMax-M3, or any OpenAI-compatible provider you configure.
- 1A user signs up, or a cron fires
- 2Inngest runs the function
- 3Gemini writes the text
- 4MiniMax takes over if Gemini fails
- 5The email goes out
Background jobs
Four jobs keep things moving.
Welcome email
Weekly news
Price alerts
Re-engagement
Stack