A real-time cryptocurrency price tracker for active traders — sub-second ticks, momentum-ranked gainers, a paper portfolio with live P/L, and threshold price alerts.
Features · Getting Started · Usage · Report Bug · Request Feature
Crypto Price Tracker is an open-source, cross-platform cryptocurrency price tracker mobile app built with React Native, Expo SDK 54, and TypeScript. It streams hundreds of Bitget USDT-perpetual pairs every second, ranks the coins moving right now across 1-minute, 1-hour, and funding-rate boards, and runs a paper-trading portfolio with live unrealized P/L. Designed to feel like a precision instrument — calm under pressure, fast even on a 2 GB Android phone.
Track live crypto prices, build a watchlist, paper-trade a portfolio, and get notified the moment a coin breaks your threshold — all from one native iOS & Android app.
🚧 Active development. The core app (markets, gainers, watchlist, portfolio, alerts, coin detail) is implemented and runnable. Roadmap items below are explicitly marked.
| Feature | Description | |
|---|---|---|
| ⚡ | Live price tape | Sub-second ticks across hundreds of Bitget USDT-perpetual pairs, with a UI-thread flash-on-tick so you catch what just moved. |
| 📈 | Momentum gainers | Three boards — 1-minute, 1-hour, and funding rate — recomputed as ticks roll in. |
| ⭐ | Watchlist | Star any coin; persisted to AsyncStorage so it survives app restarts. |
| 💼 | Paper portfolio | Add positions with entry + quantity, see live unrealized P/L per row and across the whole book. |
| 🔔 | Threshold alerts | Configurable 24h % move + short-window % alerts via local push notifications, deduped per coin and direction. |
| 🔍 | Coin detail | Live price hero, 60-minute sparkline, momentum tiles, 24h high/low, funding rate, and watchlist toggle. |
| 🎨 | Theming | System / light / dark with persistence and semantic up/down colors tuned for contrast in both themes. |
| 🚀 | Instant cold start | TanStack Query cache persisted to AsyncStorage, so reopens show last-known prices before the first poll lands. |
| Category | Technology |
|---|---|
| Framework | Expo SDK 54 + React Native 0.81 (New Architecture + React Compiler) |
| Language | TypeScript — strict, noUncheckedIndexedAccess, noImplicitOverride |
| Navigation | Expo Router 6 — file-based, typed routes |
| Server state | TanStack Query 5 + AsyncStorage persistence (1s refetch) |
| Client state | Zustand 5 — watchlist, portfolio, settings, momentum, alerts |
| Lists | @shopify/flash-list — 60+ FPS on a 500-row feed |
| Animations | Reanimated 4 + react-native-worklets |
| Validation | Zod 4 — portfolio input schemas |
| Charts | react-native-svg — custom Bezier sparkline |
| Notifications | expo-notifications — local threshold alerts |
| Surfaces | expo-glass-effect (iOS 26+) · expo-blur (iOS<26) · flat (Android) |
| Fonts | Inter · Space Grotesk · JetBrains Mono (tabular figures for prices) |
- Node.js >= 20.18 (LTS)
- npm >= 10 (or pnpm / Bun)
- Xcode 16+ for iOS · Android Studio with API 35 for Android
- Expo CLI runs via
npx— no global install needed
git clone https://github.com/aashir-athar/Crypto-Price-Tracker.git
cd Crypto-Price-Tracker
npm installnpm startThen, in the Expo dev server:
- Press
ito open the iOS simulator - Press
ato open the Android emulator - Or scan the QR code with Expo Go on a physical device
For full
expo-glass-effect(iOS 26 Liquid Glass) parity, build a dev client withnpx expo prebuild && npx expo run:ios/npx expo run:android. Seezero-to-deploy.mdfor the full fresh-machine-to-store guide.
Run the app, then explore the bottom tabs:
npm run ios # build & launch on the iOS simulator
npm run android # build & launch on the Android emulator
npm run web # web preview (best-effort)
npm run lint # lint across the tree
npx tsc --noEmit # strict TypeScript typecheckTypical flow once the app is open:
- Markets — browse the full live Bitget USDT-perpetual list; tap any coin for detail.
- Gainers — switch between 1m / 1h / funding boards to see what's moving now.
- Watchlist — star coins to pin them; the list persists across restarts.
- Portfolio — add a position (entry + quantity) and watch live unrealized P/L update with the tape.
- Settings — configure threshold alerts and theme.
The data plane is a single useTickers query refetching every second; useMomentumIngest writes each tick into a rolling per-coin buffer, and useAlertsRunner checks every coin against your thresholds and fires a local notification on breach.
Swap in a different exchange (Binance, Bybit, OKX)
The app is exchange-agnostic past the client. Edit src/api/bitget.ts (or add a sibling), make it return Coin[] matching the existing shape, then point useTickers at it. Zod validates the payload, so a mismatched shape fails loudly rather than silently.
- Live ticker stream with 1s refresh
- Momentum-ranked gainers (1m / 1h / funding)
- Watchlist persisted to AsyncStorage
- Paper portfolio with live unrealized P/L
- Threshold-based push alerts (24h + short window)
- System / light / dark theme with persistence
- Coin detail with sparkline + momentum tiles
- Multi-exchange aggregation (Binance, Bybit, OKX)
- Drag-to-reorder watchlist
- Export portfolio to CSV
- WebSocket stream to replace REST polling on the foreground tab
Contributions are welcome — first-time contributors especially. Open an issue first for any major change.
- Fork the repo
- Create a branch (
git checkout -b feat/your-feature) - Commit using Conventional Commits (
feat:,fix:,chore:…) - Run
npx tsc --noEmit && npm run lintuntil clean - Push and open a Pull Request into
main
Distributed under the MIT License. See LICENSE for details.
Aashir Athar
If this crypto price tracker helped you, consider leaving a ⭐ — it genuinely helps the project reach more developers.
Built by Aashir Athar with React Native, Expo & TypeScript.
Keywords: cryptocurrency price tracker · crypto portfolio tracker · React Native crypto app · Expo SDK 54 · Bitget USDT-perpetual · live crypto prices · Bitcoin Ethereum price alerts · iOS Android mobile app · TanStack Query · Zustand · TypeScript