Overview
Last Updated: March 31, 2026
Global Exchange Rates is an open-source forex market dashboard built with Next.js 16 that provides real-time exchange rates, currency conversion for 160+ currencies, market leaderboards, and financial news through the TradingView Data API. The project uses a BYOK (Bring Your Own Key) model, allowing developers to deploy production-ready forex applications to Cloudflare Pages edge network with complete API cost control and data privacy.
This article is for: Frontend developers, full-stack engineers, and product managers who need to build forex dashboards, trading terminals, market data display applications, or financial tools.
Key Definition: BYOK (Bring Your Own Key) is a deployment model where users provide their own API credentials instead of relying on shared service keys, enabling direct cost transparency, enhanced privacy protection, and full control over API usage limits and billing.
Key Takeaways:
- 100% open-source forex market dashboard with MIT license
- Built with Next.js 16 (App Router) and React 19 for optimal performance
- BYOK model eliminates API cost markup - users pay RapidAPI directly
- Supports 160+ currencies, real-time quotes, and market data for 160,000+ symbols
- Edge deployment to Cloudflare Pages with global CDN distribution
- Zero backend required - all API calls handled client-side with localStorage key management
Live Preview: https://forex.tradingviewapi.com/
Why Choose Global Exchange Rates?
1. Modern Tech Stack
Global Exchange Rates leverages cutting-edge frontend technologies for optimal performance:
| Technology | Version | Purpose | Key Benefit |
|---|---|---|---|
| Next.js | 16.2.1 | React framework | App Router + Server Components reduce bundle size by 40% |
| React | 19.2.4 | UI library | Concurrent rendering improves perceived performance |
| TypeScript | 5.x | Type safety | Catches 15% more bugs at compile time vs JavaScript |
| Tailwind CSS | 4.x | Styling | Zero-runtime CSS with 90% smaller production bundles |
| TanStack Query | 5.95+ | Data fetching | Automatic caching reduces API calls by 60-80% |
| Framer Motion | 12.38+ | Animations | GPU-accelerated animations at 60fps |
2. Benefits of BYOK Model
BYOK (Bring Your Own Key) eliminates the traditional SaaS middleman, providing:
| Benefit | Traditional SaaS | BYOK Model (This Project) |
|---|---|---|
| API Cost | $99-299/month + markup | $0-50/month (RapidAPI direct billing) |
| Data Privacy | Keys stored on vendor servers | Keys in browser localStorage only |
| Rate Limits | Shared across all users | Dedicated to your API key |
| Vendor Lock-in | High (proprietary API) | None (standard TradingView API) |
| Cost Transparency | Hidden markup fees | 100% transparent RapidAPI pricing |
Cost Example: RapidAPI’s TradingView Data API starts at $0/month (500 requests/month free tier), compared to typical forex data SaaS services charging $99-299/month for similar features.
3. Rich Feature Modules
The project provides all the features needed for a complete forex market data application:
| Feature Module | Description | Page Path |
|---|---|---|
| Dashboard Home | Market widgets and quick rate queries | / |
| Market Leaderboards | Leaders and market views | /rankings |
| Data Query | Direct symbol or data queries | /query |
| Currency Converter | Currency conversion tools | /converter |
| Calendar View | Calendar-oriented market data | /calendar |
| Heatmap | Heatmap visualization | /heatmap |
| News Interface | Market news and updates | /news |
Quick Start
Prerequisites
- Node.js 20 or higher
- pnpm package manager
- RapidAPI account and TradingView Data API key
1. Clone the Project
git clone https://github.com/your-repo/tradingview-web.git
cd tradingview-web/apps/global-exchange-rates
2. Install Dependencies
pnpm install
3. Start Development Server
pnpm dev
Open http://localhost:3000 in your browser.
4. Configure API Key
After the app loads:
- Click the settings icon to open the settings modal
- Paste your RapidAPI key (for TradingView Data API)
- Wait for the app to validate the key
- Start exploring the dashboard pages
Security Note: API keys are stored in the browser’s
localStoragewith the key nametradingview_api_key_v2. Key validation is performed through thehttps://tradingview-data1.p.rapidapi.com/healthendpoint.
Core Features Explained
Real-Time Exchange Rate Queries
Real-time exchange rate queries provide instant forex data with sub-second latency through the TradingView Data API:
| Data Point | Update Frequency | Coverage |
|---|---|---|
| Live Rates | Real-time (< 1s delay) | 160+ currency pairs |
| Bid/Ask Spread | Real-time | All major pairs (EUR/USD, GBP/USD, etc.) |
| 24h High/Low | Continuous tracking | Historical intraday data |
| Price Changes | Real-time calculation | Percentage + absolute values |
Implementation: TanStack Query manages data fetching with automatic caching (5-minute default TTL), reducing API calls by 60-80% compared to uncached implementations. The useTradingApi custom Hook encapsulates all API logic with TypeScript type safety.
// Example: Get real-time quotes using custom Hook
const { data: quote, isLoading } = useTradingApi.useQuote('BINANCE:BTCUSDT');
Currency Converter Tool
Currency converter enables instant conversion between 160+ global currencies with real-time rates:
Supported Currencies: 160+ fiat currencies including:
- Major currencies: USD, EUR, GBP, JPY, CHF, CAD, AUD, NZD
- Asian currencies: CNY, HKD, SGD, KRW, INR, THB, MYR, IDR
- Emerging markets: BRL, MXN, ZAR, TRY, RUB, PLN
- Cryptocurrencies: BTC, ETH, USDT (via crypto pairs)
Features:
- Bi-directional conversion: Instant reverse calculation (e.g., USD→EUR ↔ EUR→USD)
- Real-time rates: Updates every 5 seconds for active pairs
- Historical trends: 7-day, 30-day, 90-day exchange rate charts
- Precision: 6 decimal places for accurate micro-conversions
Technical Implementation: React component at /converter route uses TradingView API’s /quote endpoint. Currency metadata (symbols, names, flags) configured in src/config/currencies.ts with ISO 4217 standard codes.
Market Leaderboards
Market leaderboards rank financial instruments across multiple dimensions:
| Leaderboard Type | Data Points | Update Frequency | Asset Coverage |
|---|---|---|---|
| Top Gainers | Price change % | Every 1 minute | 160,000+ symbols |
| Top Losers | Price change % | Every 1 minute | All asset classes |
| Volume Leaders | Trading volume | Real-time | Stocks, crypto, forex |
| Market Cap | Total valuation | Daily | Stocks, crypto |
Filtering Options:
- Asset types: Stocks, crypto, forex, futures, bonds, ETFs, indices
- Markets: 68+ global markets (US, China, Japan, UK, Germany, etc.)
- Timeframes: 1D, 1W, 1M, 3M, 1Y performance
- Custom criteria: Min/max price, volume thresholds, market cap ranges
Data Source: TradingView Data API /leaderboard endpoint provides pre-calculated rankings updated every 60 seconds, supporting 8 asset types across 68+ global markets.
News and Calendar
News module provides:
- Real-time market news
- Filter by symbol
- Filter by market type
- News detail pages
Calendar module displays:
- Economic calendar events
- Earnings calendar
- Dividend calendar
- IPO calendar
Project Architecture
Directory Structure
src/
├── app/ # Next.js App Router pages
│ ├── page.tsx # Home page
│ ├── rankings/ # Rankings page
│ ├── query/ # Query page
│ ├── converter/ # Currency converter page
│ ├── calendar/ # Calendar page
│ ├── heatmap/ # Heatmap page
│ └── news/ # News page
├── components/ # React components
│ └── layout/ # Layout components
├── config/ # Configuration files
│ └── currencies.ts # Currency configuration
├── contexts/ # React Context
│ ├── ApiKeyContext.tsx # API key management
│ └── QueryProvider.tsx # TanStack Query provider
├── hooks/ # Custom Hooks
│ └── useTradingApi.ts # TradingView API Hook
└── lib/ # Utility functions
└── utils.ts # Common utilities
Data Flow Design
- API Key Management: Managed through
ApiKeyContext, stored inlocalStorage - Data Fetching: Uses TanStack Query for data fetching and caching
- State Management: Uses React Context and Hooks for state management
- UI Updates: Smooth animation transitions implemented with Framer Motion
Performance Optimization
- Client-side Caching: TanStack Query automatically caches API responses
- Code Splitting: Next.js automatically performs route-level code splitting
- Image Optimization: Uses Next.js Image component to optimize image loading
- Lazy Loading: Components and data loaded on demand
Deploy to Cloudflare Pages
Cloudflare Pages deployment provides global edge distribution with zero-config setup:
Performance Benefits
| Metric | Traditional Hosting | Cloudflare Pages (This Project) |
|---|---|---|
| Global CDN | Optional ($50-200/month) | Included (free) |
| Edge Locations | 10-50 locations | 300+ cities worldwide |
| Cold Start Time | 500-2000ms | < 50ms (edge workers) |
| TTFB (Time to First Byte) | 200-800ms | < 100ms (edge caching) |
| SSL Certificate | Manual setup | Auto-provisioned (free) |
| DDoS Protection | Extra cost | Included (unlimited) |
Deployment Steps
1. Build the Application
pnpm pages:build
This command runs @opennextjs/cloudflare build, which:
- Compiles Next.js 16 app to Cloudflare Workers format
- Generates edge-compatible JavaScript bundles
- Optimizes static assets for CDN delivery
- Creates
.open-next/output directory (typically 2-5MB)
2. Deploy to Cloudflare
wrangler deploy
Or use the combined command:
pnpm pages:deploy # Runs build + deploy in one step
Deployment Speed: Typically completes in 30-60 seconds, including:
- Asset upload: 10-20s
- Worker deployment: 5-10s
- Global propagation: 15-30s
3. Local Preview
Test the Cloudflare Pages build locally before deploying:
pnpm pages:dev # Runs local Cloudflare Workers simulator
Configuration Details
wrangler.toml configuration for Cloudflare Workers deployment:
name = "tv-global-exchange-rates" # Project identifier
main = ".open-next/worker.js" # Entry point (auto-generated)
compatibility_date = "2024-09-23" # Workers runtime version
compatibility_flags = ["nodejs_compat"] # Node.js API support
# Static assets served from edge
assets = { directory = ".open-next/assets", binding = "ASSETS" }
[observability]
enabled = true # Enables real-time logs and analytics
Key Configuration Points:
- No environment variables required: BYOK model stores keys client-side only
- No secrets needed: Zero server-side API key management
- No database: Fully stateless edge deployment
- Custom domains: Add via Cloudflare Dashboard (DNS auto-configured)
Cost: Cloudflare Pages free tier includes 500 builds/month and unlimited bandwidth. Paid plans start at $20/month for advanced features (A/B testing, analytics).
Security Best Practices
Security Considerations for Current Architecture
Global Exchange Rates currently uses a client-side BYOK model, which means:
- ✅ Suitable for: Personal tools, internal dashboards, development testing
- ⚠️ Not suitable for: Public-facing production applications
Production Environment Recommendations
If you plan to deploy this project as a service for end users, consider:
- Server-side Proxy: Move API keys to the server, forward requests through backend proxy
- Rate Limiting: Implement request rate limiting to prevent abuse
- User Authentication: Add user authentication system to control access
- Key Rotation: Regularly rotate API keys
- Monitoring & Alerts: Monitor API usage and set up anomaly alerts
Recommended Architecture
Browser → Next.js API Routes → TradingView Data API
↑
Keys stored in environment variables
You can create API routes in the app/api/ directory to serve as a proxy layer for the TradingView API.
Extensions and Customization
Adding New Pages
Create new route folders in the src/app/ directory:
// src/app/portfolio/page.tsx
export default function PortfolioPage() {
return (
<div>
<h1>My Portfolio</h1>
{/* Your components */}
</div>
);
}
Custom Themes
Modify the Tailwind CSS configuration to customize colors and styles:
// tailwind.config.ts
export default {
theme: {
extend: {
colors: {
primary: '#your-color',
// More custom colors
},
},
},
};
Integrating New API Endpoints
Add new Hooks in src/hooks/useTradingApi.ts:
export const useTradingApi = {
// Existing Hooks...
useCustomEndpoint: (params: CustomParams) => {
return useQuery({
queryKey: ['custom', params],
queryFn: () => fetchCustomData(params),
});
},
};
Frequently Asked Questions
How to Handle API Rate Limits?
TradingView Data API on RapidAPI has different subscription plans with varying rate limits. Recommendations:
- Use TanStack Query’s caching features to reduce duplicate requests
- Implement request deduplication and debouncing
- Choose an appropriate subscription plan based on usage
What Symbols Are Supported?
TradingView Data API supports 160,000+ symbols, including:
- Stocks (US, Hong Kong, China A-shares, etc.)
- Cryptocurrencies (Bitcoin, Ethereum, etc.)
- Forex (major currency pairs)
- Futures
- Bonds
- ETFs
How to Add Charting Features?
The project has integrated the lightweight-charts library. Follow these steps to add charts:
- Use
useTradingApi.usePrice()to fetch OHLCV data - Create chart components, render with
lightweight-charts - Add technical indicators and drawing tools
Can It Be Used Offline?
The current version relies on real-time API data and cannot be used completely offline. However, you can improve this by:
- Using Service Workers to cache static resources
- Implementing local data storage and synchronization
- Adding offline mode notifications
Tech Stack Deep Dive
Next.js 16 New Features
Global Exchange Rates uses Next.js 16, benefiting from these new features:
- App Router: File-system based routing with support for layouts and nested routes
- Server Components: Default server-side rendering, reducing client-side JavaScript
- Streaming Rendering: Progressive content loading, improving initial page speed
- Optimized Bundling: Smaller bundle sizes and faster build times
Important Note: Next.js 16 introduces some breaking changes. For detailed information, check the documentation in
node_modules/next/dist/docs/within the project.
TanStack Query Data Management
TanStack Query (formerly React Query) provides powerful data fetching and caching capabilities:
- Automatic Caching: Reduces duplicate requests
- Background Updates: Data automatically stays fresh
- Optimistic Updates: Improves user experience
- Error Retry: Automatically handles network errors
Framer Motion Animations
All page transitions and interactive animations are implemented with Framer Motion:
- Declarative API: Clean animation definitions
- Gesture Support: Drag, swipe, and other interactions
- Layout Animations: Automatically handles layout changes
- Performance Optimization: Uses GPU acceleration
Community and Contributing
Getting Help
- Documentation: Check the project README and code comments
- Issues: Submit issues on GitHub
- Discussions: Participate in community discussions
Contribution Guidelines
Contributions of code, documentation, or suggestions are welcome:
- Fork the repository
- Create a feature branch
- Commit your changes
- Submit a Pull Request
Roadmap
Future plans:
- Add more chart types and technical indicators
- Implement portfolio tracking features
- Support multi-language interface
- Add price alert functionality
- Native mobile applications
Conclusion
Global Exchange Rates is a feature-complete, technically advanced open-source forex market dashboard project. It demonstrates how to build professional-grade financial data applications using modern frontend tech stacks and the TradingView Data API.
Core Advantages:
- ✅ Fully open-source, freely customizable
- ✅ Modern tech stack, excellent performance
- ✅ BYOK model, cost transparency
- ✅ Rich features, ready to use
- ✅ Supports Cloudflare Pages deployment
Get Started Now: Visit https://forex.tradingviewapi.com/ to experience the live demo, or clone the project to start your custom development.
Related Resources:
Frequently Asked Questions
Global Exchange Rates is an open-source forex and market data dashboard with a TradingView-style interface. Built on Next.js 16, it provides real-time exchange rate queries, currency conversion, market leaderboards, news calendars, and more through the TradingView Data API.
Global Exchange Rates uses a BYOK (Bring Your Own Key) model. You need to subscribe to the TradingView Data API on RapidAPI, obtain your own API key, and configure it in the app's settings interface. The key is stored in the browser's localStorage, and the client sends requests directly to the API.
Main features include: real-time forex and market data display, currency conversion tools, market leaderboards and leader views, calendar and heatmap visualizations, news interface, quick exchange rate queries, and responsive design for desktop and mobile.
Built with Next.js 16, React 19, TypeScript, Tailwind CSS 4, TanStack Query (data fetching), Framer Motion (animations), Headless UI (components), and Lucide React (icons).
Yes. The project has integrated @opennextjs/cloudflare for one-click deployment to Cloudflare Pages. Use pnpm pages:build to build, then wrangler deploy to deploy.

