fx-dashboard-widgetslisted
Install: claude install-skill nusantara-ventures/exchangerate-skills
# FX dashboard widgets
Rate displays fail in two ways: they hammer the API from every open browser tab, or they show "live" on a Saturday. Both are architecture bugs, not styling bugs. This skill is the pattern for building a currency ticker, card, table, chart, or converter that's fast, quota-safe, and honest about freshness. Examples use exchangerate.dev (keyless, `https://api.exchangerate.dev`).
## 1. One poller, many clients — never per-browser API calls
A dashboard with 50 open tabs must not make 50 API calls. Poll once, server-side, cache the result, and serve every client from the cache:
```
[exchangerate.dev] <--poll-- [your server, 1 poller] --serves--> [N browser clients]
```
Why this matters beyond politeness: keyless calls are **12 req/min per IP**. One poller comfortably fits inside that; N independent browser tabs polling directly will collide on the same IP bucket and start 429ing each other in production.
Live currencies reprice roughly every **60 seconds** on trading days (which currencies are live can change — read the per-currency `sources` map rather than assuming) — polling faster than 60s buys you nothing, you're just re-fetching the same `data_updated_at`. A sane poll interval is 30-60s during `market_session: open`, checked against the rate-limit headers on every response:
```
x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-reset
```
If `x-ratelimit-remaining` hits 0, or you get a 429, back off until `x-ratelimit-reset` (unix seconds) — d