02 / Data products · R / Shiny

Exchange UniverseCompare exchange rates.

Compare currencies over time, convert an amount and select currencies on a world map. The R/Shiny app reuses saved rates and requests missing data from APILayer.

Working app. Public source.
Interactive explanation.

Source & documentation ↗

Inside the project

How a currency choice becomes a chart.

The map shows the software parts.
The animation shows when saved data or a new request is used.

How the app gets its data

Full-size map ↗

Select a box to read its role, then use the button to watch the relevant example.

Watch saved rates and requests

Full-size guide ↗

Compare currencies, request newer rates or see what happens when the provider asks the app to wait.Repeats automatically while in view. Pause to hold a moment.

These examples send no API requests and show no live provider activity. Open either view full-size to explore it in more detail.

The actual product

Explore, convert, inspect.

Try the live app ↗
Published dashboard with the How it works button, current quote cards, comparison chart and currency atlas
Published dashboard captured on 14 October 2026. Rates and dates are a snapshot, not current market values.

The work behind the interface

What I changed and why.

The problem

The original dashboard presented rates without enough geographic context. Long layouts made it harder to compare charts, find controls and inspect detailed values.

What I rebuilt

I reorganised the app into Explore, Convert and Data views, connected a Leaflet atlas to currency selection, and refined the interface for desktop and mobile. API integration and data preparation remain in R/Shiny.

Connected interactions

Select a supported country to add or remove its currency from a comparison of up to six. Charts, map colours and exact-value tables follow the selection. Conversion, CSV export, optional 3D plots and fullscreen views offer different ways to inspect it.

Reliability decisions

Shared caches, bounded request queues, deduplication and retry backoff reduce unnecessary provider calls. Focused offline checks cover quota controls and date validation; they are not a complete security audit.

More product views: conversion and mobile
Light-theme amount converter with quote direction and timestamp
Convert · 7 October local review.
Phone dashboard with settings access, comparison charts and map
Mobile · 7 October local review.

Data coverage and limits.

Historical observations are daily, not hourly. Quotes are indicative and exclude fees and buy/sell spreads. Coverage and freshness depend on the API plan. Shinyapps.io local storage is not a durable shared archive.

The map is a reviewed overview of a pinned source revision, not an automatically updated dependency graph or live telemetry. The animated guide is a simplified teaching example. Neither contacts the rate provider.

My focus: R/Shiny development, interface design, API integration, quota-aware caching and making those decisions easier to inspect.