Skip to Content
Pump.fun ScalperDashboard & Alerts

Dashboard & Alerts

The bot ships an operator-facing read-only dashboard and a Telegram alerter, both fed from the same typed event bus. Neither can place or cancel trades — they are for observation and control (status / kill), not execution.

The hosted performance dashboard is at pumpdesk.nishimweprince.dev .

The dashboard

A Hono HTTP server (src/dashboard/server.ts) serves a Preact + Chart.js frontend (web/dashboard/src/main.tsx). It shows realized PnL from persisted positions, open exposure, recent positions, guardrail outcomes, detection/exit latency percentiles, the entry funnel, breaker history, the veto dry-run comparison, Live · Dry-run · Δ dual-track views, and basic system health.

npm run dashboard:build # set dashboard.enabled=true in config.yaml, then: npm start
  • Bind & auth. Defaults to 127.0.0.1:8787 and is disabled by default. If you bind to any non-localhost host, you must set DASHBOARD_USERNAME and DASHBOARD_PASSWORD — the server refuses an exposed binding without Basic Auth.
  • UI development. npm run dashboard:dev runs the Vite dev server; keep the bot’s dashboard server on 8787 so Vite can proxy /api requests.

API endpoints

All endpoints are read-only and under /api/* (same auth as the dashboard). Selected endpoints:

EndpointPurpose
GET /api/dashboard/summaryKPIs: expectancy, drawdown, fees, unrealized PnL, latency.
GET /api/risk/statusLive risk counters (requires the bot process, not the standalone server).
GET /api/analytics/opsOps package JSON.
GET /api/analytics/performance?range=24h|7d|30d|allEdge stats + exit-reason breakdown.
GET /api/analytics/funnel?range=…Graduation → accept → enter → close funnel.
GET /api/reports/trades.csv?range=…Trade blotter download.
GET /api/reports/ops.jsonOps health snapshot.
GET /api/reports/soak.json?range=…Fee-aware paper-soak package.
GET /api/reports/funnel.csv?range=…Hard-check fail rates.
GET /api/analytics/execution-drag?range=…Live vs dry-run twin: drag + opportunity cost.
GET /api/reports/execution-drag.csv?range=…Per-trade drag blotter.

summary, positions, pnl, analytics/performance, and reports/trades.csv also accept ?track=live|dry. pnl additionally accepts track=delta.

There is also an SSE stream (/api/stream) for live updates. A standalone dashboard server (src/dashboard/standalone.ts) can serve historical data without the bot running (live risk counters are unavailable in that mode).

Dual-track: live and dry-run twin

Every accepted candidate opens two positions: the real one, and an ideal paper twin at the same pool mid openLive prices from. The twin runs its own exit FSM on its own poller and never touches the wallet or the broadcaster. Δ(live, dry) is total execution drag (latency, slippage, real fees). When live cannot trade (max-concurrent, breaker, kill switch, failed entry), the twin measures opportunity cost instead.

Toggle Live · Dry-run · Δ in the dashboard topbar. Twins write to dry_run_positions only — simulated losses cannot trip live risk or resurrect as live positions. Fees are estimated on both legs, so feeDeltaSol reflects fill-count differences; total Δ still uses real live fills.

Configure under dryRunTwin: in config.yaml. Leave pollMs unset so the twin inherits positions.pricePollMs.

Acceptance gate. In paper mode the live path is itself an ideal fill, so Δ must be ≈ 0. A materially nonzero Δ in paper is an instrumentation bug, not drag.

Alert routing

Alerts are dispatched on the event bus and routed by recipient (src/alerts/telegram.ts):

  • Telegramopt-in per alert (the telegram: true flag on the payload). High-impact position events (open, exit trigger, close) are forwarded so an operator stays informed. Admins can also send commands: /status and /kill (the kill switch — see Run Modes & Safety).
  • Dashboard notifications — receive all alert events, including startup and general notifications.

Headless reports

Two report CLIs write to reports/ without needing the UI:

# Fee-aware paper-soak package — review before enabling live npm run report:soak -- --range 7d --out reports/ # Model-ready strategy review for a range (e.g. after a pilot week) npm run report:strategy -- --range 7d --out reports/strategy-week
  • soak.json — use before going live to confirm fee-adjusted net PnL, expectancy, profit factor, max drawdown, sample size, and exit-reason mix.
  • Strategy week package — emits SUMMARY.md (paste into a coding model first) plus structured JSON/CSV payloads (trades, fills, strata, config sessions) for a data-driven review of the strategy’s parameters.
Last updated on