NOVAFX Group is a foreign exchange and global payments business. It helps individuals and companies send money abroad at better exchange rates than traditional banks, with little or no transfer fees.
I led the development of the NOVAFX website as a full-stack developer, from the rate engine and currency tools to the content management system and deployment.

Background
NOVAFX wanted to grow customer engagement online. Its customers care about one thing above all: the rate they get. So the website had to do more than describe the service. It needed to:
- show real-time exchange rates that customers can trust;
- give them currency tools to check what a transfer would cost before they commit;
- turn that interest into business, so that customers register and exchange currency with NOVAFX at the rate they were shown.
The Challenge
Live rates come from the Currency Layer API, and the site has five to six dynamic currency tools, such as the currency converter and the rate alert. Each tool needs exchange rates for any pair of currencies the visitor picks.
That created two problems:
- API cost. Currency Layer is billed by the number of requests. If every tool called the API every time a visitor changed a currency or an amount, the request count, and the bill, would grow with traffic.
- Consistent numbers. Each tool calculates its result differently: a straight conversion, a reverse calculation, a target-rate comparison for alerts, and so on. Every tool still had to show the same rate for the same pair at the same moment, or customers would lose trust in the numbers.
The goal was to keep every tool fully dynamic while making as few API requests as possible.
The Solution
One rate source for every tool
Instead of letting each tool talk to Currency Layer, I built a single rate layer on the Node.js backend. It fetches the latest rates on a schedule and stores them in Redis, so every page and tool reads rates from the cache rather than from the paid API.

Cross-rate calculation
Currency Layer quotes every currency against a single base currency (USD). With 140 currencies there are thousands of possible pairs, so asking the API for each pair separately was never an option.
Instead, the backend works out any pair from the two USD quotes it already has. For example, with illustrative rates:
| Pair | Rate | Source |
|---|---|---|
| USD → CAD | 1.25 | Currency Layer API |
| USD → GBP | 0.75 | Currency Layer API |
| CAD → GBP | 0.60 | Calculated: 0.75 ÷ 1.25 |
So one request returns every rate the site needs. Each tool then applies its own logic (a straight conversion, a reverse conversion or an alert threshold) to the same cached rates, which keeps every tool in agreement.
Bank rate comparison
One of the tools compares what a customer would receive with NOVAFX against a traditional bank, Amazon and Shopify for the same amount: the exchange rate, the costs and the final amount received, with a chart and the difference highlighted. It is built on the same cached rates, so the comparison costs no extra API requests.

Rate alerts
The "Waiting on a better rate?" tool lets a customer pick a currency pair and a target rate and leave their name and email. Alerts are saved in MySQL and checked against the cached rates, so watching alerts doesn't add any API requests.

Content and deployment
- The frontend is built with Next.js, so pages load fast and are easy for search engines to index.
- Strapi acts as a headless CMS, so the NOVAFX team can update site content, such as the currency news section, without a developer.
- The services run in Docker, which keeps development and production environments the same.

Results
- 100+ customers registered with NOVAFX through the platform.
- Customers can see live rates and send money in 140 currencies.
- Every currency tool stays fully dynamic, while the shared cache and cross-rate calculation keep Currency Layer API usage, and its cost, to a minimum.
- The platform was delivered in about three months (June to August 2021).