A React Native fintech demo app combining crypto trading and sports betting. Built to demonstrate staff-level frontend engineering for fintech interviews.
- Crypto Trading - Real-time price updates for BTC, ETH, SOL
- Sports Betting - Live odds and match tracking
- Demo Account - Start with $10,000 fake balance
- Secure - Biometric auth, encrypted storage, auto-lock
- Real-time - WebSocket-powered live updates
- Offline Support - Queue actions when disconnected
| Layer | Technology |
|---|---|
| Mobile | Expo (managed workflow) + TypeScript |
| Navigation | Expo Router (file-based) |
| State | Zustand |
| Storage | MMKV (encrypted) + Expo Secure Store |
| Auth | expo-local-authentication (Face ID/Touch ID) |
| Lists | @shopify/flash-list |
| Server | Node.js + ws (separate repo) |
jtrade-app/
├── app/ # Expo Router screens
│ ├── (auth)/ # Auth flow screens
│ └── (tabs)/ # Main app tabs
├── components/ # Reusable UI components
├── constants/ # Theme, app config, messages
├── hooks/ # Custom React hooks
├── services/ # WebSocket, biometrics, storage
├── store/ # Zustand store
├── types/ # TypeScript type definitions
└── utils/ # Formatters, validators
# Install dependencies
yarn install
# Start development server
yarn start
# Run on iOS
yarn ios
# Run on Android
yarn androidThe betting system uses discriminated unions for type-safe category handling:
// TypeScript automatically narrows the type
if (event.category === EventCategory.SPORTS) {
event.homeTeam // ✓ TypeScript knows this exists
}- Biometric authentication (Face ID / Touch ID)
- 6-digit PIN fallback
- Encrypted storage with hardware-backed keys
- Auto-lock after inactivity
- WSS (WebSocket Secure) connections only
Built with extensibility in mind:
- Betting system ready for casino/esports expansion
- Crypto assets easily extendable
- Component architecture supports new features
MIT