Home » My Blog » How We Keep the Dashboard Up When the Market Moves

How We Keep the Dashboard Up When the Market Moves

In March 2026 Bitcoin moved 12 percent in under an hour and our price feed provider rate-limited us for eleven minutes. Users saw stale numbers. Some assumed the site was broken, and two of them emailed to ask if we’d been hacked. That incident set off three months of reliability work that changed how we build everything here. Here’s the short version.

Reliability work is invisible until the day it pays for itself. Our rule now: every component that touches a live price carries a fallback, a freshness indicator, or both. A number that can go stale has a timestamp next to it, always.

Stale data, honestly labeled

Detailed close-up of a blue bar graph showing data analysis on printed paper.
Photo by RDNE Stock project on Pexels

We’d rather show an old number with its timestamp than a wrong number without one. Every price on the dashboard carries the moment it was fetched, and any value older than 60 seconds gets a visual flag so you know exactly what you’re looking at. This sounds minor. It’s the single change that cut our support email the most, because users can judge for themselves whether the data is current instead of guessing.

We also cache the last good response from each provider. When the feed hiccups, the dashboard serves the cached value with its age attached. Uptime is the headline metric, but freshness is the one users actually feel.

Two providers, one price

one, two, three
Photo by Moritzfilms on Pixabay

A single data provider is a single point of failure wearing a suit. We run two independent market data feeds and reconcile them on every poll. When they disagree by more than 0.5 percent, we use the median of our last five readings and log the divergence. Last year we saw 14 real divergences, and 11 of them happened during exactly the kind of high-volatility window that sends traffic to our site.

The bill for the second provider is a rounding error next to the cost of eleven stale minutes.

Checks that run without us

snail without shell, nature, portiat, plants, insect, snail, snail on the plant, yellow snail without shell on it, snail without shell on it, snail without shell macro, macro snail without shell
Photo by Helpasoul on Pixabay

Synthetic checks hit the real user path every 30 seconds. They load the dashboard, fetch a price through the public endpoint, and compare it against a reference feed. If three consecutive checks fail, an alert fires to the on-call phone and we publish to our status page within five minutes, before support hears about it from users.

We write a short postmortem after every incident, and the two questions at the top are always the same: what did the monitoring miss, and what did users see. The March incident produced the timestamp badge. A July incident produced the cache layer. The documents are dull to write and impossible to argue with once they’re written.

What we tell ourselves on busy days

The market moving is when the dashboard matters most, and when it’s under the most strain. Traffic spikes with volatility, providers throttle at exactly the wrong moment, and every assumption made on a quiet Tuesday gets tested at once. That’s why the fallbacks exist before the quiet Tuesday ends.

If you want to see how we’re doing, the status page is public. It’s the same one we stare at during the wild days.