gloticker · macro indicators Chrome extension
Period —
I built it because checking market indicators meant visiting 4–5 sites every time. I ran separate FastAPI collection and Spring Boot streaming servers on a home server.
300+ cumulative users across 7+ countries
- Live index quotes: Nasdaq, S&P 500, Dow Jones, Russell 2000, 20‑year Treasury, VIX, Fear and Greed Index
- Stock quotes: the Magnificent 7 (Apple, Nvidia, Microsoft, Amazon, Google, Meta, Tesla)
- Crypto quotes: Bitcoin, Ethereum, Solana, dominance
- Exchange rates: Dollar Index and the won against the dollar, euro, yuan and yen
- SSE live updates over a Redis message queue
- Market analysis with the ChatGPT API
- 30‑day daily candle charts
- Settings for hidden items, theme and language
Getting blocked while scraping
- Problem
- Frequent yfinance calls caused 429 errors, and some servers identified the client as a bot and returned 401 responses. I needed a call rate that kept prices fresh without getting blocked.
- Solution
- Forum reports suggested about one call per second, so I randomized call intervals between 1 and 1.2 seconds. Each call carried a valid random header so the scraper was not flagged as a bot. Values that change slowly, such as the Fear and Greed Index, dominance and exchange rates, update once a minute.
API requests piling up on every popup
- Problem
- Opening the extension popup called the per‑symbol price and change, chart, SSE subscription and analysis APIs at once. The home server needed protection from the resulting load.
- Solution
- Redis caches the latest data snapshot and sends it in one response, and the extension stores the latest data and its arrival time in local storage. One scraping round takes 23 seconds on average, so if the last update arrived within 20 seconds, the popup only subscribes to SSE. Charts use 30 days of daily candles, so they load once at market close, and Bucket4j limits each client to 6 requests per 10 seconds.
Architecture




