Portfolio Dashboard
Read-only lookup of any address — balances, USD values, allocation. Read-only mainnet over wallet-connect: mirrors Zapper/DeBank, and forces the hard problem — arbitrary wallets full of unknown tokens.
- Server-side Alchemy + CoinGecko — keys never reach the browser
- Priced by contract address, never by symbol
- TTL cache + request dedup: repeat lookups in ~20ms
// GET /api/portfolio — abridged real response
{
"totalUsd": 17639669.42, // at lookup time
"priced": [ /* 17 holdings */ ],
"unpriced": [ /* 92 spam/dust */ ],
"truncated": true // honesty over a pretty number
}