Track historical Visa, Mastercard, and ECB exchange rates with real markup data.
When you use your credit card abroad, Visa and Mastercard apply their own exchange rates, often with hidden markups over the interbank rate. ForexRadar shows you exactly what those rates are, how they compare to the ECB reference rate, and how they've changed over time.
- Compare Visa, Mastercard, and ECB rates side-by-side on interactive charts
- View up to 365+ days of historical data for archived currency pairs
- See Visa's actual markup percentage over ECB mid-market rates
- Offline-first with local caching for fast repeat visits
- Share specific currency pairs via URL
- Dark and light themes
Exchange rates are fetched twice daily (at 17:00 and 23:00 UTC) and stored as CSV files. The frontend loads data progressively: first from local cache, then from the server archive, and finally from live APIs for the most recent rates.
- Bun >= 1.3.5
git clone https://github.com/avishj/ForexRadar.git
cd ForexRadar
bun installFetch the latest exchange rates:
bun run dailyThen open index.html in your browser.
To populate historical data for all currency pairs:
bun run backfill # Visa and Mastercard
bun run ecb-backfill # ECB rates| Command | Description |
|---|---|
bun run daily |
Fetch latest rates |
bun run backfill |
Populate historical data |
bun run validate |
Validate CSV data integrity |
bun run check |
TypeScript type checking |
bun run lint |
Run ESLint |
bun run test |
Run smoke tests |
bun run test:unit |
Run unit tests |
bun run test:e2e |
Run end-to-end tests |
bun run test:all |
Run all tests |
ForexRadar/
├── backend/ # Data fetching scripts
├── js/ # Frontend modules
├── shared/ # Shared utilities
├── tests/ # Test suites
├── db/ # CSV data storage
└── css/ # Stylesheets
- Visa - Card network exchange rates with markup percentages
- Mastercard - Card network exchange rates
- ECB - European Central Bank daily reference rates
- Fork the repository
- Create a feature branch (
git checkout -b feat/amazing-feature) - Make your changes
- Run
bun run check && bun run lint && bun run test:allto verify - Commit with a conventional commit message (
feat: add amazing feature) - Push and open a Pull Request