- 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>
- Chain buttons now serve as both selector and color legend (dot + name)
- Removed redundant color-bar and logo circle, replaced with simple dot
- Moved spam warning below transfer tables, made it subtle
- Added "tx" suffix to transfer counts for clarity
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add passkey sign-in to the static wallet explorer:
- Add js/encryptid.js with WebAuthn registration/authentication
- Add auth button to hero section of index.html
- Persists auth state in localStorage
- No backend required — all client-side
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>
- fetchJSON retries up to 4 times with exponential backoff on 429
- detectSafeChains checks chains sequentially with 150ms delay
- fetchAllChainsData fetches chains sequentially with 200ms delay
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>