Overview
Key Features
- Real Time Forex Rates: Aggregates exchange rates from Jamaican banks and licensed cambios. Displays each provider's buy and sell rate for major currencies including USD, CAD, GBP, and EUR.
- Bank Comparison Engine: Automatically compares all available rates and highlights which institution offers the best value for buying or selling.
- Provider Directory: Displays detailed profiles for each financial institution including name, location, offered currencies, and rate history.
- Currency Converter: Converts between JMD and multiple foreign currencies using either mid-market rates or institution-specific rates.
- Financial Insights: Shows policy rate, inflation data, market trends, and forex-related updates relevant to Jamaican consumers.
- Notifications & Alerts: Users can set rate alerts (e.g., "Notify me when USD buy rate falls below 150"). Push notifications handled with Firebase Cloud Messaging.
- Zustand Global State Store: Maintains cached rates, provider data, user preferences, notifications, and local data to reduce API calls and provide a smooth offline-ready experience.
- Dark Mode Support: Full light/dark theme switching with custom token-based color system.
Technologies Used
- Expo + React Native: Core mobile framework for cross-platform development.
- Supabase: Primary backend for storing bank data, rate tables, provider profiles, and historical records.
- Firebase Cloud Functions: Handles scheduled scraping, rate updates, and push notification triggers.
- Zustand: Lightweight client side state management for caching rates and improving performance.
- PostHog: Analytics and feature flags for monitoring user interaction and rolling out new features safely.
- TypeScript: Ensures strong typing and safer, cleaner code across the application.
Database & Architecture Highlights
- Normalized Rate Tables: Structured database with banks, currencies, rates (bank_id, currency_id, buy, sell, timestamp), and alerts tables. Ensures fast queries, easier indexing, and scalable data.
- Scheduled Rate Fetching: Cloud functions run at intervals to fetch and validate exchange rates from public bank sources, then push updates to Supabase.
- Client Side Caching: Zustand stores last-fetched rates, reducing backend load and improving load time on home screen.