✨ Ryt Bank Assessment – Payment Transfer Module

Goal Build a secure payment‑transfer flow with biometric authentication in React Native + TypeScript. This page is the single entry‑point for code, board, and other assets.

🔗 Quick Links

Purpose URL
GitHub repo https://github.com/jiman93/rytbank-zul
Demo video https://www.loom.com/share/3798a1edd9bb41f1baa9b31aa90f4ecd?sid=fdc9668b-c598-4cb8-b3d9-1a9cd8b69f25
Kanban board https://www.notion.so/1f3a73077ef48066b6eff8bf05044056?v=1f3a73077ef48107a92b000cb5d35c6a&pvs=4
Design decisions and challenges https://www.notion.so/Ryt-Bank-Take-Home-1f3a73077ef48010a062f71ef3cffd1d?pvs=4#1f3a73077ef48067b19ed6b6514e0e91
Requirement brief https://www.notion.so/Ryt-Bank-Requirements-1f3a73077ef48045a45adcf592ebcb0e

Kanban board

🎨 Design decisions and challenges

# Topic What & Why Outcome / Trade-off
1 Expo Go vs Biometrics Expo Go ships without LocalAuthentication native code, so Face ID fails silently. Automatic PIN fallback kicks in when the device lacks biometrics or the user cancels.
2 State Management – Zustand Needed something lighter than Redux, more explicit than Context. Zustand’s store keep re-renders low. No middleware out of the box; wrote a small persistence hook for AsyncStorage.
3 UX Error Handling Full banking-grade error matrix is outside 3-day scope. Strategy: single Error screen with Retry and Home buttons; non-blocking to the happy path. Allows graceful recovery without backend deep-dive
4 Pagination – Infinite FlatList Loading the full transfer history spiked memory on mid-tier Android. Implemented paginated FlatList onEndReached. Smooth scroll to load Recent Transfers
5 Styling Layer – NativeWind Chose NativeWind over Tamagui to exploit Tailwind muscle memory and ship faster. Utility classes + theme tokens keep UI consistent with minimal config. Tailwind JIT runs at runtime, tiny performance cost.