A live Bitcoin on-chain dashboard. Surfaces real-time market data, network health, security economics, and sentiment in a single page that auto-refreshes every 60 seconds.
Live: btcblockwatch.netlify.app
- Market — price, market cap, 24h volume, ATH (CoinGecko)
- Bitcoin vs. Gold — live gold spot price (via PAX Gold), gold market cap (~6.835B oz × price), the BTC price required for parity with gold's market cap, and the multiple of current price needed to get there
- Bitcoin vs. US Debt — the rolling pace at which the US adds another $1 trillion in debt (year-over-year), total US national debt (TreasuryDirect), the BTC price required to cover it, the multiple of current price, and the same figure per US household and per person
- Bitcoin vs. Money & Markets — US broad money (M2) and the combined market cap of all listed US companies (World Bank), each with a parity price, a multiple of the current price, and Bitcoin's current share of it
- Network — block height, mempool size, recommended fees, hash rate, difficulty adjustment ETA, mempool fee histogram (mempool.space), circulating supply (CoinGecko)
- Security & Issuance — 24h miner revenue, the share of it coming from fees rather than the block subsidy, next-halving countdown, daily issuance, mining-pool concentration, and satoshis per person alive
- On-Chain Activity — active addresses and confirmed transactions (CoinMetrics), plus Lightning Network capacity, channels, and nodes (mempool.space)
- Sentiment — Fear & Greed gauge with a 90-day rolling history (180-day option), a 30-day moving average and tinted sentiment bands, plus range average / low / high (alternative.me)
- History — daily price chart with 30d / 90d / 180d / 1y ranges, all sliced from one cached year of closes
- Sticky top bar — brand, section navigation with scroll-spy, a live BTC/USD ticker, the source-status chip, and a Refresh button whose ring fills as the next 60-second pull approaches.
Rrefreshes from the keyboard. - Hero — the price as a hero figure with 24h change, the "vs. 30 days ago" chip and distance from the all-time high, a 30-day sparkline, and four KPI tiles (block height, next-block fee, Fear & Greed, next halving) that link to their sections.
- Sections — each has a one-line description and an "About" link into the matching part of
info.html. The three "Bitcoin vs." comparisons sit together under Macro. - Meters — difficulty-epoch progress, halving-epoch progress and supply mined, drawn as bars rather than bare percentages.
- Loading states — values shimmer until their source reports, then briefly glow when a live number changes. The tab title carries the current price.
- Data & history — the journal's export / import / rebuild controls live in a collapsible panel above the footer.
All data sources are keyless and CORS-friendly — no backend, no API keys, pure client-side JavaScript. See info.html for plain-English explanations of every metric on the dashboard.
That constraint shapes what's here. FRED would give fresher, monthly M2 figures, but it serves no CORS header and so can't be read from a browser without a backend proxy. The World Bank's annual series is the keyless alternative, which is why the money and equity denominators step once a year rather than daily.
The macro cards carry a "vs. 30 days" chip, because a single instantaneous number can't tell you whether Bitcoin is gaining or losing ground against gold or the national debt.
That history lives in localStorage, on your device, and is never transmitted anywhere — a server-side history would have meant collecting data about you, which would undercut the point of a backend-free dashboard. Use Export history for a JSON copy and Import to restore it or move it between machines.
On first load the page reconstructs roughly a year of history from public archives (CoinGecko daily prices and market caps, PAX Gold, TreasuryDirect), so the deltas work immediately rather than after a month of visits. Metrics with no public daily archive — fee share, Lightning capacity, active addresses — accumulate from first load onward.
There's no build step and nothing to install. Open index.html directly in a browser, or serve the folder:
python3 -m http.server 8000Note that localStorage is unavailable on file:// origins in some browsers, so the history feature needs the page served over HTTP to work.
Chart.js is the only third-party dependency, loaded from a CDN at runtime. Everything else is hand-written HTML, CSS, and JavaScript in two files. Deployed as a static site on Netlify.
The interface follows the Observation Deck design language — a dark "mission control" theme shared across the wider project family.
CoinGecko's free tier is shared per network address and rate-limits after very few requests. Worse, the throttled response carries no CORS headers, so a browser reports an opaque network failure rather than a clean 429.
The dashboard is built to degrade rather than break:
- Sources are independent. Each feed renders whatever it can on its own. A CoinGecko outage no longer blanks the debt, gold, or money sections — the raw denominators still appear, and only the Bitcoin-derived comparisons wait.
- The price has a fallback. If CoinGecko is unavailable, the headline price comes from mempool.space and the card says so. Circulating supply is computed from the block height — it's just the sum of every block subsidy paid so far, accurate to ~0.01% — so the parity and multiple cards keep working even on a first visit with nothing cached.
- Status is honest. Amber "N of 9 sources degraded" when some feeds are down but the page is still useful; red only when there's nothing to show.
- Fewer calls. One year of daily prices is fetched once an hour and shared by the chart, the hero sparkline and the history backfill; the Fear & Greed series is likewise cached for an hour and the gold quote for ten minutes. Auto-refresh pauses while the tab is hidden.