···11-# Welcome to your Expo app π
11+# React Native Demo App
22+33+A simple **mobile banking application** built with **React Native** and **Expo**, powered by the provided API (`react-native-demo`).
44+This app demonstrates clean architecture, modular code, and mobile development best practices.
55+66+---
77+88+## π± Features
99+1010+The app implements the core requirements from the assignment:
1111+1212+1. **Authentication** β Login with credentials (`test@test.test` / `password@123` by default).
1313+2. **Accounts Overview** β List of accounts (checking, savings, etc.).
1414+3. **Transactions** β View transactions for a selected account, with:
1515+ - search
1616+ - sort
1717+ - pagination
1818+ - infinite scroll
1919+4. **Cards Overview** β List of stored cards.
2020+2121+---
2222+2323+## ποΈ Architecture Decisions
2424+2525+- **Framework**: [Expo](https://expo.dev/) for fast development, simple build tooling, and easy testing on iOS, Android, and web.
2626+- **Language**: [TypeScript](https://www.typescriptlang.org/) for strong typing and maintainability.
2727+- **Navigation**: [React Navigation](https://reactnavigation.org/) for stack + tab navigation.
2828+- **Styling**: Basic **React Native styles** with the [Catppuccin](https://catppuccin.com/) color palette.
2929+ - In a real-world project, a UI component library (React Native Paper, Tamagui, NativeBase) would be added for consistency and scalability.
3030+- **Lists**: [FlashList](https://shopify.github.io/flash-list/) by Shopify for efficient rendering of large lists (transactions).
3131+ - FlashList provides smoother scrolling and better performance compared to FlatList.
3232+- **Data Fetching & State Management**: [TanStack Query](https://tanstack.com/query) for server-state management.
3333+ - Handles caching, background refetching, and pagination logic cleanly.
3434+ - Used together with FlashList to implement **infinite scroll** on transactions.
3535+- **Auth & App State**: Context + hooks for lightweight client state.
23633-This is an [Expo](https://expo.dev) project created with [`create-expo-app`](https://www.npmjs.com/package/create-expo-app).
3737+---
43855-## Get started
3939+## π§ Prerequisites
64077-1. Install dependencies
4141+- [Node.js](https://nodejs.org/) **v18 or higher**
4242+- [Expo CLI](https://docs.expo.dev/get-started/installation/):
4343+4444+ ```bash
4545+ npm install -g expo
4646+ ```
4747+4848+- The API server (`react-native-demo`) running locally at `http://localhost:3001`.
4949+5050+---
5151+5252+## π Installation
5353+5454+1. Clone the repository and navigate to the app folder:
5555+5656+ ```bash
5757+ git clone git@tangled.sh:mokkenstorm.dev/react-native-demo
5858+ cd react-native-demo/app
5959+ ```
6060+6161+2. Install dependencies:
862963 ```bash
1064 npm install
1165 ```
12661313-2. Start the app
6767+3. Generate API bindings from the OpenAPI spec:
14681569 ```bash
1616- npx expo start
7070+ npm run generate
1771 ```
18721919-In the output, you'll find options to open the app in a
7373+---
7474+7575+## βΆοΈ Running the App
7676+7777+Run with Expo:
7878+7979+```bash
8080+npm run ios # iOS simulator
8181+npm run android # Android emulator
8282+npm run web # Web browser
8383+```
20842121-- [development build](https://docs.expo.dev/develop/development-builds/introduction/)
2222-- [Android emulator](https://docs.expo.dev/workflow/android-studio-emulator/)
2323-- [iOS simulator](https://docs.expo.dev/workflow/ios-simulator/)
2424-- [Expo Go](https://expo.dev/go), a limited sandbox for trying out app development with Expo
8585+Expo will guide you to open the app on your device or emulator.
8686+8787+β οΈ **Note:** The API server **must be running** on `http://localhost:3001` for login and data fetching to work.
25882626-You can start developing by editing the files inside the **app** directory. This project uses [file-based routing](https://docs.expo.dev/router/introduction).
8989+---
27902828-## Get a fresh project
9191+## π§ͺ Testing
29923030-When you're ready, run:
9393+Unit tests are written with **Jest** and **React Native Testing Library**.
9494+Run tests with:
31953296```bash
3333-npm run reset-project
9797+npm test
3498```
35993636-This command will move the starter code to the **app-example** directory and create a blank **app** directory where you can start developing.
100100+---
371013838-## Learn more
102102+## π¦ Node & NPM Versions
391034040-To learn more about developing your project with Expo, look at the following resources:
104104+- **Node.js**: v18+
105105+- **npm**: v9+
411064242-- [Expo documentation](https://docs.expo.dev/): Learn fundamentals, or go into advanced topics with our [guides](https://docs.expo.dev/guides).
4343-- [Learn Expo tutorial](https://docs.expo.dev/tutorial/introduction/): Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web.
107107+(Verified using `nvm` for version consistency.)
441084545-## Join the community
109109+---
461104747-Join our community of developers creating universal apps.
111111+## β¨ Bonus Features
112112+113113+- β Refresh token handling to keep the user logged in.
114114+- β Pull-to-refresh on accounts/transactions.
115115+- β Loading indicators on API calls.
116116+- β Infinite scroll for transactions (FlashList + TanStack Query).
117117+- π² Accessibility improvements (VoiceOver, keyboard navigation).
118118+- π² CI/CD setup for Expo builds.
481194949-- [Expo on GitHub](https://github.com/expo/expo): View our open source platform and contribute.
5050-- [Discord community](https://chat.expo.dev): Chat with Expo users and ask questions.
120120+---
121121+122122+## πΊοΈ Navigation Flow
123123+124124+