Demo
This section is designed to show output first, then explain.
CSCO : current price (live)
-
Connecting…
Ticker
CSCO
Day high
-
Day low
-
Previous close
-
What it solves
Clear outcomes, no marketing language.
- Fetches consistent market data on a schedule with zero manual effort.
- Stores results so you can compare days and audit changes.
- Publishes outputs in formats that other tools can reuse.
How it works
A simple pipeline, intentionally boring.
Snapshot script
CLI command fetches the last trading day's high/low from yfinance.
JSON file
Atomic write to a static JSON artifact with ticker, date, high, and low.
Live API
Flask service on Hetzner serves real-time quotes with a 15-second cache.
Frontend
Polls the API every 10 seconds; falls back to static JSON if offline.
Decisions
The tradeoffs that make this maintainable.
Live API with static fallback
The page polls a Flask API for real-time prices but degrades gracefully to pre-generated JSON when the API is unreachable.
yfinance, no API key
yfinance is free and keyless. A 15-second in-memory cache avoids rate limits while keeping data fresh enough for a portfolio demo.
JSON everywhere
Both the static snapshot and live API return JSON, so any tool can consume the data without scraping HTML.
Next steps
Planned improvements, kept realistic.
- Add watchlists with multiple tickers and a combined dashboard page.
- Alert rules (email or webhook) for unusual moves.
- Basic tests for date handling and data integrity.