A beautiful, production-ready mobile app built with React Native and Expo that combines currency/cryptocurrency conversion with a full-featured calculator. The app demonstrates modern software engineering practices with real-time API integration, smooth animations, and an intuitive user interface.
# Install dependencies
npm install
# Start the development server
npm start
# Run on iOS
npm run ios
# Run on Android
npm run android- Real-time Exchange Rates: Fetches live exchange rates from reliable APIs
- Multi-Currency Support: Convert between 10+ popular fiat currencies (USD, EUR, GBP, JPY, etc.)
- Cryptocurrency Support: Convert between 10+ major cryptocurrencies (BTC, ETH, SOL, etc.)
- Cross-Conversion: Seamlessly convert between fiat currencies and cryptocurrencies
- Smart Caching: Implements intelligent caching to reduce API calls and improve performance
- Favorites System: Save frequently used currencies for quick access (persisted locally)
- Conversion History: View and reuse recent conversions (up to 50 saved)
- Auto-Conversion: Automatically converts as you type (with smart debouncing)
- Search Functionality: Quickly find currencies with real-time search
- Network Awareness: Detects offline status and uses cached rates
- Beautiful UI: Modern, clean interface with smooth animations and intuitive controls
- Full-Featured: Supports all basic arithmetic operations (+, -, ร, รท)
- Advanced Controls: Clear (C), Clear Entry (CE), and Delete (DEL) functions
- Landscape Mode: Automatically rotates to landscape orientation for better usability
- Modern Design: Sleek, iOS-inspired calculator interface
- Smooth Animations: Fade-in animations and transitions throughout the app
- Responsive Design: Optimized for various screen sizes
- Error Handling: Comprehensive error handling with user-friendly messages
- Loading States: Clear visual feedback during API calls
- Tab Navigation: Easy navigation between converter and calculator
- Framework: React Native with Expo SDK 54
- Language: TypeScript
- Navigation: React Navigation v7
- State Management: Zustand
- API Integration: Axios
- Animations: React Native Reanimated
- Icons: Expo Vector Icons
- Screen Orientation: Expo Screen Orientation
- Haptic Feedback: Expo Haptics
- Network Status: Expo Network
- Persistence: AsyncStorage (for favorites & history)
- Error Handling: Error Boundaries
- Performance: React.memo, useMemo, useCallback optimizations
- User Feedback: Toast notifications
-
ExchangeRate-API (https://api.exchangerate-api.com)
- Free, no API key required
- Provides real-time fiat currency exchange rates
-
CoinGecko API (https://api.coingecko.com)
- Free tier available
- Provides real-time cryptocurrency prices
- Node.js (v20.19.4 or higher recommended)
- npm or yarn
- Expo CLI (installed globally or via npx)
- iOS Simulator (for Mac) or Android Emulator, or Expo Go app on your physical device
-
Clone the repository
git clone <repository-url> cd Fin
-
Install dependencies
npm install
-
Start the development server
npm start
-
Run on your preferred platform
- iOS: Press
iin the terminal or runnpm run ios - Android: Press
ain the terminal or runnpm run android - Web: Press
win the terminal or runnpm run web - Physical Device: Scan the QR code with Expo Go app
- iOS: Press
- Select the source currency (From) by tapping the currency button
- Enter the amount you want to convert
- Select the target currency (To)
- Tap "Convert" to see the result
- Use the swap button (
โ๏ธ ) to quickly swap currencies
- Navigate to the Calculator tab
- Rotate your device to landscape mode for optimal experience
- Use the calculator as you would any standard calculator
- Operations supported:
- Basic arithmetic: +, -, ร, รท
- Clear (C): Clears everything
- Clear Entry (CE): Clears current entry
- Delete (DEL): Removes last digit
Fin/
โโโ components/ # Reusable UI components
โ โโโ Calculator.tsx
โ โโโ CurrencyConverter.tsx
โโโ screens/ # Screen components
โ โโโ CalculatorScreen.tsx
โ โโโ ConverterScreen.tsx
โโโ services/ # API and business logic
โ โโโ api.ts
โโโ utils/ # Utility functions
โ โโโ calculator.ts
โโโ constants/ # App constants
โ โโโ currencies.ts
โโโ types/ # TypeScript type definitions
โ โโโ index.ts
โโโ store/ # Zustand state management
โ โโโ useConverterStore.ts
โ โโโ useCalculatorStore.ts
โโโ hooks/ # Custom React hooks
โ โโโ useNetworkStatus.ts
โ โโโ useToast.ts
โโโ utils/ # Utility functions
โ โโโ calculator.ts
โ โโโ formatNumber.ts
โ โโโ performance.ts
โโโ App.tsx # Main app component
โโโ app.json # Expo configuration
โโโ package.json # Dependencies
- TypeScript: Full type safety throughout the application
- Modular Architecture: Clean separation of concerns
- Error Handling: Comprehensive error handling with user feedback
- Performance: Intelligent caching to minimize API calls
- Loading States: Visual feedback during async operations
- Error Messages: Clear, actionable error messages with toast notifications
- Animations: Smooth transitions and fade-in effects
- Responsive Design: Works on various screen sizes
- Toast Notifications: Non-intrusive feedback for user actions
- Haptic Feedback: Tactile responses for better UX
- Performance Optimized: Memoization and callback optimization
- Caching Strategy: 1-minute cache to reduce API calls
- Error Recovery: Graceful error handling with retry capability
- Rate Limiting: Respects API rate limits through caching
The app is configured to:
- Support both portrait and landscape orientations
- Lock to portrait mode in the converter screen
- Allow landscape mode in the calculator screen
- Use safe area insets for proper display on notched devices
- The app uses free-tier APIs that don't require API keys
- Exchange rates are cached for 1 minute to improve performance
- The calculator automatically handles edge cases (division by zero, etc.)
- All currency codes follow ISO 4217 standard
- Architecture Overview - Detailed architecture and design decisions
- Contributing Guide - How to contribute to this project
- Changelog - Version history and changes
Contributions are welcome! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.
This project is licensed under the MIT License - see the LICENSE file for details.
This project is open source and available for educational purposes.
- ExchangeRate-API for providing free currency exchange rates
- CoinGecko for providing cryptocurrency price data
- Expo team for the excellent development platform
- React Navigation for the navigation solution
Built with โค๏ธ using React Native and Expo