6.9 KiB
Task: CoinEx Dashboard — Unified Navigation & Settings Consolidation
Priority: HIGH
Assigned: Glitch → Hawk → Jinx + Pixel
Status: Spec
Date: 2026-03-01
Overview
Reorganize the CoinEx Dashboard with a consistent nav bar across all pages and consolidate all settings into one centralized Settings page. Settings flow downstream: Scanner uses them for signal calculation, Trader bot uses them for trade execution.
Navigation Bar
Every page gets the same persistent nav bar at the top:
┌─────────────────────────────────────────────────────────────┐
│ ⚡ CoinEx Platform [Home] [Trader] [Settings] [Logs] [Status] │
└─────────────────────────────────────────────────────────────┘
- Home (
/) — Futures scanner grid (existing) - Trader (
/trader) — Trader control panel (existing, minus config tab) - Settings (
/settings) — NEW: all configuration in one place - Logs (
/logs) — Unified audit log (existing) - Status (
/status) — System status (existing)
Active page is highlighted. Nav is a shared component used by all pages.
Implementation
- Create
components/NavBar.tsx— shared nav component - Use
usePathname()fromnext/navigationfor active state - Replace the ad-hoc headers on each page with
<NavBar /> - Remove the back arrows (← ) since nav handles navigation now
- Remove inline "Trader Control" and "Audit Log" links from home page header
Settings Page (/settings)
Single Source of Truth
All settings stored in one config file: trader_config.json at
/home/wdjones/.openclaw/workspace/projects/crypto-signals/data/coinex-live/trader_config.json
The scanner reads thresholds and coin list from this config too — no more hardcoded values in scanner.ts.
Settings Sections
1. Signal Configuration These control how the homepage scanner calculates and displays signals:
- Long signal threshold (currently hardcoded 45 in scanner.ts)
- Short signal threshold (currently hardcoded 50 in scanner.ts)
- Coin watchlist (currently hardcoded COINS array in scanner.ts) — add/remove coins with search
- Scan interval (currently 30s in scanner.ts)
2. Trading Configuration These control how the trader bot operates:
- Mode: LIVE / DRY-RUN / PAUSED
- Position size % (default 5%)
- Max concurrent positions (default 3)
- Max leverage cap (default 10x)
- Leverage tiers (score-based, e.g. ≥45→5x, ≥60→7x)
- TP % / SL %
- Trailing stop %
- Circuit breaker failure count (default 3)
- Kill switch drawdown % (default 50%)
3. Coin Blacklist / Whitelist
- Which coins can be traded (separate from which coins are scanned)
- Toggle individual coins on/off for trading
4. CoinEx API Connection
- Move the existing Settings modal content here (API credentials, connection test)
Config File Schema Update
{
"mode": "paused",
"scan_interval_seconds": 30,
"long_threshold": 45,
"short_threshold": 50,
"coin_watchlist": ["BTCUSDT", "ETHUSDT", ...],
"position_size_pct": 5.0,
"max_positions": 3,
"max_leverage": 10,
"leverage_tiers": [
{"min_score": 45, "leverage": 5},
{"min_score": 60, "leverage": 7}
],
"kill_switch_drawdown_pct": 50,
"tp_pct": 5.0,
"sl_pct": -3.0,
"trailing_stop_pct": 2.0,
"circuit_breaker_threshold": 3,
"coin_blacklist": [],
"coin_whitelist": [],
"coinex_access_id": "",
"coinex_secret_key": "",
"last_updated": "..."
}
Backend Changes
Scanner (lib/server/scanner.ts):
- Remove hardcoded
COINSarray — readcoin_watchlistfrom config - Remove hardcoded
LONG_THRESHOLD/SHORT_THRESHOLD— read from config - Read config at start of each scan cycle (hot reload)
- Add config reading utility (same
trader_config.jsonfile)
API route (/api/trader/config):
- Already exists — reuse for all settings reads/writes
- Add
scan_interval_secondsandcoin_watchlistto validation
Home page (app/page.tsx):
- Remove hardcoded
LONG_THRESHOLD/SHORT_THRESHOLDconstants - Read thresholds from config via WebSocket data (scanner sends them)
- Or fetch from
/api/trader/configon mount
Trader page (app/trader/page.tsx):
- Remove the "Configuration" tab entirely — it lives in Settings now
- Keep: Overview, Positions, Activity Logs tabs
- Overview still shows a summary of current settings (read-only)
Settings Modal (components/SettingsModal.tsx):
- Remove or deprecate — functionality moves to Settings page
Page Changes Summary
| Page | Add | Remove |
|---|---|---|
| All pages | <NavBar /> component |
Ad-hoc headers, back arrows |
Home (/) |
— | Inline nav links, hardcoded thresholds |
Trader (/trader) |
— | Configuration tab (moves to Settings) |
Settings (/settings) |
NEW: all config UI | — |
Logs (/logs) |
— | Back arrow |
Status (/status) |
— | Back arrow |
Files to Modify
components/NavBar.tsx— NEW shared navapp/page.tsx— replace header, read thresholds from configapp/trader/page.tsx— remove config tab, replace headerapp/settings/page.tsx— NEW settings pageapp/logs/page.tsx— replace headerapp/status/page.tsx— replace headerapp/layout.tsx— possibly add NavBar here instead of per-pagelib/server/scanner.ts— read config instead of hardcoded valuesapp/api/trader/config/route.ts— extend validation for new fieldslib/types.ts— extend TraderConfig type
Constraints
- All existing scoring logic in
lib/indicators.tsPRESERVED EXACTLY - Dark theme, monospace aesthetic
- Zero client-side CoinEx API calls
- Use
api.binance.usnotapi.binance.com - Standard stack: Next.js 16 + Tailwind v4 + Framer Motion + ShadCN + Lucide + TS
- Context7 mandatory for library docs
- Include unit tests for new components
- Must pass build (
npm run build) before submitting
QA Pipeline
- Glitch builds — implements all changes
- Hawk reviews — code review + verifies tests pass
- Jinx E2E — functional testing: nav works on all pages, settings save/load, scanner reads config, trader reads config
- Pixel visual — consistent nav styling, responsive, dark theme, no layout breaks
Definition of Done
- NavBar component renders on all 5 pages with correct active state
- Settings page has all 4 sections with working save/load
- Scanner reads thresholds + coin list from config (no hardcoded values)
- Trader page config tab removed (settings are in /settings)
- All pages use consistent header via NavBar
- Changing thresholds in Settings affects scanner behavior on next cycle
- Build passes
- Unit tests for NavBar and Settings page
- Hawk PASS
- Jinx PASS
- Pixel PASS