Live single-page dashboard for Bitcoin held after Coldcard seed-entropy sweeps since July 2026.
Monitors consolidation vaults across named clusters (Galaxy Waves 1–3 plus later community waves). Core vaults (Waves 1–2 and small community holdings) are polled live in the browser via the public mempool.space API. Wave 3 balances come from public/snapshot.json, refreshed by a GitHub Actions cron about every 15 minutes — so visitors do not fan out dozens of explorer requests.
npm install
npm run devOpen the URL Vite prints (usually http://localhost:5173).
npm testRuns the Vitest unit suite (formatters, outbound/hop logic, incident data invariants).
npm run build
npm run previewdist/ is a static site — deploy to Vercel, Netlify, Cloudflare Pages, or any static host.
| Data | Source |
|---|---|
| Core balances & txs (live) | mempool /api/address/{addr} |
| Wave 3 balances | /snapshot.json (cron) |
| BTC/USD | /api/v1/prices (+ snapshot) |
| Incident facts | Galaxy Research + community cluster reports (static) |
No API key is needed for the dashboard. Core vaults refresh about every 60 seconds; the Wave 3 snapshot is re-read about every 5 minutes.
Optional local research: put BLOCKCHAIR_API_KEY in a gitignored .env for faster tip wave scouts (scripts/scan-new-waves.py --blockchair) and batch balance checks (scripts/blockchair-balances.py). Estimate request points and confirm before spending quota; do not use that key in the snapshot cron.
npm run snapshotWrites public/snapshot.json (all watched holdings + movements for vaults that look spent). On main, .github/workflows/snapshot.yml runs this on a schedule and commits the file so static hosts redeploy with fresh Wave 3 numbers. Esplora-only by design.
python3 scripts/scan-new-waves.py --no-escalate --blockchair # needs .env key
python3 scripts/scan-new-waves.py --no-escalate # Esplora fallbackScouts the last 3 tip blocks for Coldcard-like 1-vout fee clusters. See .cursor/skills/new-wave-scan/SKILL.md.
Use the Alerts toggle in the header for browser notifications when a new
outbound spend appears (holdings or followed hops). Preference is stored in
localStorage; the tab must stay open for polling to continue.
Some networks, VPNs, and DNS filters block mempool.space, which makes every
request fail in the browser. The app probes hosts in order and reuses the first
one that answers:
mempool.spacemempool.emzy.demempool.bitaroo.net
The footer shows which host served the current data. Edit MEMPOOL_HOSTS in
src/data/incident.ts to add your own instance.
When a holding address spends reported consolidation, the tracker follows the largest destinations (up to hop 2, ignoring dust under 0.01 BTC) and lists those outbound spends in the movement feed. Still-held % stays based on the watched holding addresses only.
If a vault later receives extra coins and forwards them while still holding its reported balance, that pass-through is ignored — it is not treated as the stolen stack moving.
Not affiliated with Coinkite or Coldcard. For public blockchain monitoring only.