Every row is both source and target.
A converter for the currencies you actually carry. Type into any one of them and the rest answer at once — no source field, no target field, no swap button — and it keeps working with the phone in airplane mode.
Any search engine converts currency — one pair at a time, and only while you have a connection. Standing in front of a price tag, what you want is:
- Every currency you keep, at once. One amount typed, every answer at the same time, instead of a separate question per pair
- No connection required. The rates are already on the device before you open it
- The number you typed still on screen, so you can check you typed it right
So the rates live on the device and every row is both source and target. Everything else follows from that.
- Any row drives the rest — tap a currency, type, and the others follow. The row you are driving stays marked, so it is always clear which number is yours and which are derived
- Nothing moves under your thumb — the field you are typing in shows exactly what you typed. Grouping arrives when you leave it, and a comma works as well as a period
- 161 currencies, each with its own name and its own decimals — the yen has no cents, the Kuwaiti dinar has three
- A calculator that hands the result back — work out a bill and drop the total into any row, instead of leaving for another app and losing the conversion on the way
- Copy an amount with one tap, clean enough to paste anywhere
- Reorder and remove behind an edit mode, with buttons rather than gestures
- English and Spanish, light and dark, both remembered
Rates are kept on the device, so the app opens with the numbers already on screen and converts with no connection at all. It shows how old they are rather than pretending they are live.
New rates are published once a day. The app collects them on the first open after that, and spends nothing on the network for the rest of the day — about 4 KB, once, for every currency in the list.
By ExchangeRate-API, whose open endpoint needs no account and no key, and whose terms allow keeping a copy on the device for exactly this.
React 19 · Vite 8 · Tailwind 4 · vite-plugin-pwa (Workbox)
No backend, no API key, no account, no analytics, no tracking, and no web fonts. About 68 KB, once.
npm install
npm run dev # localhost:5173/currency/
npm run dev -- --host # reachable from a phone on the same network
npm run build # -> dist/Pushing to main runs .github/workflows/deploy.yml,
which builds and publishes to GitHub Pages.
One setting is required and cannot be committed: Settings → Pages → Source → GitHub Actions. Left on the default branch source, the build never runs.
MIT © Miguel Cabañas