← ClaudeAtlas

fx-dashboard-widgetslisted

Build live currency/FX rate displays — a rate ticker, dashboard card, rate table, sparkline/chart, currency converter widget, Slack/CLI rate bot, or watch-a-pair alert. Use whenever the user wants to show exchange rates in a UI, even something as simple as "show the EUR/USD rate on my dashboard" — this skill covers the poller architecture, session-aware refresh, and truthful "as of" labeling so the widget doesn't burn API quota or lie about freshness. Powered by exchangerate.dev (keyless base https://api.exchangerate.dev).
nusantara-ventures/exchangerate-skills · ★ 0 · AI & Automation · score 70
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