Stale data & provider outages
Free data sources go down; that’s the deal. SleeveFolio’s response is layered: fall back, then disclose.
Fallback first
Each data need has a provider chain: price history (“bars”) tries Tiingo, then falls back to Alpaca IEX. A single provider outage usually costs nothing but a short delay, and once a day’s prices are fetched they’re stored and reused, so recent history stays on hand even while a source is down.
The freshness chip
Data-driven pages pin a freshness chip to their header, color-blind safe (a colored dot paired with its label, never color alone). Pages that read live from your broker — your positions — read real-time: they load fresh or show a clear error, never silently aged numbers. Pages built on stored data show how old that data is instead: the dashboard’s equity curve (from your daily balance snapshots) and your signals (from the latest run) read fresh when current, turn amber as they age, and go stale if they fall too far behind — for example if a scheduled update stops running. So an aging chart or an old signal set is always visible on the chip, never dressed up as live.
When a whole chain is down
When an entire chain is down (every fallback exhausted) a banner appears above your data reading Live data is unavailable, names the affected chain (for example Market history), and offers a Retry button. Your most recent cached values still load and order paths stay open. A single provider failing while its fallback still serves shows nothing: the banner appears only when no provider in a chain can serve.
What keeps working
Everything that doesn’t need fresh external data: your positions and orders (as long as the broker connection itself is up), the audit log, settings, the kill switch. Signal runs handle outages symbol by symbol: a symbol whose data can’t be fetched is excluded from that run rather than ranked on stale numbers.
What to do
Usually: wait. Chains recover on their own. If the staleness coincides with broker trouble, see Broker connection errors; if you’re live and uneasy, Pause costs nothing.