Fix 429 rate limiting by making chain detection and data fetching
sequential with delays. Update waterfall viz to use bezier curves with
widths proportional to river width at entry/exit points.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add requireAuth() gate to all visualization pages. Unauthenticated users
are redirected to the home page with a login prompt and auto-redirect
back after signing in.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Users can now switch between Multi-Chain Flow, Balance River, and
Single-Chain Sankey views without returning to the homepage — wallet
address is preserved across navigation. Added d3.zoom() to Sankey
and multi-chain flow charts with pan, scroll-zoom, and reset controls.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add pooled() concurrency limiter (2 chains data, 3 chains detection)
- fetchJSON returns null on exhausted retries instead of throwing
- Backoff starts at 2s, doubles up to 32s, 5 retries
- fetchAllChainsData: failed chains skipped, partial data still renders
- fetchChainData: 300ms delay between requests within same chain
- Cache bust v4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Each chain has its own API server (different subdomain) so rate limits
are independent. Now fetches all chains in parallel while keeping
requests within each chain sequential. Removes unnecessary sleep()
delays between requests to the same server.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add ?v=2 cache busting to all JS script tags (old version was cached)
- Reduce nginx JS cache from 1y to 1h with must-revalidate
- fetchChainData now sequential (was 4 parallel requests per chain)
- Increase chain detection delay from 150ms to 300ms
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace hardcoded single-wallet static site with a dynamic platform
that can explore any Safe multi-sig wallet across 7 chains via live
Safe Global API data.
New files:
- js/safe-api.js: Browser-side Safe Transaction Service API client
- js/data-transform.js: API response to D3 visualization transforms
- js/router.js: URL-based state management and shared address bar
Modified:
- index.html: Rich homepage with wallet input, ELI5, viz cards, demo CTA
- wallet-visualization.html: Dynamic single-chain Sankey from live data
- wallet-timeline-visualization.html: Dynamic Balance River from live data
- wallet-multichain-visualization.html: Dynamic multi-chain flow from live data
- Dockerfile: Copy js/ directory alongside HTML files
- docker-compose.yml: Add rwallet.online domain to Traefik routing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>