This document outlines the complete user experience flow for the NIJA mobile application (iOS and Android). The app provides cryptocurrency traders with a powerful, intuitive interface to monitor their automated trading bot, manage settings, and track performance in real-time.
Persona 1: Active Trader (“Alex”)
Persona 2: Passive Investor (“Pat”)
Persona 3: Whale Trader (“Whitney”)
┌─────────────────────────────────────────────────────────────┐
│ Native Layer │
│ iOS (Swift) / Android (Kotlin) │
│ - Biometric Auth - Push Notifications - Secure Storage │
└───────────────────────┬─────────────────────────────────────┘
│
┌───────────────────────▼─────────────────────────────────────┐
│ React Native Layer │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Navigation │ │ Redux Store │ │ API Client │ │
│ │ Stack │ │ (State) │ │ (RTK Query) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Screens │ │ Components │ │ WebSocket │ │
│ │ │ │ │ │ Client │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└───────────────────────┬─────────────────────────────────────┘
│ HTTPS/WSS
▼
┌─────────────────────────────────────────────────────────────┐
│ NIJA Backend API │
│ Dashboard API / Trading API / WebSocket Server │
└─────────────────────────────────────────────────────────────┘
┌─────────────┐
│ App Opens │
└──────┬──────┘
│
▼
┌─────────────────┐ ┌──────────────────┐
│ Splash Screen │────>│ Welcome Screen │
│ (2 seconds) │ │ (First Launch) │
└─────────────────┘ └────────┬─────────┘
│
▼
┌─────────────────┐
│ Sign Up Flow │
└────────┬────────┘
│
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ Email │ │ Phone │ │ Google │
│ Sign Up │ │ Sign Up │ │ OAuth │
└─────┬──────┘ └─────┬──────┘ └─────┬──────┘
│ │ │
└────────────────┼────────────────┘
│
▼
┌─────────────────┐
│ Setup Profile │
│ (Name, Photo) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Choose Tier │
│ Basic/Pro/Ent. │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Connect │
│ Exchange API │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Enable │
│ Biometrics │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Setup Complete │
│ -> Dashboard │
└─────────────────┘
┌─────────────┐
│ App Opens │
└──────┬──────┘
│
▼
┌──────────────────┐
│ Check Session │
└────────┬─────────┘
│
┌────┴────┐
│ │
▼ ▼
┌────────┐ ┌────────────────┐
│ Valid │ │ Expired │
│Session │ │ Session │
└───┬────┘ └────────┬───────┘
│ │
│ ▼
│ ┌────────────────┐
│ │ Login Screen │
│ └────────┬───────┘
│ │
│ ┌────────┴────────┐
│ │ │
│ ▼ ▼
│ ┌──────────┐ ┌──────────┐
│ │Biometric │ │Email + │
│ │ Auth │ │Password │
│ └─────┬────┘ └─────┬────┘
│ │ │
│ └───────┬───────┘
│ │
▼ ▼
┌─────────────────────────┐
│ Dashboard Home │
└─────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Bottom Tab Navigation │
├──────────────┬──────────────┬──────────────┬────────────────┤
│ Dashboard │ Positions │ Activity │ Settings │
│ 🏠 │ 📊 │ 📜 │ ⚙️ │
└──────┬───────┴──────┬───────┴──────┬───────┴──────┬─────────┘
│ │ │ │
▼ ▼ ▼ ▼
[See Below] [See Below] [See Below] [See Below]
Purpose: Quick overview of bot performance and status
Layout:
┌─────────────────────────────────────────┐
│ NIJA 👤Alex 🔔(3) │ ← Header
├─────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────┐ │ ← Bot Status Card
│ │ 🟢 Bot Active │ │
│ │ Trading on Coinbase, Kraken │ │
│ │ │ │
│ │ Last trade: 2 minutes ago │ │
│ │ [Pause Bot] │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │ ← P&L Summary Card
│ │ Today's Performance │ │
│ │ │ │
│ │ Total P&L: +$245.67 (+2.4%) │ │
│ │ Trades: 12 │ │
│ │ Win Rate: 75% │ │
│ │ │ │
│ │ ───────────────────────────────│ │
│ │ All-Time: +$3,892.18 (+15.2%) │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │ ← Active Positions
│ │ Active Positions (3) │ │
│ │ │ │
│ │ BTC-USD $150.00 +$12.45▲ │ │
│ │ ETH-USD $100.00 +$8.20▲ │ │
│ │ SOL-USD $50.00 -$2.10▼ │ │
│ │ │ │
│ │ [View All Positions →] │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │ ← Recent Activity
│ │ Recent Activity │ │
│ │ │ │
│ │ 🟢 BTC-USD Buy $150 2m ago │ │
│ │ 🔴 ETH-USD Sell $80 15m ago │ │
│ │ 🟢 SOL-USD Buy $50 1h ago │ │
│ │ │ │
│ │ [View All Activity →] │ │
│ └─────────────────────────────────┘ │
│ │
└─────────────────────────────────────────┘
Interactive Elements:
API Endpoints Used:
GET /v1/dashboard/overview (on load)WebSocket /ws/dashboard (real-time updates)Purpose: Detailed view of all open positions
Layout:
┌─────────────────────────────────────────┐
│ ← Positions [Filter ▼] 🔍 │ ← Header
├─────────────────────────────────────────┤
│ │
│ Summary │
│ ┌─────────────────────────────────┐ │
│ │ Open: 3 Closed: 47 │ │
│ │ Total Value: $300.00 │ │
│ │ Unrealized P&L: +$18.55 (6.2%) │ │
│ └─────────────────────────────────┘ │
│ │
│ Open Positions │
│ ┌─────────────────────────────────┐ │
│ │ BTC-USD │ │
│ │ Entry: $62,450 Current: $63,280│ │
│ │ Size: $150.00 │ │
│ │ P&L: +$12.45 (8.3%) ▲ │ │
│ │ Duration: 2h 15m │ │
│ │ [Close Position] │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ ETH-USD │ │
│ │ Entry: $3,210 Current: $3,290 │ │
│ │ Size: $100.00 │ │
│ │ P&L: +$8.20 (8.2%) ▲ │ │
│ │ Duration: 3h 42m │ │
│ │ [Close Position] │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ SOL-USD │ │
│ │ Entry: $108.50 Current: $104.20│ │
│ │ Size: $50.00 │ │
│ │ P&L: -$2.10 (-4.2%) ▼ │ │
│ │ Duration: 45m │ │
│ │ [Close Position] │ │
│ └─────────────────────────────────┘ │
│ │
└─────────────────────────────────────────┘
Interactive Elements:
API Endpoints Used:
GET /v1/positions/open (on load)WebSocket /ws/positions (real-time P&L updates)POST /v1/positions/{id}/close (close position)Purpose: Deep dive into a specific position
Layout:
┌─────────────────────────────────────────┐
│ ← BTC-USD Position ⋮ │ ← Header
├─────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────┐ │ ← Price Chart
│ │ │ │
│ │ ╱╲ ╱╲ │ │
│ │ ╱ ╲ ╱ ╲ ╱╲ │ │
│ │ ╱ ╲╱ ╲╱ ╲ │ │
│ │ │ │
│ │ Entry ───────────────── │ │
│ │ │ │
│ │ 1H 4H 1D 1W 1M ALL │ │
│ └─────────────────────────────────┘ │
│ │
│ Position Details │
│ ┌─────────────────────────────────┐ │
│ │ Side: Long (Buy) │ │
│ │ Entry Price: $62,450.00 │ │
│ │ Current: $63,280.00 │ │
│ │ Size: $150.00 │ │
│ │ Amount: 0.0024 BTC │ │
│ │ P&L: +$12.45 (8.3%)▲ │ │
│ │ Duration: 2h 15m │ │
│ │ Exchange: Coinbase │ │
│ └─────────────────────────────────┘ │
│ │
│ Strategy Details │
│ ┌─────────────────────────────────┐ │
│ │ Strategy: APEX V7.1 │ │
│ │ Signal: RSI Oversold │ │
│ │ Entry Score: 85/100 │ │
│ │ Stop Loss: $61,200 (-2.0%) │ │
│ │ Take Profit: $64,500 (+3.3%) │ │
│ │ Trailing: Enabled │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ [Close Position Now] │ │
│ └─────────────────────────────────┘ │
│ │
└─────────────────────────────────────────┘
Interactive Elements:
API Endpoints Used:
GET /v1/positions/{id} (position details)GET /v1/positions/{id}/chart (price history)WebSocket /ws/positions/{id} (real-time updates)Purpose: Complete history of all trades and bot actions
Layout:
┌─────────────────────────────────────────┐
│ ← Activity [Filter ▼] 📅 │ ← Header
├─────────────────────────────────────────┤
│ │
│ Today - January 27, 2026 │
│ │
│ ┌─────────────────────────────────┐ │
│ │ 🟢 BTC-USD Buy │ │
│ │ 4:42 PM │ │
│ │ Entry at $63,280 × 0.0024 BTC │ │
│ │ Total: $150.00 │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ 🔴 ETH-USD Sell (Profit Take) │ │
│ │ 4:27 PM │ │
│ │ Exit at $3,290 × 0.0304 ETH │ │
│ │ Total: $80.00 │ │
│ │ Profit: +$8.20 (11.4%) ✓ │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ 🟢 SOL-USD Buy │ │
│ │ 3:02 PM │ │
│ │ Entry at $108.50 × 0.461 SOL │ │
│ │ Total: $50.00 │ │
│ └─────────────────────────────────┘ │
│ │
│ Yesterday - January 26, 2026 │
│ │
│ ┌─────────────────────────────────┐ │
│ │ 🔴 BTC-USD Sell (Stop Loss) │ │
│ │ 11:18 PM │ │
│ │ Exit at $61,850 × 0.0024 BTC │ │
│ │ Total: $148.00 │ │
│ │ Loss: -$4.50 (-3.0%) ✗ │ │
│ └─────────────────────────────────┘ │
│ │
│ [Load More...] │
│ │
└─────────────────────────────────────────┘
Interactive Elements:
API Endpoints Used:
GET /v1/activity?page=1&limit=20 (paginated)GET /v1/activity/filters (filter options)Purpose: Manage account, bot configuration, and preferences
Layout:
┌─────────────────────────────────────────┐
│ ← Settings │
├─────────────────────────────────────────┤
│ │
│ Profile │
│ ┌─────────────────────────────────┐ │
│ │ 👤 Alex Smith │ │
│ │ alex@example.com │ │
│ │ Pro Tier │ │
│ │ [Edit] │ │
│ └─────────────────────────────────┘ │
│ │
│ Trading │
│ ┌─────────────────────────────────┐ │
│ │ Bot Status 🟢 Active ⚡ │ │
│ │ Risk Level Medium › │ │
│ │ Max Position $200 › │ │
│ │ Max Daily Loss $100 › │ │
│ └─────────────────────────────────┘ │
│ │
│ Exchanges │
│ ┌─────────────────────────────────┐ │
│ │ Coinbase Connected ✓ › │ │
│ │ Kraken Connected ✓ › │ │
│ │ Binance Not Connected› │ │
│ │ [+ Add Exchange] │ │
│ └─────────────────────────────────┘ │
│ │
│ Notifications │
│ ┌─────────────────────────────────┐ │
│ │ Push Notifications ⚡ ON │ │
│ │ Trade Alerts ⚡ ON │ │
│ │ Price Alerts ⚡ OFF │ │
│ │ Email Digest ⚡ ON │ │
│ └─────────────────────────────────┘ │
│ │
│ Security │
│ ┌─────────────────────────────────┐ │
│ │ Biometric Auth ⚡ ON │ │
│ │ Two-Factor (2FA) ⚡ ON │ │
│ │ Change Password › │ │
│ │ Session Timeout › │ │
│ └─────────────────────────────────┘ │
│ │
│ Support │
│ ┌─────────────────────────────────┐ │
│ │ Help Center › │ │
│ │ Contact Support › │ │
│ │ Privacy Policy › │ │
│ │ Terms of Service › │ │
│ └─────────────────────────────────┘ │
│ │
│ [Sign Out] │
│ │
└─────────────────────────────────────────┘
Interactive Elements:
API Endpoints Used:
GET /v1/settings/user (load settings)PATCH /v1/settings/user (update settings)GET /v1/settings/exchanges (exchange connections)Purpose: Connect a new exchange account
Layout:
┌─────────────────────────────────────────┐
│ ← Connect Coinbase [1/3] │
├─────────────────────────────────────────┤
│ │
│ Step 1: Get Your API Credentials │
│ │
│ To connect Coinbase, you need: │
│ │
│ ✓ API Key │
│ ✓ API Secret │
│ ✓ Organization ID (if applicable) │
│ │
│ ┌─────────────────────────────────┐ │
│ │ 📖 How to create API keys: │ │
│ │ │ │
│ │ 1. Go to Coinbase Advanced │ │
│ │ 2. Settings > API Keys │ │
│ │ 3. Create new key │ │
│ │ 4. Enable "Trade" permission │ │
│ │ 5. Copy key & secret │ │
│ │ │ │
│ │ [View Detailed Guide →] │ │
│ └─────────────────────────────────┘ │
│ │
│ ⚠️ Security Tips: │
│ • Never share your API secret │
│ • Use IP whitelisting if available │
│ • Enable only "Trade" permissions │
│ • DO NOT enable "Withdraw" │
│ │
│ ┌─────────────────────────────────┐ │
│ │ [I Have My Keys] │ │
│ └─────────────────────────────────┘ │
│ │
└─────────────────────────────────────────┘
↓ (Next Step)
┌─────────────────────────────────────────┐
│ ← Connect Coinbase [2/3] │
├─────────────────────────────────────────┤
│ │
│ Step 2: Enter Your Credentials │
│ │
│ ┌─────────────────────────────────┐ │
│ │ API Key │ │
│ │ ┌─────────────────────────────┐ │ │
│ │ │ abcd1234efgh5678ijkl9012... │ │ │
│ │ └─────────────────────────────┘ │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ API Secret │ │
│ │ ┌─────────────────────────────┐ │ │
│ │ │ •••••••••••••••••••••••••• │ │ │
│ │ └─────────────────────────────┘ │ │
│ │ [👁 Show] │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Organization ID (Optional) │ │
│ │ ┌─────────────────────────────┐ │ │
│ │ │ │ │ │
│ │ └─────────────────────────────┘ │ │
│ └─────────────────────────────────┘ │
│ │
│ 🔒 Your credentials are encrypted │
│ and stored securely in our vault. │
│ │
│ ┌─────────────────────────────────┐ │
│ │ [Verify Connection] │ │
│ └─────────────────────────────────┘ │
│ │
└─────────────────────────────────────────┘
↓ (Next Step)
┌─────────────────────────────────────────┐
│ ← Connect Coinbase [3/3] │
├─────────────────────────────────────────┤
│ │
│ ✓ Connection Successful! │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Account verified: │ │
│ │ │ │
│ │ Account: alex@example.com │ │
│ │ Balance: $5,482.19 │ │
│ │ Markets: 247 pairs available │ │
│ └─────────────────────────────────┘ │
│ │
│ Trading Preferences │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Max Position Size │ │
│ │ ┌─────────────────────────────┐ │ │
│ │ │ $200 │ │ │
│ │ └─────────────────────────────┘ │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Allowed Pairs │ │
│ │ ⚡ All Pairs │ │
│ │ ○ Top 20 Only │ │
│ │ ○ Custom Selection... │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ [Start Trading] │ │
│ └─────────────────────────────────┘ │
│ │
└─────────────────────────────────────────┘
Interactive Elements:
API Endpoints Used:
POST /v1/credentials/verify (verify credentials)POST /v1/credentials/store (store encrypted)PATCH /v1/settings/trading (save preferences)// Connect to WebSocket
const socket = io('wss://api.nija.io', {
auth: {
token: jwtToken
}
});
// Subscribe to user's channel
socket.emit('subscribe', { channel: `user:${userId}` });
// Listen for real-time events
socket.on('position:update', (data) => {
// Update position in Redux store
dispatch(updatePosition(data));
});
socket.on('trade:executed', (data) => {
// Show notification
showNotification({
title: 'Trade Executed',
body: `${data.side} ${data.pair} for $${data.size}`
});
// Update activity feed
dispatch(addActivity(data));
});
socket.on('pnl:update', (data) => {
// Update P&L displays
dispatch(updatePnL(data));
});
socket.on('bot:status', (data) => {
// Update bot status
dispatch(updateBotStatus(data));
});
Notification Types:
// PositionCard.tsx
interface PositionCardProps {
pair: string;
entryPrice: number;
currentPrice: number;
size: number;
pnl: number;
pnlPercent: number;
duration: string;
onPress: () => void;
}
// TradeListItem.tsx
interface TradeListItemProps {
type: 'buy' | 'sell';
pair: string;
price: number;
size: number;
timestamp: Date;
pnl?: number;
onPress: () => void;
}
// StatCard.tsx
interface StatCardProps {
title: string;
value: string | number;
change?: number;
icon?: string;
trend?: 'up' | 'down' | 'neutral';
}
// ActionButton.tsx
interface ActionButtonProps {
title: string;
variant: 'primary' | 'secondary' | 'danger';
loading?: boolean;
disabled?: boolean;
onPress: () => void;
}
// PriceChart.tsx
interface PriceChartProps {
data: Array<{timestamp: Date, price: number}>;
interval: '1H' | '4H' | '1D' | '1W' | '1M';
entryPrice?: number;
stopLoss?: number;
takeProfit?: number;
}
# .github/workflows/mobile-app.yml
name: Mobile App CI/CD
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- run: npm install
- run: npm test
- run: npm run lint
build-ios:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- run: npm install
- run: cd ios && pod install
- run: npm run ios:build
- uses: actions/upload-artifact@v3
with:
name: ios-app
path: ios/build/NIJA.ipa
build-android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/setup-java@v3
with:
java-version: '11'
- run: npm install
- run: cd android && ./gradlew assembleRelease
- uses: actions/upload-artifact@v3
with:
name: android-app
path: android/app/build/outputs/apk/release/app-release.apk
deploy-testflight:
needs: build-ios
if: github.ref == 'refs/heads/main'
runs-on: macos-latest
steps:
- uses: actions/download-artifact@v3
with:
name: ios-app
- run: fastlane ios beta
deploy-play-store:
needs: build-android
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v3
with:
name: android-app
- run: fastlane android beta
Document Version: 1.0 Last Updated: January 27, 2026 Status: ✅ Ready for Implementation Owner: Mobile Team