This project is a full-featured mobile banking UI that replicates the look and feel of the National Bank of Egypt app. It demonstrates modern React Native development practices including atomic design, drawer & tab navigation, dark/light theming, OTP verification, biometric authentication UI, and map integration.
- Login with username & password
- Fingerprint / biometric authentication UI
- New user signup with Egyptian phone number validation
- OTP phone verification
- Set password with validation conditions
- Success confirmation screen
- Animated balance card
- Credit cards carousel with card details (holder, number, expiry, CVV)
- Quick-access services grid
- Send money to recent contacts
- Transaction history
- Transfer to another account
- Account picker dropdowns
- Amount & reason inputs
- OTP confirmation for transfers
- Transfer success modal
- Horizontal and Vertical quick-access list
- Add new beneficiary (name, phone, image)
- Interactive MapView centered on Cairo
- ATM location markers with details
- Dark / Light theme toggle (persisted via Context)
- Account summary
- Logout
| Category | Technology |
|---|---|
| Framework | React Native 0.74.1 |
| Language | TypeScript 5.0 |
| Navigation | React Navigation β Stack, Bottom Tabs, Drawer |
| Maps | react-native-maps |
| Animations | React Native Reanimated 3.11 |
| Icons | FontAwesome (Solid & Regular) via react-native-fontawesome |
| OTP Input | react-native-otp-textinput |
| Image Picker | react-native-image-picker |
| SVG | react-native-svg |
| Linting | ESLint + Prettier |
The component architecture follows the Atomic Design pattern:
NBE/
βββ App.tsx # Root β stack navigator, theme context, status bar
βββ index.js # Entry point
βββ assets/
β βββ fonts/ # Gemunu Libre (Bold, Regular)
β βββ images/ # Logos, backgrounds, card assets, profile images
βββ components/
β βββ atoms/ # Smallest UI elements
β β βββ CustomButton.tsx # Reusable button
β β βββ CustomInput.tsx # Styled text input
β β βββ CustomIcon.tsx # FontAwesome icon wrapper
β β βββ LoginInput.tsx # Auth-specific input
β β βββ MobileInput.tsx # Phone number input
β β βββ FingerPrint.tsx # Biometric auth UI
β β βββ Person.tsx # Beneficiary avatar item
β β βββ Service.tsx # Service grid item
β β βββ Picker.tsx # Dropdown picker
β β βββ SettingsItem.tsx # Settings row item
β β βββ TabBarIcon.tsx # Bottom tab icon
β β βββ ...
β βββ molecules/ # Composed atom groups
β β βββ BalanceCard.tsx # Balance display card
β β βββ CreditCard.tsx # Credit card component
β β βββ LoginHeader.tsx # Auth header
β β βββ LoginFooter.tsx # Auth footer
β β βββ ServicesContainer.tsx # Services grid
β β βββ PersonContainer.tsx # Send money contacts
β β βββ HistoryContainer.tsx # Transaction history
β β βββ SettingsContent.tsx # Settings menu items
β β βββ ...
β βββ organisms/ # Complex UI sections
β β βββ LoginForm.tsx # Complete login form
β β βββ TransferModal.tsx # Transfer confirmation modal
β β βββ CreditCardsContainer.tsx
β β βββ BeneficiariesHorizontalList.tsx
β β βββ BeneficiariesVerticalList.tsx
β β βββ SettingsContainer.tsx
β βββ pages/ # Full screens
β β βββ Main.tsx # Bottom tab navigator
β β βββ DrawerMain.tsx # Drawer layout
β β βββ Auth/ # Login, Signup, Verification, SetPassword, Success
β β βββ Home/ # Balance, CreditCards
β β βββ Transfer/ # TransferForm, OtpTransfer
β β βββ Beneficiaries/ # Main, History, Add
β β βββ ATMs/ # ATM map screen
β β βββ Splasher/ # Splash screen
β βββ templates/
β βββ OTPTemplate.tsx # Reusable OTP verification layout
βββ android/ # Android native project
βββ ios/ # iOS native project (CocoaPods)
βββ __tests__/ # Jest test files
# 1. Clone the repository
git clone https://github.com/<your-username>/NBE.git
cd NBE
# 2. Install dependencies
npm install
# 3. Install iOS pods (macOS only)
cd ios && pod install && cd ..
# 4. Start Metro bundler
npm start
# 5. Run on a platform
npm run ios # iOS
npm run android # Android